JDBC 中 DatabaseMetaData 接口的使用
简单介绍一下 java.sql.DatabaseMetaData 接口,关于数据库的整体综合信息。官方 API 文档已经介绍很详细,我这里简单说一下实际的使用。
它还存在一系列的以 supports 开头的接口也比较实用,例如 supportsBatchUpdates() 获取此数据库是否支持批量更新,还有 supportsTransactions() 获取此数据库是否支持事务等等。
实现的功能很简单,就是根据数据库中的表自动生成相对应的 Java Bean 文件。
主要思路是先得到数据库中所有表,再得到每张表的所有字段,如果是主健字段则特殊标记一下。
主要用到几个接口:
ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
获取可在给定类别中使用的表的描述。
ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
获取可在指定类别中使用的表列的描述。
ResultSet getPrimaryKeys(String catalog, String schema, String table)
获取对给定表的主键列的描述。
ResultSet getExportedKeys(String catalog, String schema, String table)
获取引用给定表的主键列(表导入的外键)的外键列的描述。
// 取得数据库中所有表名称public List getTables() {List tables = new ArrayList();Connection con = null;ResultSet rs = null;try {con = DbUtils.getConnection("jwdt");rs = con.getMetaData().getTables(null, null, null, new String[] { "TABLE" });while (rs.next()) { // 注意:结果集中存在表的很多信息,表名称在第 3 列tables.add(rs.getString(3));}} catch (Exception e) {e.printStackTrace();} finally {DbUtils.close(con);}return tables;} // 根据表名称取得表所有字段public List getColumns(String table) {List columns = new ArrayList();Connection con = null;ResultSet rs = null;try {con = DbUtils.getConnection("jwdt");rs = con.getMetaData().getColumns(null, null, table, null);while (rs.next()) { // 注意:结果集中存在表的很多信息,字段名称在第 4 列columns.add(rs.getString(4));}} catch (Exception e) {e.printStackTrace();} finally {DbUtils.close(con);}return columns;} // 根据表名称取得表主键字段 // 取得表外键字段的操作使用 getExportedKeys(null, null, table) 方法public String getPrimaryKeys(String table) {String keys = "";Connection con = null;ResultSet rs = null;try {con = DbUtils.getConnection("jwdt");rs = con.getMetaData().getPrimaryKeys(null, null, table);while (rs.next()) {// 注意:结果集中存在表的很多信息,字段名称在第 4 列keys += rs.getString(4) + ",";}if (!keys.equals("")) { // 去掉最后面的逗号keys = keys.substring(0, keys.length() - 1);}} catch (Exception e) {e.printStackTrace();} finally {DbUtils.close(con);}return keys;}