JDBC读取数据库元数据,生成JAVA实体类

来源:互联网 发布:颜宁对韩春雨评价 知乎 编辑:程序博客网 时间:2024/05/18 22:42
[c-sharp] view plaincopyprint?
  1. JDBC读取数据库元数据,生成JAVA实体类  
  2. package com.nffish.util;  
  3.   
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6. import java.io.PrintWriter;  
  7. import java.sql.Connection;  
  8. import java.sql.PreparedStatement;  
  9. import java.sql.ResultSetMetaData;  
  10. import java.sql.SQLException;  
  11.   
  12. import com.nffish.common.DBSession;  
  13.   
  14. public class GenEntityTool {  
  15.     private String tablename = "petDiary";  
  16.   
  17.     private String[] colnames; // 列名数组  
  18.   
  19.     private String[] colTypes; // 列名类型数组  
  20.   
  21.     private int[] colSizes; // 列名大小数组  
  22.   
  23.     private boolean f_util = false// 是否需要导入包java.util.*  
  24.   
  25.     private boolean f_sql = false// 是否需要导入包java.sql.*  
  26.   
  27.     public GenEntityTool() {  
  28.         Connection conn = DBSession.getConnection(); // 得到数据库连接  
  29.         String strsql = "select * from " + tablename;  
  30.         try {  
  31.             PreparedStatement pstmt = conn.prepareStatement(strsql);  
  32.             ResultSetMetaData rsmd = pstmt.getMetaData();  
  33.             int size = rsmd.getColumnCount(); // 共有多少列  
  34.             colnames = new String[size];  
  35.             colTypes = new String[size];  
  36.             colSizes = new int[size];  
  37.             for (int i = 0; i < rsmd.getColumnCount(); i++) {  
  38.                 colnames[i] = rsmd.getColumnName(i + 1);  
  39.                 colTypes[i] = rsmd.getColumnTypeName(i + 1);  
  40.                 if (colTypes[i].equalsIgnoreCase("datetime")) {  
  41.                     f_util = true;  
  42.                 }  
  43.                 if (colTypes[i].equalsIgnoreCase("image")  
  44.                         || colTypes[i].equalsIgnoreCase("text")) {  
  45.                     f_sql = true;  
  46.                 }  
  47.                 colSizes[i] = rsmd.getColumnDisplaySize(i + 1);  
  48.             }  
  49.             String content = parse(colnames, colTypes, colSizes);  
  50.             try {  
  51.                 FileWriter fw = new FileWriter(initcap(tablename) + ".java");  
  52.                 PrintWriter pw = new PrintWriter(fw);  
  53.                 pw.println(content);  
  54.                 pw.flush();  
  55.                 pw.close();  
  56.             } catch (IOException e) {  
  57.                 e.printStackTrace();  
  58.             }  
  59.         } catch (SQLException e) {  
  60.             e.printStackTrace();  
  61.         } finally {  
  62.             DBSession.closeConnection(conn);  
  63.         }  
  64.     }  
  65.   
  66.     /** 
  67.     * 解析处理(生成实体类主体代码) 
  68.     */  
  69.     private String parse(String[] colNames, String[] colTypes, int[] colSizes) {  
  70.         StringBuffer sb = new StringBuffer();  
  71.         if (f_util) {  
  72.             sb.append("import java.util.Date;/r/n");  
  73.         }  
  74.         if (f_sql) {  
  75.             sb.append("import java.sql.*;/r/n/r/n/r/n");  
  76.         }  
  77.         sb.append("public class " + initcap(tablename) + " {/r/n");  
  78.         processAllAttrs(sb);  
  79.         processAllMethod(sb);  
  80.         sb.append("}/r/n");  
  81.         System.out.println(sb.toString());  
  82.         return sb.toString();  
  83.   
  84.     }  
  85.   
  86.     /** 
  87.     * 生成所有的方法 
  88.     *  
  89.     * @param sb 
  90.     */  
  91.     private void processAllMethod(StringBuffer sb) {  
  92.         for (int i = 0; i < colnames.length; i++) {  
  93.             sb.append("/tpublic void set" + initcap(colnames[i]) + "("  
  94.                     + sqlType2JavaType(colTypes[i]) + " " + colnames[i]  
  95.                     + "){/r/n");  
  96.             sb.append("/t/tthis." + colnames[i] + "=" + colnames[i] + ";/r/n");  
  97.             sb.append("/t}/r/n");  
  98.   
  99.             sb.append("/tpublic " + sqlType2JavaType(colTypes[i]) + " get"  
  100.                     + initcap(colnames[i]) + "(){/r/n");  
  101.             sb.append("/t/treturn " + colnames[i] + ";/r/n");  
  102.             sb.append("/t}/r/n");  
  103.         }  
  104.     }  
  105.   
  106.     /** 
  107.     * 解析输出属性 
  108.     *  
  109.     * @return 
  110.     */  
  111.     private void processAllAttrs(StringBuffer sb) {  
  112.         for (int i = 0; i < colnames.length; i++) {  
  113.             sb.append("/tprivate " + sqlType2JavaType(colTypes[i]) + " "  
  114.                     + colnames[i] + ";/r/n");  
  115.   
  116.         }  
  117.     }  
  118.   
  119.     /** 
  120.     * 把输入字符串的首字母改成大写 
  121.     *  
  122.     * @param str 
  123.     * @return 
  124.     */  
  125.     private String initcap(String str) {  
  126.         char[] ch = str.toCharArray();  
  127.         if (ch[0] >= ‘a’ && ch[0] <= ‘z’) {  
  128.             ch[0] = (char) (ch[0] – 32);  
  129.         }  
  130.         return new String(ch);  
  131.     }  
  132.   
  133.     private String sqlType2JavaType(String sqlType) {  
  134.         if (sqlType.equalsIgnoreCase("bit")) {  
  135.             return "bool";  
  136.         } else if (sqlType.equalsIgnoreCase("tinyint")) {  
  137.             return "byte";  
  138.         } else if (sqlType.equalsIgnoreCase("smallint")) {  
  139.             return "short";  
  140.         } else if (sqlType.equalsIgnoreCase("int")) {  
  141.             return "int";  
  142.         } else if (sqlType.equalsIgnoreCase("bigint")) {  
  143.             return "long";  
  144.         } else if (sqlType.equalsIgnoreCase("float")) {  
  145.             return "float";  
  146.         } else if (sqlType.equalsIgnoreCase("decimal")  
  147.                 || sqlType.equalsIgnoreCase("numeric")  
  148.                 || sqlType.equalsIgnoreCase("real")) {  
  149.             return "double";  
  150.         } else if (sqlType.equalsIgnoreCase("money")  
  151.                 || sqlType.equalsIgnoreCase("smallmoney")) {  
  152.             return "double";  
  153.         } else if (sqlType.equalsIgnoreCase("varchar")  
  154.                 || sqlType.equalsIgnoreCase("char")  
  155.                 || sqlType.equalsIgnoreCase("nvarchar")  
  156.                 || sqlType.equalsIgnoreCase("nchar")) {  
  157.             return "String";  
  158.         } else if (sqlType.equalsIgnoreCase("datetime")) {  
  159.             return "Date";  
  160.         }  
  161.   
  162.         else if (sqlType.equalsIgnoreCase("image")) {  
  163.             return "Blob";  
  164.         } else if (sqlType.equalsIgnoreCase("text")) {  
  165.             return "Clob";  
  166.         }  
  167.         return null;  
  168.     }  
  169.   
  170.     public static void main(String[] args) {  
  171.         new GenEntityTool();  
  172.     }  
  173. }  
原创粉丝点击