有同事问到在程序中怎样知道数据库表中那些字段是主键。当时不知道,晚上回来看了看JDK的文档。
在使用JDBC来查询数据库的时候,通常的步骤是:
1. 注册驱动程序
2. 获取数据库连接
3. 执行查询语句
4. 关闭连接。
在获得数据库连接后,就可以通过getMetaData()方法来获取DatabaseMetaData;然后通过DatabaseMetaData的getPrimaryKeys ()方法来获取主键的信息。
下面是我做的示例程序,该程序在JBuilder2005+oracle8i下通过:
import java.sql.*;
import javax.sql.*;
public class TestJDBC {
public TestJDBC() {
}
public static void main(String[] args) throws SQLException {
Connection con = null;
Statement st = null;
ResultSet rst = null;
try{
//注册数据库驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
//获取数据库连接
con = DriverManager.getConnection("jdbc:oracle:thin:@10.60.203.80:1521:TestDB","123","123");
//获取主键信息
rst = con.getMetaData().getPrimaryKeys(null,null,"USER");
//打印主键信息
if (!rst.isAfterLast()) {
rst.next();
System.out.println(rst.getString("TABLE_NAME") + " " +
rst.getString("COLUMN_NAME"));
}
}
catch (Exception e){
System.out.println(e.getLocalizedMessage());
}
finally{
try{
//关闭连接
if (rst != null)
rst.close();
if (con != null)
con.close();
}
catch (SQLException e){
throw e;
}
}
}
}
上面的程序中,在获取主键信息的时候,语句
rst = con.getMetaData().getPrimaryKeys(null,null,"USER");
用来获取主键信息。关于该函数的详细信息,请参阅JDK的文档。这里要说的是,在测试中发现第三个参数(数据库表名)是大小写敏感的,如果写成user是查不到结果的。