0
点赞
收藏
分享

微信扫一扫

JDBC中MetaData对象使用与详解

本文我们尝试了解一下​​java.sql​​​下的那些MetaData对象比如​​ResultSetMetaData​​​、​​RowSetMetaData​​​、​​RowSetMetaDataImpl​​​、​​DatabaseMetaData​​​以及​​ParameterMetaData​​对象。

【1】ResultSetMetaData

ResultSetMetaData​​ResultSetMetaData 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();

DatabaseMetaData​​DatabaseMetaData 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);
}
}


举报

相关推荐

0 条评论