JDBC讀取資料庫中繼資料,產生JAVA實體類<br />package com.nffish.util;</p><p>import java.io.FileWriter;<br />import java.io.IOException;<br />import java.io.PrintWriter;<br />import java.sql.Connection;<br />import java.sql.PreparedStatement;<br />import java.sql.ResultSetMetaData;<br />import java.sql.SQLException;</p><p>import com.nffish.common.DBSession;</p><p>public class GenEntityTool {<br /> private String tablename = "petDiary";</p><p> private String[] colnames; // 列名數組</p><p> private String[] colTypes; // 列名類型數組</p><p> private int[] colSizes; // 列名大小數組</p><p> private boolean f_util = false; // 是否需要匯入包java.util.*</p><p> private boolean f_sql = false; // 是否需要匯入包java.sql.*</p><p> public GenEntityTool() {<br /> Connection conn = DBSession.getConnection(); // 得到資料庫連接<br /> String strsql = "select * from " + tablename;<br /> try {<br /> PreparedStatement pstmt = conn.prepareStatement(strsql);<br /> ResultSetMetaData rsmd = pstmt.getMetaData();<br /> int size = rsmd.getColumnCount(); // 共有多少列<br /> colnames = new String[size];<br /> colTypes = new String[size];<br /> colSizes = new int[size];<br /> for (int i = 0; i < rsmd.getColumnCount(); i++) {<br /> colnames[i] = rsmd.getColumnName(i + 1);<br /> colTypes[i] = rsmd.getColumnTypeName(i + 1);<br /> if (colTypes[i].equalsIgnoreCase("datetime")) {<br /> f_util = true;<br /> }<br /> if (colTypes[i].equalsIgnoreCase("image")<br /> || colTypes[i].equalsIgnoreCase("text")) {<br /> f_sql = true;<br /> }<br /> colSizes[i] = rsmd.getColumnDisplaySize(i + 1);<br /> }<br /> String content = parse(colnames, colTypes, colSizes);<br /> try {<br /> FileWriter fw = new FileWriter(initcap(tablename) + ".java");<br /> PrintWriter pw = new PrintWriter(fw);<br /> pw.println(content);<br /> pw.flush();<br /> pw.close();<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> } catch (SQLException e) {<br /> e.printStackTrace();<br /> } finally {<br /> DBSession.closeConnection(conn);<br /> }<br /> }</p><p> /**<br /> * 解析處理(產生實體類主體代碼)<br /> */<br /> private String parse(String[] colNames, String[] colTypes, int[] colSizes) {<br /> StringBuffer sb = new StringBuffer();<br /> if (f_util) {<br /> sb.append("import java.util.Date;/r/n");<br /> }<br /> if (f_sql) {<br /> sb.append("import java.sql.*;/r/n/r/n/r/n");<br /> }<br /> sb.append("public class " + initcap(tablename) + " {/r/n");<br /> processAllAttrs(sb);<br /> processAllMethod(sb);<br /> sb.append("}/r/n");<br /> System.out.println(sb.toString());<br /> return sb.toString();</p><p> }</p><p> /**<br /> * 產生所有的方法<br /> *<br /> * @param sb<br /> */<br /> private void processAllMethod(StringBuffer sb) {<br /> for (int i = 0; i < colnames.length; i++) {<br /> sb.append("/tpublic void set" + initcap(colnames[i]) + "("<br /> + sqlType2JavaType(colTypes[i]) + " " + colnames[i]<br /> + "){/r/n");<br /> sb.append("/t/tthis." + colnames[i] + "=" + colnames[i] + ";/r/n");<br /> sb.append("/t}/r/n");</p><p> sb.append("/tpublic " + sqlType2JavaType(colTypes[i]) + " get"<br /> + initcap(colnames[i]) + "(){/r/n");<br /> sb.append("/t/treturn " + colnames[i] + ";/r/n");<br /> sb.append("/t}/r/n");<br /> }<br /> }</p><p> /**<br /> * 解析輸出屬性<br /> *<br /> * @return<br /> */<br /> private void processAllAttrs(StringBuffer sb) {<br /> for (int i = 0; i < colnames.length; i++) {<br /> sb.append("/tprivate " + sqlType2JavaType(colTypes[i]) + " "<br /> + colnames[i] + ";/r/n");</p><p> }<br /> }</p><p> /**<br /> * 把輸入字串的首字母改成大寫<br /> *<br /> * @param str<br /> * @return<br /> */<br /> private String initcap(String str) {<br /> char[] ch = str.toCharArray();<br /> if (ch[0] >= ‘a’ && ch[0] <= ‘z’) {<br /> ch[0] = (char) (ch[0] – 32);<br /> }<br /> return new String(ch);<br /> }</p><p> private String sqlType2JavaType(String sqlType) {<br /> if (sqlType.equalsIgnoreCase("bit")) {<br /> return "bool";<br /> } else if (sqlType.equalsIgnoreCase("tinyint")) {<br /> return "byte";<br /> } else if (sqlType.equalsIgnoreCase("smallint")) {<br /> return "short";<br /> } else if (sqlType.equalsIgnoreCase("int")) {<br /> return "int";<br /> } else if (sqlType.equalsIgnoreCase("bigint")) {<br /> return "long";<br /> } else if (sqlType.equalsIgnoreCase("float")) {<br /> return "float";<br /> } else if (sqlType.equalsIgnoreCase("decimal")<br /> || sqlType.equalsIgnoreCase("numeric")<br /> || sqlType.equalsIgnoreCase("real")) {<br /> return "double";<br /> } else if (sqlType.equalsIgnoreCase("money")<br /> || sqlType.equalsIgnoreCase("smallmoney")) {<br /> return "double";<br /> } else if (sqlType.equalsIgnoreCase("varchar")<br /> || sqlType.equalsIgnoreCase("char")<br /> || sqlType.equalsIgnoreCase("nvarchar")<br /> || sqlType.equalsIgnoreCase("nchar")) {<br /> return "String";<br /> } else if (sqlType.equalsIgnoreCase("datetime")) {<br /> return "Date";<br /> }</p><p> else if (sqlType.equalsIgnoreCase("image")) {<br /> return "Blob";<br /> } else if (sqlType.equalsIgnoreCase("text")) {<br /> return "Clob";<br /> }<br /> return null;<br /> }</p><p> public static void main(String[] args) {<br /> new GenEntityTool();<br /> }<br />}<br />