import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* POJO Product
*
* @author Tumi 日期:2012-10-10
*/
public class GenEntity {
private String tablename = "LEE_YEAR";// 表名
private String[] colnames; // 列名数组
private String[] colTypes; // 列名类型数组
private int[] colSizes; // 列名大小数组
private boolean f_util = true; // 是否需要导入包java.util.*
private boolean f_sql = false; // 是否需要导入包java.sql.*
// 数据库连接
private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521/ORCL";
private static final String NAME = "c##lee";
private static final String PASS = "c##lee";
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
/*
* 构造函数
*/
public GenEntity() {
// 创建连接
Connection con;
// 查要生成实体类的表
String sql = "SELECT * FROM user_tab_cols WHERE TABLe_name = upper('"
+ tablename + "')";
PreparedStatement pStemt = null;
try {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
con = DriverManager.getConnection(URL, NAME, PASS);
pStemt = con.prepareStatement(sql);
ResultSet rs = pStemt.executeQuery();
List<TableCol> ts = new ArrayList<TableCol>();
while (rs.next()) {
TableCol tableCol = new TableCol();
tableCol.setColnames(GenEntity.underlineToCamel2(rs
.getString("COLUMN_NAME")));
tableCol.setColTypes(rs.getString("DATA_TYPE"));
tableCol.setColSizes(rs.getInt("DATA_LENGTH"));
ts.add(tableCol);
}
int size = ts.size();
colnames = new String[size];
colTypes = new String[size];
colSizes = new int[size];
for (int i = 0; i < ts.size(); i++) {
colnames[i] = ts.get(i).getColnames();
colTypes[i] = ts.get(i).getColTypes();
if (colTypes[i].equalsIgnoreCase("datetime")) {
f_util = true;
}
if (colTypes[i].equalsIgnoreCase("image")
|| colTypes[i].equalsIgnoreCase("text")) {
f_sql = true;
}
colSizes[i] = ts.get(i).getColSizes();
}
String content = parse(colnames, colTypes, colSizes);
try {
File directory = new File("e:/lee.java");
FileWriter fw = new FileWriter("e:/lee.java");
PrintWriter pw = new PrintWriter(fw);
pw.println(content);
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// try {
// con.close();
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
public static final char UNDERLINE = '_';
public static String camelToUnderline(String param) {
if (param == null || "".equals(param.trim())) {
return "";
}
int len = param.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = param.charAt(i);
if (Character.isUpperCase(c)) {
sb.append(UNDERLINE);
sb.append(Character.toLowerCase(c));
} else {
sb.append(c);
}
}
return sb.toString();
}
public static String underlineToCamel(String param) {
if (param == null || "".equals(param.trim())) {
return "";
}
int len = param.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = param.charAt(i);
if (c == UNDERLINE) {
if (++i < len) {
sb.append(Character.toUpperCase(param.charAt(i)));
}
} else {
sb.append(c);
}
}
return sb.toString();
}
public static String underlineToCamel2(String param) {
if (param == null || "".equals(param.trim())) {
return "";
}
param = param.toLowerCase();
if ('f' == param.charAt(0)) {
param = param.substring(1);
}
if ('_' == param.charAt(param.length() - 1)) {
param = param.substring(0, param.length() - 1);
}
StringBuilder sb = new StringBuilder(param);
Matcher mc = Pattern.compile("_").matcher(param);
int i = 0;
while (mc.find()) {
int position = mc.end() - (i++);
// String.valueOf(Character.toUpperCase(sb.charAt(position)));
sb.replace(position - 1, position + 1,
sb.substring(position, position + 1).toUpperCase());
}
return sb.toString();
}
/**
* 功能:生成实体类主体代码
*
* @param colnames
* @param colTypes
* @param colSizes
* @return
*/
private String parse(String[] colnames, String[] colTypes, int[] colSizes) {
StringBuffer sb = new StringBuffer();
// 判断是否导入工具包
if (f_util) {
sb.append("import java.util.Date;\r\n");
}
if (f_sql) {
sb.append("import java.sql.*;\r\n");
}
sb.append("package com.share.barter.tool;\r\n");
sb.append("\r\n");
// 注释部分
sb.append(" /**\r\n");
sb.append(" * " + tablename + " 实体类\r\n");
sb.append(" * " + new Date() + " Ze Ming\r\n");
sb.append(" */ \r\n");
// 实体部分
sb.append("\r\n\r\npublic class " + initcap(tablename) + "{\r\n");
processAllAttrs(sb);// 属性
processAllMethod(sb);// get set方法
sb.append("}\r\n");
// System.out.println(sb.toString());
return sb.toString();
}
/**
* 功能:生成所有属性
*
* @param sb
*/
private void processAllAttrs(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " "
+ colnames[i] + ";\r\n");
}
}
/**
* 功能:生成所有方法
*
* @param sb
*/
private void processAllMethod(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tpublic void set" + initcap(colnames[i]) + "("
+ sqlType2JavaType(colTypes[i]) + " " + colnames[i]
+ "){\r\n");
sb.append("\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");
sb.append("\t}\r\n");
sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get"
+ initcap(colnames[i]) + "(){\r\n");
sb.append("\t\treturn " + colnames[i] + ";\r\n");
sb.append("\t}\r\n");
}
}
/**
* 功能:将输入字符串的首字母改成大写
*
* @param str
* @return
*/
private String initcap(String str) {
char[] ch = str.toCharArray();
if (ch[0] >= 'a' && ch[0] <= 'z') {
ch[0] = (char) (ch[0] - 32);
}
return new String(ch);
}
/**
* 功能:获得列的数据类型
*
* @param sqlType
* @return
*/
private String sqlType2JavaType(String sqlType) {
if (sqlType.equalsIgnoreCase("bit")) {
return "boolean";
} else if (sqlType.equalsIgnoreCase("tinyint")) {
return "byte";
} else if (sqlType.equalsIgnoreCase("smallint")) {
return "short";
} else if (sqlType.equalsIgnoreCase("int")
|| sqlType.equalsIgnoreCase("NUMBER")) {
return "int";
} else if (sqlType.equalsIgnoreCase("bigint")) {
return "long";
} else if (sqlType.equalsIgnoreCase("float")) {
return "float";
} else if (sqlType.equalsIgnoreCase("decimal")
|| sqlType.equalsIgnoreCase("numeric")
|| sqlType.equalsIgnoreCase("real")
|| sqlType.equalsIgnoreCase("money")
|| sqlType.equalsIgnoreCase("smallmoney")) {
return "double";
} else if (sqlType.equalsIgnoreCase("varchar")
|| sqlType.equalsIgnoreCase("char")
|| sqlType.equalsIgnoreCase("varchar2")
|| sqlType.equalsIgnoreCase("nvarchar")
|| sqlType.equalsIgnoreCase("nchar")
|| sqlType.equalsIgnoreCase("text")) {
return "String";
} else if (sqlType.equalsIgnoreCase("date")) {
return "Date";
} else if (sqlType.equalsIgnoreCase("image")) {
return "Blod";
}
return null;
}
/**
* 出口 TODO
*
* @param args
*/
public static void main(String[] args) {
// System.out.println(underlineToCamel2("fid_name"));
new GenEntity();
}
}
public class TableCol {
private String colnames;
private String colTypes;
private int colSizes;
public String getColnames() {
return colnames;
}
public void setColnames(String colnames) {
this.colnames = colnames;
}
public String getColTypes() {
return colTypes;
}
public void setColTypes(String colTypes) {
this.colTypes = colTypes;
}
public int getColSizes() {
return colSizes;
}
public void setColSizes(int colSizes) {
this.colSizes = colSizes;
}
}