在 java 程序开发中,我们要操作数据库最基本的方法就是使用 JDBC ,在 JDBC 技术规范中,提供了 Connection、Statement、PreparedStatement、ResultSet 等常用的编程接口。针对这些接口,JDBC 规范又提供了相应的接口描述规范,即 xxxMetaData ,DatabaseMetaData 以及 ResultSetMetaData 是两个常用的获取数据库元数据的相关信息的接口。
DatabaseMetaData 接口常用的方法有:
ResultSet getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types); //获取表信息
ResultSet getPrimaryKeys(String catalog,String schema,String table); //获取表主键信息
ResultSet getIndexInfo(String catalog,String schema,String table,boolean unique,boolean approximate); //获取表索引信息
ResultSet getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern); //获取表列信息
简单示例代码如下:
<span style="white-space:pre"> </span> DatabaseMetaData dbmd = conn.getMetaData();
System.out.println("数据库已知的用户: "+ dbmd.getUserName());
System.out.println("数据库URL: " + dbmd.getURL());
System.out.println("是否允许只读:" + dbmd.isReadOnly());
System.out.println("数据库的产品名称:" + dbmd.getDatabaseProductName());
System.out.println("数据库的版本:" + dbmd.getDatabaseProductVersion());
System.out.println("驱动程序的名称:" + dbmd.getDriverName());
System.out.println("驱动程序的版本:" + dbmd.getDriverVersion());
System.out.println("数据库中使用的表类型");
rs = dbmd.getTableTypes();
ResultSetMetaData 是用来描述 ResultSet 的,ResultSet 是 JDBC 中很重要的一个对象,用它来抽象长度和宽度均未知的数据表,几乎所有的方法和查询都将结果以 ResultSet 返回。当我们获得 ResultSet 时,它正好指向第一行之前的位置,因此我们可以使用 next 方法来遍历每一行数据。ResultSetMetaData 是用来描述 ResultSet 的对象,可以使用此对象获取列的数目、类型以及列的别名等。ResultSetMetaData 中常用的方法有:
getColumnCount(); 返回 ResultSet 中的列数。
getColumnName(int); 返回列序号为 int 的列名。
getColumnLabel(int); 返回此列暗含的标签。
isCurrency(int); 如果此列包含带有货币单位的一个数字,则返回 true。
isReadOnly(int); 如果此列为只读,则返回 true。
isAutoIncrement(int); 如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。
getColumnType(int); 返回此列的 SQL 数据类型。
简单的示例代码如下:
ResultSetMetaData resultMetaData = results.getMetaData();
int cols = resultMetaData.getColumnCount();
String resultRow = "";
for (int i = 1; i < cols; i++) {
resultRow += resultMetaData.getColumnName(i) + ";";
}
System.out.println(resultRow);
while (results.next()) {
resultRow = "";
for (int i = 1; i < cols; i++) {
try {
resultRow += results.getString(i) + ";";
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}
}
System.out.println(resultRow);
}