暂时处理
我们当然可以在数据库中用SQL获取,但是那语法我想看过的人都会感觉到头痛.
不过,我们在JDBC中却有个很好的办法.
首先我们看API中对于DataBaseMetaData类的描述,其中有一个方法是这么描述的
getPrimaryKeys
ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException
- 检索对给定表的主键列的描述。它们根据 COLUMN_NAME 进行排序。
每个主键列描述都有以下列:
- TABLE_CAT String => 表类别(可为
null
) - TABLE_SCHEM String => 表模式(可为
null
) - TABLE_NAME String => 表名称
- COLUMN_NAME String => 列名称
- KEY_SEQ short => 主键中的序列号
- PK_NAME String => 主键的名称(可为
null
)
- TABLE_CAT String => 表类别(可为
- 参数:
catalog
- 类别名称,因为存储在数据库中,所以它必须匹配类别名称。该参数为 "" 则检索没有类别的描述,为null
则表示该类别名称不应用于缩小搜索范围schema
- 模式名称,因为存储在数据库中,所以它必须匹配模式名称。该参数为 "" 则检索那些没有模式的描述,为null
则表示该模式名称不应用于缩小搜索范围table
- 表名称,因为存储在数据库中,所以它必须匹配表名称
这不是正是我们需要的primarykey嘛~哈哈,于是,我们先获取一个DataBaseMetaData对象,如何得到呢? connection = DriverManager.getConnection();
DataBaseMetaData dbmd = connection.getMetaData()就可以获取了.
通过这个对象 ResultSet rs = dbmd.getPrimaryKey("","",tableName);
String pk = rs.getString(4)即可得到你的tableName表中的主键是什么了.这里的参数4代表了COLUMN_NAME,注意,我们并没有使用6代表的PK_NAME来作为参数,因为6返回的将是你的主键的描述名.
需要注意的是,这个ResultSet对象rs并非只包含一条记录,如果主键是复合主键,则会返回多条记录.