【Jdbc】使用ResultSetMetaData类获得表的元数据(字段名、字段类型和长度)


jdbc虽然出现很多年了,但和SQL一样历久弥新,它的潜能还有待发掘。

下面是利用ResultSetMetaData类获得表的元数据(字段名、字段类型和长度)的程序,希望对大家有所帮助。

【目标表定义】

create table emp_from_10(
    id number(12),
    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)
);

【得到表的元数据(字段名、字段类型和长度)的程序】

package com.hy.lab;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;

/**
 * 表的元数据探测器
 */
public class TableMetaProber {
    //-- 以下为连接Oracle数据库的四大参数
    private static final String DRIVER = "oracle.jdbc.driver.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 void run(){
        Connection conn = null;
        PreparedStatement pstmt = null;

        try{
            String sql="select * from emp_from_10 where 1=2";

            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL, USER, PSWD);
            conn.setAutoCommit(false);
            pstmt = conn.prepareStatement(sql);
            // 核心语句,取得查询的元数据
            ResultSetMetaData rsmd=pstmt.executeQuery().getMetaData();

            for(int i=0;i<rsmd.getColumnCount();i++){
                int index=i+1;
                String columnName=rsmd.getColumnName(index);
                String columnType=rsmd.getColumnTypeName(index);
                int columnLength=rsmd.getColumnDisplaySize(index);

                String msg=String.format("columnName=%s,columnType=%s,columnLength=%d",columnName,columnType,columnLength);
                System.out.println(msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                pstmt.close();
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args){
        TableMetaProber prober=new TableMetaProber();
        prober.run();
    }
}

【输出】

columnName=ID,columnType=NUMBER,columnLength=13
columnName=F1,columnType=NVARCHAR2,columnLength=10
columnName=F2,columnType=NVARCHAR2,columnLength=10
columnName=F3,columnType=NVARCHAR2,columnLength=10
columnName=F4,columnType=NVARCHAR2,columnLength=10
columnName=F5,columnType=NVARCHAR2,columnLength=10
columnName=F6,columnType=NVARCHAR2,columnLength=10
columnName=F7,columnType=NVARCHAR2,columnLength=10
columnName=F8,columnType=NVARCHAR2,columnLength=10
columnName=F9,columnType=NVARCHAR2,columnLength=10

【结语】

利用上面的信息,稍微组合一下,就可以创建同构新表了。

END

相关