本文我们尝试了解一下java.sql下的那些MetaData对象比如ResultSetMetaData、RowSetMetaData、RowSetMetaDataImpl、DatabaseMetaData以及ParameterMetaData对象。
【1】ResultSetMetaData
ResultSetMetaDataResultSetMetaData rsmd = resultSet.getMetaData(); 描述结果集的元数据,可以得到结果集中的基本信息 结果集中有那些列,列名,列的别名等等。
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象
getColumnName(int column):获取指定列的名称 getColumnCount():返回当前 ResultSet 对象中的列数。 getColumnTypeName(int column):检索指定列的数据库特定的类型名称。 getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。 isNullable(int column):指示指定列中的值是否可以为 null。 isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。
实例代码如下:
@Test public void testResultSetMetaData() throws Exception { Connection connection = null; PreparedStatement pStatement = null; ResultSet resultSet = null; try { connection = JDBCToolss.getConnection(); String sql = "select id id,name name,address address,phone phone from customers "; pStatement = connection.prepareStatement(sql); resultSet = pStatement.executeQuery(); ResultSetMetaData rsmd = resultSet.getMetaData(); /* 得到数据库列的数量 */ int count = rsmd.getColumnCount(); System.out.println(count); /* 得到列名 */ while (resultSet.next()) { for (int i = 0; i < count; i++) { /* 得到列名 */ String columnName = rsmd.getColumnName(i + 1); /* 得到列别名 */ String columnLabel = rsmd.getColumnLabel(i + 1); /* 得到列值 */ Object columnValue = resultSet.getObject(columnLabel); } } } catch (Exception e) { e.printStackTrace(); } finally { JDBCToolss.release(resultSet, pStatement, connection); } }
【2】DatabaseMetaData
Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息。根据这些信息,JDBC可以访问一个实现事先并不了解的数据库。
获取这些信息的方法都是在DatabaseMetaData
类的对象上实现的,而DataBaseMetaData
对象是在Connection对象上获得的。
Connection connection=getConnection(); DatabaseMetaData metaData = connection.getMetaData();
DatabaseMetaDataDatabaseMetaData data = connection.getMetaData();
描述数据库的元数据对象
DatabaseMetaData 类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息:
getURL():返回一个String类对象,代表数据库的URL。 getUserName():返回连接当前数据库管理系统的用户名。 isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。 getDatabaseProductName():返回数据库的产品名称。 getDatabaseProductVersion():返回数据库的版本号。 getDriverName():返回驱动驱动程序的名称。 getDriverVersion():返回驱动程序的版本号。
实例代码如下:
@Test public void testDataBaseMetaData() throws Exception { Connection connection = null; ResultSet resultSet = null; try { connection = JDBCToolss.getConnection(); DatabaseMetaData data = connection.getMetaData(); // data.getVersionColumns(catalog, schema, table); System.out.println(data.getClientInfoProperties()); /* 得到mysql中有哪些数据库 */ resultSet = data.getCatalogs(); while (resultSet.next()) { System.out.println(resultSet.getString(1)); } /* 得到数据库的版本号 */ int version = data.getDatabaseMajorVersion(); System.out.println("version:" + version); /* 得到链接数据库的用户名 */ String userName = data.getUserName(); System.out.println("数据库连接名username:" + userName); data.getDefaultTransactionIsolation(); } catch (Exception e) { e.printStackTrace(); } finally { JDBCToolss.release(resultSet, null, connection); } }