@Override
	public boolean open(List<Matchable> patterns) {

		Iterator<Matchable> it = patterns.iterator();
		this.columns.clear();
		while (it.hasNext()) {
			Matchable pattern = it.next();
			this.columns.put(pattern.getTitle(), pattern.getDescription());
			this.fields.add(pattern.getTitle());
		}
			
		if (this.connect()) {
			if (this.isDatabaseExisted() || this.createDatabase() ) {
				if (this.isTableExisted() || this.createTable() ) {
					if (!this.checkTable()) {
						System.out.println("TABLE " + table + " is already existed in DATABASE " + database + ".");
						System.out.println("And it's structure is inconsistent to match patterns.");
						
						this.close();
						return false;
					}
					return true;
				}
				else
					System.err.println("Table failed");
			}
			else
				System.err.println("Database failed");
		}

		return false;
	}