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;
}

生成类属性的时候,还要注意数据库表字段的类型与 Java 类型的对应,最好多加一个方法作类型转换。
生成类文件的方式,建议使用类似 FreeMarker 的模板语言,直接写在 Java 类中代码太难看了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值