有关 JDBC 元数据的简单解析

来源:互联网 发布:石原慎太郎 知乎 编辑:程序博客网 时间:2024/05/19 13:30

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




0 0
原创粉丝点击