博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
根据数据库表结构生成java类
阅读量:5076 次
发布时间:2019-06-12

本文共 9757 字,大约阅读时间需要 32 分钟。

1 import java.io.File;  2 import java.io.FileWriter;  3 import java.io.IOException;  4 import java.io.PrintWriter;  5 import java.sql.Connection;  6 import java.sql.DatabaseMetaData;  7 import java.sql.PreparedStatement;  8 import java.sql.ResultSet;  9 import java.sql.ResultSetMetaData; 10 import java.sql.SQLException; 11 import java.util.ArrayList; 12 import java.util.List; 13   14 import android.ConnectionFactory; 15   16 /** 17  * 根据数据库表 生成java 实体类 18  * 19  * @author DLHT 20  * @time 2015年9月29日下午4:13:42 21  * @className GenEntityTool.java 22  */ 23 public class GenEntityTool { 24     private String tablename = "test"; 25   26     private String[] colnames; // 列名数组 27   28     private String[] colTypes; // 列名类型数组 29   30     private int[] colSizes; // 列名大小数组 31   32     private boolean f_util = false; // 是否需要导入包java.util.* 33   34     private boolean f_sql = false; // 是否需要导入包java.sql.* 35   36     public GenEntityTool() { 37   38         getTablesName(); 39   40   41         Connection conn = null; 42         PreparedStatement pstmt = null; 43         ResultSetMetaData rsmd = null; 44   45         conn = ConnectionFactory.getInstance().getConnection(); 46         String strsql = "select * from " + tablename; 47         try { 48             pstmt = conn.prepareStatement(strsql); 49             rsmd = pstmt.getMetaData(); 50             int size = rsmd.getColumnCount(); // 共有多少列 51             colnames = new String[size]; 52             colTypes = new String[size]; 53             colSizes = new int[size]; 54             for (int i = 0; i < rsmd.getColumnCount(); i++) { 55                 colnames[i] = rsmd.getColumnName(i + 1); 56                 colTypes[i] = rsmd.getColumnTypeName(i + 1); 57                 if (colTypes[i].equalsIgnoreCase("datetime")) { 58                     f_util = true; 59                 } 60                 if (colTypes[i].equalsIgnoreCase("image") 61                         || colTypes[i].equalsIgnoreCase("text")) { 62                     f_sql = true; 63                 } 64                 colSizes[i] = rsmd.getColumnDisplaySize(i + 1); 65             } 66             String content = parse(colnames, colTypes, colSizes); 67   68             try { 69                 FileWriter fw = new FileWriter(initcap(tablename) + ".java"); 70   71                 PrintWriter pw = new PrintWriter(fw); 72                 pw.println(content); 73                 pw.flush(); 74                 pw.close(); 75             } catch (IOException e) { 76                 e.printStackTrace(); 77             } 78         } catch (SQLException e) { 79             e.printStackTrace(); 80         } finally { 81             ConnectionFactory.getInstance().closeConnection(conn, pstmt, null); 82             rsmd = null; 83         } 84     } 85   86     /** 87      *    获取当前数据中的表名称 88      * @methodName getTablesName 89      * @time 2015年9月29日下午4:52:26 90      * @packageName fanshe 91      */ 92     public List
getTablesName(){ 93 List
list = null; 94 Connection conn = null; 95 DatabaseMetaData md = null; 96 ResultSet rs = null; 97 conn = ConnectionFactory.getInstance().getConnection(); 98 try { 99 md = conn.getMetaData();100 rs = md.getTables(null, null, null, null);101 if(rs!=null&&rs.next()){102 list = new ArrayList
();103 }104 while (rs.next()) {105 //System.out.println("|表"+(i++)+":"+rs.getString("TABLE_NAME"));106 String tableName = rs.getString("TABLE_NAME");107 list.add(tableName);108 }109 110 } catch (SQLException e) {111 e.printStackTrace();112 } finally {113 ConnectionFactory.getInstance().closeConnection(conn, null, rs);114 md = null;115 }116 return list;117 }118 119 /**120 * 解析处理(生成实体类主体代码)121 */122 private String parse(String[] colNames, String[] colTypes, int[] colSizes) {123 StringBuffer sb = new StringBuffer();124 if (f_util) {125 sb.append("import java.util.Date;\r\n");126 }127 if (f_sql) {128 sb.append("import java.sql.*;\r\n\r\n\r\n");129 }130 sb.append("public class " + initcap(tablename) + " {\r\n");131 processAllAttrs(sb);132 processAllMethod(sb);133 sb.append("}\r\n");134 135 //markerBean(initcap(tablename), sb.toString());136 137 return sb.toString();138 139 }140 141 /**142 * 创建java 文件 将生成的属性 get/set 方法 保存到 文件中143 * markerBean144 * @time 2015年9月29日下午4:15:22145 * @packageName fanshe146 * @param className 类名称147 * @param content 类内容 包括属性 getset 方法148 */149 public void markerBean(String className, String content) {150 String folder = System.getProperty("user.dir") + "/src/fanshe/";151 152 File file = new File(folder);153 if (!file.exists()) {154 file.mkdirs();155 }156 String fileName = folder + className + ".java";157 158 try {159 File newdao = new File(fileName);160 FileWriter fw = new FileWriter(newdao);161 fw.write(content);162 fw.flush();163 fw.close();164 } catch (IOException e) {165 e.printStackTrace();166 }167 }168 169 /**170 * 生成所有的方法171 *172 * @param sb173 */174 private void processAllMethod(StringBuffer sb) {175 for (int i = 0; i < colnames.length; i++) {176 sb.append("\tpublic void set" + initcap(colnames[i]) + "("177 + sqlType2JavaType(colTypes[i]) + " " + colnames[i]178 + "){\r\n");179 sb.append("\t\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");180 sb.append("\t}\r\n");181 182 sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get"183 + initcap(colnames[i]) + "(){\r\n");184 sb.append("\t\treturn " + colnames[i] + ";\r\n");185 sb.append("\t}\r\n");186 }187 }188 189 /**190 * 解析输出属性191 *192 * @return193 */194 private void processAllAttrs(StringBuffer sb) {195 for (int i = 0; i < colnames.length; i++) {196 sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " "197 + colnames[i] + ";\r\n");198 199 }200 }201 202 /**203 * 把输入字符串的首字母改成大写204 *205 * @param str206 * @return207 */208 private String initcap(String str) {209 char[] ch = str.toCharArray();210 if (ch[0] >= 'a' && ch[0] <= 'z') {211 ch[0] = (char) (ch[0] - 32);212 }213 return new String(ch);214 }215 216 private String sqlType2JavaType(String sqlType) {217 if (sqlType.equalsIgnoreCase("bit")) {218 return "bool";219 } else if (sqlType.equalsIgnoreCase("tinyint")) {220 return "byte";221 } else if (sqlType.equalsIgnoreCase("smallint")) {222 return "short";223 } else if (sqlType.equalsIgnoreCase("int")) {224 return "int";225 } else if (sqlType.equalsIgnoreCase("bigint")) {226 return "long";227 } else if (sqlType.equalsIgnoreCase("float")) {228 return "float";229 } else if (sqlType.equalsIgnoreCase("decimal")230 || sqlType.equalsIgnoreCase("numeric")231 || sqlType.equalsIgnoreCase("real")) {232 return "double";233 } else if (sqlType.equalsIgnoreCase("money")234 || sqlType.equalsIgnoreCase("smallmoney")) {235 return "double";236 } else if (sqlType.equalsIgnoreCase("varchar")237 || sqlType.equalsIgnoreCase("char")238 || sqlType.equalsIgnoreCase("nvarchar")239 || sqlType.equalsIgnoreCase("nchar")) {240 return "String";241 } else if (sqlType.equalsIgnoreCase("datetime")) {242 return "Date";243 }244 245 else if (sqlType.equalsIgnoreCase("image")) {246 return "Blob";247 } else if (sqlType.equalsIgnoreCase("text")) {248 return "Clob";249 }250 return null;251 }252 253 public static void main(String[] args) {254 new GenEntityTool();255 }256 }

 

获取当前数据库中 所有的表

 

1     /** 2      *    获取当前数据中的表名称 3      * @methodName getTablesName 4      * @time 2015年9月29日下午4:52:26 5      * @packageName fanshe 6      */ 7     public List
getTablesName(){ 8 List
list = null; 9 Connection conn = null;10 DatabaseMetaData md = null;11 ResultSet rs = null;12 conn = ConnectionFactory.getInstance().getConnection();13 try {14 md = conn.getMetaData();15 rs = md.getTables(null, null, null, null);16 if(rs!=null&&rs.next()){17 list = new ArrayList
();18 }19 while (rs.next()) {20 //System.out.println("|表"+(i++)+":"+rs.getString("TABLE_NAME"));21 String tableName = rs.getString("TABLE_NAME");22 list.add(tableName);23 }24 25 } catch (SQLException e) {26 e.printStackTrace();27 } finally {28 ConnectionFactory.getInstance().closeConnection(conn, null, rs);29 md = null;30 }31 return list;32 }

 

转载于:https://www.cnblogs.com/zfy0098/p/5098986.html

你可能感兴趣的文章
[多线程]线程基础(对象锁、class锁、同步、异步)
查看>>
一、Python表达式基础
查看>>
Android图片内存优化的几点心得
查看>>
【视频】半小时内编写一个贪吃蛇游戏
查看>>
Pyspider
查看>>
TCP与UDP区别(转)
查看>>
.NET 开发: 确定计算机上已安装的 .NET Framework 版本
查看>>
Python进阶05 循环设计
查看>>
关于Cocos2d-x手机上运行游戏的时候屏幕横屏改竖屏的解决方案
查看>>
QT qRegisterMetaType 注册MetaType
查看>>
常用类的课后作业
查看>>
svg 矢量图
查看>>
PHP PDO函数库详解
查看>>
机器学习之线性回归
查看>>
【Golang 接口自动化00】为什么要用Golang做自动化?
查看>>
Python图表绘制:matplotlib绘图库入门(转)
查看>>
2019 GPL 天梯赛总结
查看>>
字符串问题----去掉字符串中连续出现K个0的子串
查看>>
设计模式之建造者模式
查看>>
asp.net mvc源码分析-ModelValidatorProviders
查看>>