动态创建JavaBean

最近在做基于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");
	}*/
}


猜你喜欢

转载自blog.csdn.net/lengxiaomo123/article/details/51097236