大多数的数据库有许多的主关键字,但是一个表中不能有两行以上同时有相同的主关键字值。要确定一个数据库表的主关键字,你可以使用java 数据库连接(JDBC)。
JDBC 包含了强大的元数据处理能力。java.sql.Connection和java.sql.ResultSet类都能够通过调用它们的getMetaData方法进行映射,例如:
// java.sql中的所有类
Connection connection = .....
DatabaseMetaDatadbMeta = connection.getMetaData();
ResultSetrset = .....
ResultSetMetaDatarsMeta = rset.getMetaData();
java.sql.DatabaseMetaData类包含了查找主键的方法。你需要知道表名,目录名(catalog name),模式名(schema name)。如果目录名和模式名未知,你最好不去使用他们,或者使用"null"值。
// 查找Comment 表中的主关键字
// 不存在分类或者方案,所以两者都被置成空。
ResultSetpkRSet = dbMeta.getPrimaryKeys(null, null, "Comment");
while( pkRSet.next() ) {
System.err.println("****** Comment ******");
System.err.println("TABLE_CAT : "+pkRSet.getObject(1));
System.err.println("TABLE_SCHEM: "+pkRSet.getObject(2));
System.err.println("TABLE_NAME : "+pkRSet.getObject(3));
System.err.println("COLUMN_NAME: "+pkRSet.getObject(4));
System.err.println("KEY_SEQ : "+pkRSet.getObject(5));
System.err.println("PK_NAME : "+pkRSet.getObject(6));
System.err.println("****** ******* ******");
}
在例子表单“Comment”里有一个叫做“comment_id”的主关键字。
下面是在MySQL数据库中上面程序的输出结果:
****** Comment ******
TABLE_CAT :
TABLE_SCHEM:
TABLE_NAME : Comment
COLUMN_NAME: column_id
KEY_SEQ : 1
PK_NAME : column_id
****** ******* ******
之所以存在PK_NAME是因为有时,对于主关键字我们会给它取一个和列名不同的名字,而KEY_SEQ代表了主关键字的顺序号。一些数据库以字母表的顺序保存主关键字并为KEY_SEQ返回0.
当创建原始的数据库过程的时候,查找一个数据表的主关键字是非常重要的。JDBC MetaData类提供了必要的数据库镜象功能使得实现这些数据库过程变得可能。