Oracle表生成JavaBean

package com.batch.tabletojava

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

public class Table2JavaBean {
	private static final String TAB = "\t";
	private static final String LINE = "\r\n";

	public static void main(String[] args) {
		
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = null;
			String jdbcString = "jdbc:oracle:thin:@localhost:1521:xe";
			conn = DriverManager.getConnection(jdbcString, "oracle", "oracle");
			List<String> tableList = new ArrayList<String>();
			tableList = getTableList(conn);
			
			for(String s: tableList){
				makeJavaBean(conn, s);
				System.out.println(s);
			}

			
		}catch(Exception e){
			e.printStackTrace();
		}

	}
	
	private static void makeJavaBean( Connection conn ,String tableID) {
		
		FileOutputStream fo = null;
		DataOutputStream ds = null;
		File file = new File("c:\\tableBean\\" + tableID + ".java");
		String sql = "select * from " + tableID + " where 1<>1";
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			ResultSetMetaData md = rs.getMetaData();
			String tableName = getTableName(conn, tableID);
			int columnCount = md.getColumnCount();
			tableID = tableID.substring(0, 1).toUpperCase()
					+ tableID.substring(1);
			StringBuffer buff = new StringBuffer();
			
			buff.append("/*----------------------------------------------------------------------------------------");
			buff.append(LINE);
			buff.append("Program Name       | " + tableID + ".java");
			buff.append(LINE);
			buff.append("Language           | Java");
			buff.append(LINE);
			buff.append("Name               | " + tableName + "类");
			buff.append(LINE);
			buff.append("Preparation person | XX.XXX (XXXXX) 2013/12/20");
			buff.append(LINE);
			buff.append("Note               |");
			buff.append(LINE);
			buff.append("------------------------------------------------------------------------------------------");
			buff.append(LINE);
			buff.append("2013-12-20         | Original Source Release                 by XX.XXX (XXXX)");
			buff.append(LINE);
			buff.append("------------------------------------------------------------------------------------------*/"); 
			buff.append(LINE);
			buff.append("package com.batch.common;"); 
			buff.append(LINE);
			buff.append(" "); 
			buff.append(LINE);
			buff.append("/**"); 
			buff.append(LINE);
			buff.append(" * " + tableName + "类."); 
			buff.append(LINE);
			buff.append(" * "); 
			buff.append(LINE);
			buff.append(" * @author XX.XXX"); 
			buff.append(LINE);
			buff.append(" */"); 
			buff.append(LINE);

			buff.append("public class " + tableID + " extends WWUMTCOMMON {");
			buff.append(LINE);
			for (int i = 1; i <= columnCount; i++) {
				if("ZZ".equals(md.getColumnName(i).substring(0,2))){
					continue;
				}
				// 取得字段注释
				String columnComment = getColumnComment(conn, tableID, md.getColumnName(i));
				String columnID = makeColumnID(md.getColumnName(i));
				buff.append(TAB).append("/** "+columnComment+". */");
				buff.append(LINE);
				buff.append(TAB);
				buff.append("private "
						+ Table2JavaBean.toType(md.getColumnTypeName(i)) + " "
						+ columnID.substring(0,1).toLowerCase()
						+ columnID.substring(1)+ ";");
				buff.append(LINE);
			}

			for (int i = 1; i <= columnCount; i++) {
				if("ZZ".equals(md.getColumnName(i).substring(0,2))){
					continue;
				}
				// 取得字段注释
				String columnComment = getColumnComment(conn, tableID, md.getColumnName(i));
				buff.append(TAB);
				String pojiType = Table2JavaBean
						.toType(md.getColumnTypeName(i));
				String columnName = makeColumnID(md.getColumnName(i));
				columnName =  columnName.substring(0, 1).toLowerCase()
						+ columnName.substring(1);
				String getName = null;
				String setName = null;
				if (columnName.length() > 1) {
					// get
					buff.append(LINE).append(TAB).append("/** ");
					buff.append(LINE).append(TAB).append(" * 获取" +columnComment+"。");
					buff.append(LINE).append(TAB).append(" * @return "+columnName +" " + columnComment);
					buff.append(LINE).append(TAB).append(" */");

					getName = "public " + pojiType + " get"
							+ columnName.substring(0, 1).toUpperCase()
							+ columnName.substring(1) + "() {";

					buff.append(LINE).append(TAB).append(getName);
					buff.append(LINE).append(TAB).append(TAB);
					buff.append("return " + columnName + ";");
					buff.append(LINE).append(TAB).append("}");
					buff.append(LINE);
					
					// set
					setName = "public void set"
							+ columnName.substring(0, 1).toUpperCase()
							+ columnName.substring(1) + "("
							+ pojiType + " " + columnName + ") {";
					buff.append(LINE).append(TAB).append("/** ");
					buff.append(LINE).append(TAB).append(" * 设定"+ columnComment+"。 ");
					buff.append(LINE).append(TAB).append(" * @param "+columnName +" " + columnComment);
					buff.append(LINE).append(TAB).append(" */");
					buff.append(LINE).append(TAB).append(setName);
					buff.append(LINE).append(TAB).append(TAB);
					buff.append("this." + columnName + " = " + columnName + ";");
					buff.append(LINE).append(TAB).append("}");
					buff.append(LINE);
				}
			}
			buff.append("}").append(LINE);
			fo = new FileOutputStream(file);
			ds = new DataOutputStream(fo);
			ds.write(buff.toString().getBytes());
				
		}catch(Exception e){
			e.printStackTrace();
		} finally{
			try{
				if(ds != null){
					ds.flush();
					ds.close();
				}
				if(fo != null){
					fo.close();
				}
				if(rs != null){
					rs.close();
				}
				if(ps != null){
					ps.close();
				}
				
			}catch (Exception e){
				e.printStackTrace();
			}
		}
	}

	private static String makeColumnID(String columnID) {
		String[] strs = columnID.toLowerCase().split("_");
		StringBuffer sb = new StringBuffer();
		for(int i = 0; i<strs.length; i++){
			try{
				sb.append(strs[i].substring(0, 1).toUpperCase() + strs[i].substring(1).toLowerCase());
			}catch(Exception e){
				e.printStackTrace();
				System.out.println(columnID);
			}

		}
		
		return sb.toString();
	}

	private static String getColumnComment(Connection conn, String tableID, String columnID){
		String columnName = "";
		// USER_TAB_COLUMNS
		String sql = "select COMMENTS from USER_COL_COMMENTS where TABLE_NAME = ? and COLUMN_NAME = ?";
		PreparedStatement ps = null;
		ResultSet rs = null;
		try{
			ps = conn.prepareStatement(sql);
			ps.setString(1, tableID);
			ps.setString(2, columnID);
			rs = ps.executeQuery();

			while (rs.next()) {
				columnName = rs.getString("COMMENTS");
			}	
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				if(rs != null){
					rs.close();
				}
				if(ps != null){
					ps.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return columnName;
	}

	private static List<String> getTableList(Connection conn ){
		try{}catch(Exception e){}
		List<String> tableList = new ArrayList<String>();
		// USER_TAB_COLUMNS
		String sql = "select distinct TABLE_NAME from USER_TAB_COLUMNS";
//		System.out.println(sql);
		PreparedStatement ps = null;
		ResultSet rs = null;
		try{
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			String tableID = "";
			while (rs.next()) {
				tableID = rs.getString("TABLE_NAME");
//				System.out.println(tableID);
				tableList.add(tableID);
			}	
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				if(rs != null){
					rs.close();
				}
				if(ps != null){
					ps.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return tableList;
	}

	private static String getTableName(Connection conn ,String tableID) throws Exception{
		String tableName = "";
		// USER_TAB_COLUMNS
		String sql = "select COMMENTS from USER_TAB_COMMENTS where TABLE_NAME = ?";
		PreparedStatement ps = null;
		ResultSet rs = null;
		ps = conn.prepareStatement(sql);
		ps.setString(1, tableID);
		rs = ps.executeQuery();

		while (rs.next()) {
			tableName = rs.getString("COMMENTS");
			rs.close();
			return tableName;
		}	
		return tableName;
	}

	public static String toType(String str){
		String result = null;
		if(str.startsWith("VARCHAR2") || str.startsWith("CHAR")){
			result = "String";
		}else if(str.startsWith("NUMBER")){
			result = "int";
		}else if(str.startsWith("DATE")){
			result = "Date";
		}
		return result;
	}

}

  网上查到很多关于java做成数据库表javabean的例子,但是都没有自动生成注释。

在网上查到的例子的基础上,改写了一下。发帖备份。

posted on 2013-12-05 11:31  慢一拍儿  阅读(658)  评论(0编辑  收藏  举报

导航