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
