/** * */ package org.activejpa.db; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Driver; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Properties; /** * @author ganeshs * */ public class DatabaseMetadata { private DatabaseMetaData metaData; private Map<String, TableMetadata> tables = new HashMap<String, TableMetadata>(); public DatabaseMetadata(Connection connection) throws SQLException { this.metaData = connection.getMetaData(); } public TableMetadata getTableMetadata(String catalog, String schema, String tableName) throws SQLException { String tableId = getTableId(catalog, schema, tableName); TableMetadata table = tables.get(tableId); if (table != null) { return table; } ResultSet rs = null; try { rs = metaData.getTables(catalog, schema, tableName, new String[] {"TABLE", "VIEW"}); while (rs.next()) { String name = rs.getString("TABLE_NAME"); if (name.equalsIgnoreCase(tableName)) { table = new TableMetadata(metaData, rs); tables.put(tableId, table); return table; } } } finally { if (rs != null) { rs.close(); } } return table; } private String getTableId(String catalog, String schema, String tableName) { StringBuffer buffer = new StringBuffer(); if (catalog != null && catalog.length() > 0) { buffer.append(catalog).append("."); } if (schema != null && schema.length() > 0) { buffer.append(schema).append("."); } return buffer.append(tableName).toString(); } /** * @return the metaData */ public DatabaseMetaData getMetaData() { return metaData; } /** * @return the tables */ public Map<String, TableMetadata> getTables() { return tables; } public static void main(String[] args) throws Exception { Properties properties = new Properties(); properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/dbconfig.properties")); DBConfig config = new DBConfig(properties); DriverManager.registerDriver((Driver)Class.forName(config.getDriverClass()).newInstance()); Connection connection = DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword()); DatabaseMetadata metadata = new DatabaseMetadata(connection); TableMetadata tableMetadata = metadata.getTableMetadata(null, null, "schema_version"); for (ColumnMetadata columnMetadata : tableMetadata.getColumns().values()) { System.out.println(columnMetadata.getName() + " " + columnMetadata.getTypeName() + " " + columnMetadata.getTypeCode()); } System.out.println(tableMetadata); } }