private String[] getPrimaryKeyNames() throws SQLException { logger.debug("getPrimaryKeyNames() - start"); String schemaName = _qualifiedTableNameSupport.getSchema(); String tableName = _qualifiedTableNameSupport.getTable(); Connection connection = _connection.getConnection(); DatabaseMetaData databaseMetaData = connection.getMetaData(); DatabaseConfig config = _connection.getConfig(); IMetadataHandler metadataHandler = (IMetadataHandler) config.getProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER); ResultSet resultSet = metadataHandler.getPrimaryKeys(databaseMetaData, schemaName, tableName); List list = new ArrayList(); try { while (resultSet.next()) { String name = resultSet.getString(4); int sequence = resultSet.getInt(5); list.add(new PrimaryKeyData(name, sequence)); } } finally { resultSet.close(); } Collections.sort(list); String[] keys = new String[list.size()]; for (int i = 0; i < keys.length; i++) { PrimaryKeyData data = (PrimaryKeyData) list.get(i); keys[i] = data.getName(); } return keys; }
/** Execute the clause */ @SuppressWarnings("SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE") public void execute() { StringBuilder builder = new StringBuilder(); builder.append(templates.getCreateTable() + table + " (\n"); List<String> lines = new ArrayList<String>(columns.size() + foreignKeys.size() + 1); // columns for (ColumnData column : columns) { StringBuilder line = new StringBuilder(); line.append(column.getName() + " " + column.getType().toUpperCase()); if (column.getSize() != null) { line.append("(" + column.getSize() + ")"); } if (!column.isNullAllowed()) { line.append(templates.getNotNull().toUpperCase()); } if (column.isAutoIncrement()) { line.append(templates.getAutoIncrement().toUpperCase()); } lines.add(line.toString()); } // primary key if (primaryKey != null) { StringBuilder line = new StringBuilder(); line.append("CONSTRAINT " + primaryKey.getName() + " "); line.append("PRIMARY KEY(" + COMMA_JOINER.join(primaryKey.getColumns()) + ")"); lines.add(line.toString()); } // foreign keys for (ForeignKeyData foreignKey : foreignKeys) { StringBuilder line = new StringBuilder(); line.append("CONSTRAINT " + foreignKey.getName() + " "); line.append("FOREIGN KEY(" + COMMA_JOINER.join(foreignKey.getForeignColumns()) + ") "); line.append( "REFERENCES " + foreignKey.getTable() + "(" + COMMA_JOINER.join(foreignKey.getParentColumns()) + ")"); lines.add(line.toString()); } builder.append(" " + Joiner.on(",\n ").join(lines)); builder.append("\n)\n"); logger.info(builder.toString()); Statement stmt = null; try { stmt = connection.createStatement(); stmt.execute(builder.toString()); // indexes for (IndexData index : indexes) { String indexColumns = COMMA_JOINER.join(index.getColumns()); String prefix = templates.getCreateIndex(); if (index.isUnique()) { prefix = templates.getCreateUniqueIndex(); } String sql = prefix + index.getName() + templates.getOn() + table + "(" + indexColumns + ")"; logger.info(sql); stmt.execute(sql); } } catch (SQLException e) { throw new QueryException(e.getMessage(), e); } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { throw new QueryException(e); } } } }