根据数据库表结构生成java类
2016-01-04 15:08
295 查看
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import android.ConnectionFactory; /** * 根据数据库表 生成java 实体类 * * @author DLHT * @time 2015年9月29日下午4:13:42 * @className GenEntityTool.java */ public class GenEntityTool { private String tablename = "test"; private String[] colnames; // 列名数组 private String[] colTypes; // 列名类型数组 private int[] colSizes; // 列名大小数组 private boolean f_util = false; // 是否需要导入包java.util.* private boolean f_sql = false; // 是否需要导入包java.sql.* public GenEntityTool() { getTablesName(); Connection conn = null; PreparedStatement pstmt = null; ResultSetMetaData rsmd = null; conn = ConnectionFactory.getInstance().getConnection(); String strsql = "select * from " + tablename; try { pstmt = conn.prepareStatement(strsql); rsmd = pstmt.getMetaData(); int size = rsmd.getColumnCount(); // 共有多少列 colnames = new String[size]; colTypes = new String[size]; colSizes = new int[size]; for (int i = 0; i < rsmd.getColumnCount(); i++) { colnames[i] = rsmd.getColumnName(i + 1); colTypes[i] = rsmd.getColumnTypeName(i + 1); if (colTypes[i].equalsIgnoreCase("datetime")) { f_util = true; } if (colTypes[i].equalsIgnoreCase("image") || colTypes[i].equalsIgnoreCase("text")) { f_sql = true; } colSizes[i] = rsmd.getColumnDisplaySize(i + 1); } String content = parse(colnames, colTypes, colSizes); try { FileWriter fw = new FileWriter(initcap(tablename) + ".java"); PrintWriter pw = new PrintWriter(fw); pw.println(content); pw.flush(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } catch (SQLException e) { e.printStackTrace(); } finally { ConnectionFactory.getInstance().closeConnection(conn, pstmt, null); rsmd = null; } } /** * 获取当前数据中的表名称 * @methodName getTablesName * @time 2015年9月29日下午4:52:26 * @packageName fanshe */ public List<String> getTablesName(){ List<String> list = null; Connection conn = null; DatabaseMetaData md = null; ResultSet rs = null; conn = ConnectionFactory.getInstance().getConnection(); try { md = conn.getMetaData(); rs = md.getTables(null, null, null, null); if(rs!=null&&rs.next()){ list = new ArrayList<String>(); } while (rs.next()) { //System.out.println("|表"+(i++)+":"+rs.getString("TABLE_NAME")); String tableName = rs.getString("TABLE_NAME"); list.add(tableName); } } catch (SQLException e) { e.printStackTrace(); } finally { ConnectionFactory.getInstance().closeConnection(conn, null, rs); md = null; } return list; } /** * 解析处理(生成实体类主体代码) */ 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\r\n\r\n"); } sb.append("public class " + initcap(tablename) + " {\r\n"); processAllAttrs(sb); processAllMethod(sb); sb.append("}\r\n"); //markerBean(initcap(tablename), sb.toString()); return sb.toString(); } /** * 创建java 文件 将生成的属性 get/set 方法 保存到 文件中 * markerBean * @time 2015年9月29日下午4:15:22 * @packageName fanshe * @param className 类名称 * @param content 类内容 包括属性 getset 方法 */ public void markerBean(String className, String content) { String folder = System.getProperty("user.dir") + "/src/fanshe/"; File file = new File(folder); if (!file.exists()) { file.mkdirs(); } String fileName = folder + className + ".java"; try { File newdao = new File(fileName); FileWriter fw = new FileWriter(newdao); fw.write(content); fw.flush(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 生成所有的方法 * * @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("\t\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"); } } /** * 解析输出属性 * * @return */ private void processAllAttrs(StringBuffer sb) { for (int i = 0; i < colnames.length; i++) { sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\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); } private String sqlType2JavaType(String sqlType) { if (sqlType.equalsIgnoreCase("bit")) { return "bool"; } else if (sqlType.equalsIgnoreCase("tinyint")) { return "byte"; } else if (sqlType.equalsIgnoreCase("smallint")) { return "short"; } else if (sqlType.equalsIgnoreCase("int")) { 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")) { return "double"; } else if (sqlType.equalsIgnoreCase("money") || sqlType.equalsIgnoreCase("smallmoney")) { return "double"; } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")) { return "String"; } else if (sqlType.equalsIgnoreCase("datetime")) { return "Date"; } else if (sqlType.equalsIgnoreCase("image")) { return "Blob"; } else if (sqlType.equalsIgnoreCase("text")) { return "Clob"; } return null; } public static void main(String[] args) { new GenEntityTool(); } }
获取当前数据库中 所有的表
/** * 获取当前数据中的表名称 * @methodName getTablesName * @time 2015年9月29日下午4:52:26 * @packageName fanshe */ public List<String> getTablesName(){ List<String> list = null; Connection conn = null; DatabaseMetaData md = null; ResultSet rs = null; conn = ConnectionFactory.getInstance().getConnection(); try { md = conn.getMetaData(); rs = md.getTables(null, null, null, null); if(rs!=null&&rs.next()){ list = new ArrayList<String>(); } while (rs.next()) { //System.out.println("|表"+(i++)+":"+rs.getString("TABLE_NAME")); String tableName = rs.getString("TABLE_NAME"); list.add(tableName); } } catch (SQLException e) { e.printStackTrace(); } finally { ConnectionFactory.getInstance().closeConnection(conn, null, rs); md = null; } return list; }
相关文章推荐
- spring mvc 官方下载
- 不使用spring的aop功能实现日志输出
- Java设计模式_结构型_适配器模式_丑小鸭与白天鹅
- 重新下载jdk,虽已更改环境配置,但运行仍为原来的jdk?
- (转)Java中swap()方法的实现
- Shiro web 和spring
- JAVA虚拟机之六:虚拟机性能监控和故障处理工具
- 正则表达式--常用用法及lookahead、lookbehind
- ubuntu安装JDK
- Java中的数字处理
- jdk下载
- java -异常
- Java 使用 SlfLog4J 写日志
- java 接口
- Struts2自定义登录验证拦截器
- spring mvc ModelAndView向前台传值
- eclipse导入myeclipse的web项目
- JAVA学习12_Java中的注解是如何工作的?
- 在struts中犯的错误
- BASIC-12 十六进制转八进制 (用java超时的原因)