简单介绍一下 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)
获取引用给定表的主键列(表导入的外键)的外键列的描述。
生成类属性的时候,还要注意数据库表字段的类型与 Java 类型的对应,最好多加一个方法作类型转换。
生成类文件的方式,建议使用类似 FreeMarker 的模板语言,直接写在 Java 类中代码太难看了。
它还存在一系列的以 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 类中代码太难看了。