【JDBC/Metadata】如何在Java程序中获取表的主键们(包括单主键、联合主键和无主键)

【功用】

在Java程序中,以JDBC的方式获取表的主键

【代码】

主键寻找器代码,核心语句为下面标红的粗体字:

package com.hy.lab.primarykey;

import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class PrimaryKeyFinder {
    private Connection conn;
    private String table;

    public PrimaryKeyFinder(Connection conn,String table){
        this.conn=conn;
        this.table=table;
    }

    public void printPrimaryKeys(){
        try(ResultSet rs=this.conn.getMetaData().getPrimaryKeys(null, null, this.table)){
            if (null == rs) {
                System.out.println(String.format("表%s没有主键",this.table));
                return;
            }

            List<String> pks=new ArrayList<String>();
            while (rs.next()) {
                String pkStr = rs.getString("COLUMN_NAME");
                pks.add(pkStr);
            }

            String result=String.format("表%s有%d个主键:%s",this.table,pks.size(),String.join(",",pks));
            System.out.println(result);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args){
        try(Connection conn=DbUtil.getConn()){
            PrimaryKeyFinder finder=new PrimaryKeyFinder(conn,"emp625_3key".toUpperCase());
            finder.printPrimaryKeys();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

 

DBUtil工具类代码:

package com.hy.lab.primarykey;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbUtil {
    //-- 以下为连接Oracle数据库的四大参数
    private static final String DRIVER = "oracle.jdbc.OracleDriver";
    private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521/orcl";
    private static final String USER = "luna";
    private static final String PSWD = "1234";

    public static Connection getConn() throws Exception{
        Class.forName(DRIVER);
        Connection conn = DriverManager.getConnection(URL, USER, PSWD);
        return conn;
    }
}

 

【运行情况】

表EMP625_1KEY有1个主键:ID

表EMP625_NOKEY有0个主键:

表EMP625_3KEY有3个主键:F1,F2,ID

 

【供测试用的建表语句】

create table emp625_1key(
    id number(10),
    f1 nvarchar2(10),
    primary key(id)
);

create table emp625_3key(
    id number(10),
    f1 nvarchar2(10),
    f2 nvarchar2(10),
    f3 nvarchar2(10),
    f4 nvarchar2(10),
    f5 nvarchar2(10),
    f6 nvarchar2(10),
    f7 nvarchar2(10),
    f8 nvarchar2(10),
    f9 nvarchar2(10),
    primary key(id,f1,f2)
);

create table emp625_nokey(
    id number(10),
    f1 nvarchar2(10),
    f2 nvarchar2(10),
    f3 nvarchar2(10)
);

 

【参考资料】

https://www.it610.com/article/1292739578821681152.htm

END

posted @ 2022-06-25 11:01  逆火狂飙  阅读(1360)  评论(0编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东