@Override public List<Table> getTables(List<String> includes, List<String> excludes) { String filter = prepareIncludeAndExcludeClause(includes, excludes); List<Table> tables = new ArrayList<Table>(); String query = "SELECT TABLE_CATALOG, TABLE_NAME, TABLE_SCHEMA FROM information_schema.tables WHERE TABLE_TYPE=?" + filter; String tableType = "BASE TABLE"; try { PreparedStatement statement = getConnection().prepareStatement(query); statement.setString(1, tableType); ResultSet result = statement.executeQuery(); while (result.next()) { String catalog = result.getString("TABLE_CATALOG"); String schema = result.getString("TABLE_SCHEMA"); String name = result.getString("TABLE_NAME"); Table table = new Table(catalog, schema, name); table.setFields(getFieldsForTable(table)); // important :) tables.add(table); } } catch (SQLException e) { e.printStackTrace(); } return tables; }
@Override public PreparedStatement buildPreparedInsertStatement(Table table) throws Exception { List<Field> fields = table.getFields(); StringBuffer query = new StringBuffer("INSERT INTO "); StringBuffer values = new StringBuffer("VALUES("); query.append(buildTableName(table)); query.append(" ("); for (int i = 0, l = fields.size(); i < l; i++) { Field field = fields.get(i); query.append("["); query.append(field.getName()); query.append("]"); values.append("?"); if (i < l - 1) { query.append(","); values.append(","); } } query.append(") "); values.append(")"); query.append(values); return createPreparedStatement(query.toString()); }
/** * Delivers a list with {@link Field}'s for the given {@link Table}. * * @param table * @return */ private List<Field> getFieldsForTable(Table table) { List<Field> fields = new ArrayList<Field>(); try { DatabaseMetaData meta = getConnection().getMetaData(); ResultSet columns = meta.getColumns(null, null, table.getName(), null); while (columns.next()) { Field field = new Field(columns.getString("COLUMN_NAME"), columns.getInt("DATA_TYPE")); fields.add(field); } } catch (SQLException e) { e.printStackTrace(); } return fields; }
@Override public String buildTableName(Table table) { return "[" + table.getSchema() + "].[" + table.getName() + "]"; }