最近在做基于J2EE的异构数据库的迁移,以javabean为中介来存储表信息,为应对不同以及多种数据库的迁移,则需利用JDBC得到所有的表信息和字段信息,动态构建JavaBean。这里给出动态构建javabean的DEMO。其实就是利用PrintWriter类创建文件。
package com.hdu.edu.test;
/*
* 动态创建Javabean
*/
import java.io.File;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Types;
public class BuildJavabean {
public void build(String tableName){
Connection con=null;
PreparedStatement pment=null;
ResultSet rs=null;
PrintWriter pw=null;
String DriveClass="com.mysql.jdbc.Driver";
String DatabaseURL="jdbc:mysql://localhost:3306/hero?";
String DatabaseUser="root";
String DatabasePassword="123456";
try{
pw=new PrintWriter(new File("src/com/edu/model/Human.java"));
pw.println("package com.edu.model;\n\n");
pw.println();
pw.println("public class Human \n{\t");
//创建连接
con=SourceDatabase.getConnection(DriveClass, DatabaseURL, DatabaseUser, DatabasePassword);//简单的利用JDBC连接
//构建预处理器
pment=con.prepareStatement("select * from "+tableName+" where 1=2;");//where 1=2相当于搜索全部
rs = pment.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();//获取表信息,是JavaBean的字段来源
//获取表单的列数
int col=metaData.getColumnCount();
for(int i=1;i<=col;i++){
String pStr="";//setXxxx
String typeStr="";//类型
//获取列名
String columName=metaData.getColumnName(i);
//获取每一列的数据类型
int type=metaData.getColumnType(i);
//判断
if(Types.INTEGER==type){
typeStr="int";
}else if(Types.VARCHAR==type){
typeStr="String";
}
//组装private 的语句
pStr+="private "+typeStr+" "+columName+";";
//输出private字段
pw.println("\t"+pStr+"");
}
String constructStr="";//构造
//组装空参构造,并不是很需要
constructStr+="public Human()\n\t{\n\n\t}";
//输出空参构造
pw.println("\n\t"+constructStr+"\n");
for(int i=1;i<=col;i++)
{
String getStr="";
String setStr="";
String typeStr="";
//获取列名
String columName=metaData.getColumnName(i);//这部分可以写个函数
int type=metaData.getColumnType(i);
//判断
if(Types.INTEGER==type){
typeStr="int";
}else if(Types.VARCHAR==type){
typeStr="String";
}
//组装set 语句
setStr+="public void set"+columName.substring(0, 1).toUpperCase()+""+columName.substring(1)+"("+typeStr+" "+columName+")\n\t{\n";
setStr += "\t\tthis."+columName+" = "+columName+";\n\t}";
//组装get语句
getStr+="public "+typeStr+" get"+columName.substring(0,1).toUpperCase()+""+columName.substring(1)+"()\n\t{\n\t";
getStr+="\treturn this."+columName+";\n\t}";
//输出set
pw.println("\t"+setStr);
//输出get
pw.println("\t"+getStr);
}
pw.println("}");
//缓冲
pw.flush();
pw.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(rs!=null)
rs.close();
if(pment!=null)
pment.close();
if(con!=null)
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
/*public static void main(String args[]){
BuildJavabean bj = new BuildDTO();
bj.build("Human");
}*/
}