最近在做基于J2EE的异构数据库的迁移,以javabean为中介来存储表信息,为应对不同以及多种数据库的迁移,则需利用JDBC得到所有的表信息和字段信息,动态构建JavaBean。这里给出如何利用JDBC获取表信息和字段信息。
package com.hdu.edu.test;
/*
* 尝试获取表名和字段名,以便动态建立javabean
*/
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class TestGetTable {
public static void main(String args[]){
String DriverClass="oracle.jdbc.driver.OracleDriver";
String DatabaseUrl="jdbc:oracle:thin:@localhost:1521:orcl";//orcl服务名或SID
String DatabaseUser="scott";
String DatabasePassword="Ckm123";
Connection con=null;
PreparedStatement psta=null;
ResultSet res=null;
String columnName;
String columnType;
try{
con=SourceDatabase.getConnection(DriverClass, DatabaseUrl, DatabaseUser, DatabasePassword);
DatabaseMetaData dm=con.getMetaData();
ResultSet tableSet=dm.getTables(con.getCatalog(), "SCOTT", null, new String[]{"TABLE"});//
while(tableSet.next()) {//循环输出数据库中的表名
System.out.println(tableSet.getString("TABLE_NAME"));
}
ResultSet colRet =dm.getColumns(con.getCatalog(), "SCOTT", "EMP", null);
while(colRet.next()) {//循环输出EMP表的列名以及其他信息
columnName = colRet.getString("COLUMN_NAME");
columnType = colRet.getString("TYPE_NAME");
int datasize = colRet.getInt("COLUMN_SIZE");
int digits = colRet.getInt("DECIMAL_DIGITS");
int nullable = colRet.getInt("NULLABLE");
System.out.println(columnName+" "+columnType+" "+datasize+" "+digits+" "+nullable);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(res!=null)
res.close();
if(psta!=null)
psta.close();
if(con!=null)
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}