第一步:連接配接資料庫
<code>import</code> <code>java.sql.Connection;</code>
<code>import</code> <code>java.sql.DriverManager;</code>
<code>import</code> <code>java.sql.ResultSet;</code>
<code>import</code> <code>java.sql.SQLException;</code>
<code>import</code> <code>java.sql.Statement;</code>
<code>import</code> <code>javax.swing.JOptionPane;</code>
<code>public</code> <code>class</code> <code>DBConnection {</code>
<code>private</code> <code>static</code> <code>final</code> <code>String DBDRIVER = </code><code>"com.mysql.jdbc.Driver"</code><code>; </code><code>//驅動類類名</code>
<code>private</code> <code>static</code> <code>final</code> <code>String DBURL = </code><code>"jdbc:mysql://localhost:3306/ibatis"</code><code>; //連接配接URL</code>
<code>private</code> <code>static</code> <code>final</code> <code>String DBUSER = </code><code>"root"</code><code>; </code><code>//資料庫使用者名</code>
<code>private</code> <code>static</code> <code>final</code> <code>String DBPASSWORD = </code><code>"admin"</code><code>; </code><code>//資料庫密碼</code>
<code>static</code><code>{ </code><code>//将加載驅動放到靜态塊中</code>
<code>try</code> <code>{</code>
<code>Class.forName(DBDRIVER); </code><code>//加載驅動</code>
<code>} </code><code>catch</code> <code>(ClassNotFoundException e1) { </code><code>//發生加載驅動異常</code>
<code>JOptionPane.showMessageDialog(</code><code>null</code><code>,</code><code>"加載驅動失敗!!!"</code><code>,</code><code>"提示資訊"</code><code>,</code>
<code>JOptionPane.INFORMATION_MESSAGE); </code><code>//提示加載驅動失敗</code>
<code>}</code>
<code>public</code> <code>static</code> <code>Connection getConnection() {</code>
<code>Connection conn = </code><code>null</code><code>; </code><code>//建立Connection接口引用</code>
<code>conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD); </code><code>//建立連接配接</code>
<code>} </code><code>catch</code> <code>(SQLException e) { </code><code>// 發生連接配接異常</code>
<code>JOptionPane.showMessageDialog(</code><code>null</code><code>,</code><code>"連接配接MySQL連接配接失敗!!!"</code><code>,</code><code>"提示資訊"</code><code>,</code>
<code>JOptionPane.INFORMATION_MESSAGE); </code><code>//提示連接配接MySQL連接配接失敗</code>
<code>return</code> <code>conn;</code>
<code>public</code> <code>static</code> <code>void</code> <code>close(Connection conn) {</code>
<code>if</code> <code>(conn != </code><code>null</code><code>) { </code><code>//判斷Connection對象是否為空</code>
<code>conn.close(); </code><code>// 關閉連接配接資料庫資源</code>
<code>} </code><code>catch</code> <code>(SQLException e){ </code><code>//判斷關閉Connection對象時是否發生異常</code>
<code>System.out.println(</code><code>"關閉資料庫連接配接發生異常"</code><code>);</code>
<code>public</code> <code>static</code> <code>void</code> <code>close(Statement stmt) {</code>
<code>if</code> <code>(stmt != </code><code>null</code><code>){ </code><code>//判斷Statement對象是否為空</code>
<code>stmt.close(); </code><code>//關閉操作資料庫資源</code>
<code>} </code><code>catch</code> <code>(SQLException e){ </code><code>//判斷關閉Statement對象時是否發生異常</code>
<code>JOptionPane.showMessageDialog(</code><code>null</code><code>,</code><code>"關閉資料庫操作資源發生異常!!!"</code><code>,</code><code>"提示資訊"</code><code>,</code>
<code>JOptionPane.INFORMATION_MESSAGE); </code><code>//提示關閉資料庫操作資源發生異常</code>
<code>public</code> <code>static</code> <code>void</code> <code>close(ResultSet rs) {</code>
<code>if</code> <code>(rs != </code><code>null</code><code>) { </code><code>//判斷結果集是否為空</code>
<code>rs.close(); </code><code>//關閉結果集</code>
<code>} </code><code>catch</code> <code>(SQLException e){ </code><code>//判斷結果集是否發生異常</code>
<code>JOptionPane.showMessageDialog(</code><code>null</code><code>,</code><code>"關閉結果集發生異常!!!"</code><code>,</code><code>"提示資訊"</code><code>,</code>
<code>JOptionPane.INFORMATION_MESSAGE); </code><code>//提示關閉結果集發生異常</code>
第二步:執行轉換:
<code>import</code> <code>java.io.File;</code>
<code>import</code> <code>java.io.PrintWriter;</code>
<code>import</code> <code>java.sql.DatabaseMetaData;</code>
<code>import</code> <code>java.sql.PreparedStatement;</code>
<code>import</code> <code>java.sql.ResultSetMetaData;</code>
<code>import</code> <code>java.sql.Types;</code>
<code>import</code> <code>org.apache.commons.dbutils.DbUtils;</code>
<code>public</code> <code>class</code> <code>BuildDTO {</code>
<code>public</code> <code>void</code> <code>build(String tableName, String packageName, String className) {</code>
<code>Connection conn = </code><code>null</code><code>;</code>
<code>PreparedStatement pment = </code><code>null</code><code>;</code>
<code>ResultSet rs = </code><code>null</code><code>;</code>
<code>PrintWriter pw = </code><code>null</code><code>;</code>
<code>String pack = packageName.replace(</code><code>"."</code><code>, </code><code>"/"</code><code>);</code>
<code>// 包名</code>
<code>System.out.println(</code><code>"src/"</code> <code>+ pack + </code><code>"/"</code> <code>+ className + </code><code>".java"</code><code>);</code>
<code>pw = </code><code>new</code> <code>PrintWriter(</code><code>new</code> <code>File(</code><code>"src/"</code> <code>+ pack + </code><code>"/"</code> <code>+ className</code>
<code>+ </code><code>".java"</code><code>));</code>
<code>pw.println(</code><code>"package "</code> <code>+ packageName + </code><code>";\n\n"</code><code>);</code>
<code>pw.println(</code><code>""</code><code>);</code>
<code>pw.println(</code><code>"public class "</code> <code>+ className + </code><code>" \n{\t"</code><code>);</code>
<code>// 建立連接配接</code>
<code>conn = DBConnection.getConnection();</code>
<code>// 建構預處理器</code>
<code>pment = conn.prepareStatement(</code><code>"select * from "</code> <code>+ tableName</code>
<code>+ </code><code>" where 1 = 2;"</code><code>);</code>
<code>rs = pment.executeQuery();</code>
<code>ResultSetMetaData metaData = rs.getMetaData();</code>
<code>// 擷取表單的列數</code>
<code>int</code> <code>colum = metaData.getColumnCount();</code>
<code>for</code> <code>(</code><code>int</code> <code>i = </code><code>1</code><code>; i <= colum; i++) {</code>
<code>String pStr = </code><code>""</code><code>; </code><code>// setXxxx</code>
<code>String typeStr = </code><code>""</code><code>; </code><code>// 類型</code>
<code>// 擷取列名</code>
<code>String columName = metaData.getColumnName(i);</code>
<code>// 擷取每一列的資料類型</code>
<code>int</code> <code>type = metaData.getColumnType(i);</code>
<code>// System.out.println(i+"---"+type);</code>
<code>// 判斷</code>
<code>typeStr = type(type);</code>
<code>// 組裝 private 的語句</code>
<code>pStr += </code><code>"private "</code> <code>+ typeStr + </code><code>" "</code> <code>+ columName + </code><code>";"</code><code>;</code>
<code>// 輸出 private 的字段</code>
<code>pw.println(</code><code>"\t"</code> <code>+ pStr + </code><code>""</code><code>);</code>
<code>String constructStr = </code><code>""</code><code>; </code><code>// 構造</code>
<code>// 組裝空參構造</code>
<code>constructStr += </code><code>"public "</code> <code>+ className + </code><code>"()\n\t{\n\n\t}"</code><code>;</code>
<code>// 輸出空參構造</code>
<code>pw.println(</code><code>"\n\t"</code> <code>+ constructStr + </code><code>"\n"</code><code>);</code>
<code>String getStr = </code><code>""</code><code>;</code>
<code>String setStr = </code><code>""</code><code>;</code>
<code>String typeStr = </code><code>""</code><code>;</code>
<code>// 組裝 set 的語句</code>
<code>setStr += </code><code>"public void set"</code>
<code>+ columName.substring(</code><code>0</code><code>, </code><code>1</code><code>).toUpperCase() + </code><code>""</code>
<code>+ columName.substring(</code><code>1</code><code>) + </code><code>"("</code> <code>+ typeStr + </code><code>" "</code>
<code>+ columName + </code><code>")\n\t{\n"</code><code>;</code>
<code>setStr += </code><code>"\t\tthis."</code> <code>+ columName + </code><code>" = "</code> <code>+ columName</code>
<code>+ </code><code>";\n\t}"</code><code>;</code>
<code>// 組裝get語句</code>
<code>getStr += </code><code>"public "</code> <code>+ typeStr + </code><code>" get"</code>
<code>+ columName.substring(</code><code>1</code><code>) + </code><code>"()\n\t{\n\t"</code><code>;</code>
<code>getStr += </code><code>"\treturn this."</code> <code>+ columName + </code><code>";\n\t}"</code><code>;</code>
<code>// 輸出 set</code>
<code>pw.println(</code><code>"\t"</code> <code>+ setStr);</code>
<code>// 輸出 get</code>
<code>pw.println(</code><code>"\t"</code> <code>+ getStr);</code>
<code>pw.println(</code><code>"}"</code><code>);</code>
<code>// 緩沖</code>
<code>pw.flush();</code>
<code>pw.close();</code>
<code>} </code><code>catch</code> <code>(Exception e) {</code>
<code>e.printStackTrace();</code>
<code>} </code><code>finally</code> <code>{</code>
<code>// 關閉連接配接</code>
<code>DbUtils.closeQuietly(conn, pment, rs);</code>
<code>public</code> <code>String type(</code><code>int</code> <code>type) {</code>
<code>String typeStr = </code><code>null</code><code>;</code>
<code>if</code> <code>(Types.INTEGER == type) {</code>
<code>typeStr = </code><code>"Integer"</code><code>;</code>
<code>} </code><code>else</code> <code>if</code> <code>(Types.VARCHAR == type) {</code>
<code>typeStr = </code><code>"String"</code><code>;</code>
<code>} </code><code>else</code> <code>if</code> <code>(Types.CHAR == type) {</code>
<code>typeStr = </code><code>"CHAR"</code><code>;</code>
<code>} </code><code>else</code> <code>if</code> <code>(Types.TIMESTAMP == type) {</code>
<code>typeStr = </code><code>"Date"</code><code>;</code>
<code>} </code><code>else</code> <code>if</code> <code>(Types.INTEGER == type) {</code>
<code>} </code><code>else</code> <code>if</code> <code>(Types.LONGVARCHAR == type) {</code>
<code>return</code> <code>typeStr;</code>
<code>//擷取資料庫中的所有表</code>
<code>public</code> <code>void</code> <code>getTableNameByCon(Connection con) {</code>
<code>DatabaseMetaData meta = con.getMetaData();</code>
<code>ResultSet rs = meta.getTables(</code><code>null</code><code>, </code><code>null</code><code>, </code><code>null</code><code>,</code>
<code>new</code> <code>String[] { </code><code>"TABLE"</code> <code>});</code>
<code>while</code> <code>(rs.next()) {</code>
<code>System.out.println(</code><code>"表名:"</code> <code>+ rs.getString(</code><code>3</code><code>));</code>
<code>System.out.println(</code><code>"表所屬使用者名:"</code> <code>+ rs.getString(</code><code>2</code><code>));</code>
<code>System.out.println(</code><code>"------------------------------"</code><code>);</code>
<code>con.close();</code>
<code>} </code><code>catch</code> <code>(Exception e1) {</code>
<code>// TODO Auto-generated catch block</code>
<code>e1.printStackTrace();</code>
<code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>
<code>BuildDTO dto = </code><code>new</code> <code>BuildDTO();</code>
<code>dto.build(</code><code>"User"</code><code>, </code><code>"com.mzsx.sql2bean"</code><code>, </code><code>"User"</code><code>);</code>
<code>dto.getTableNameByCon(DBConnection.getConnection());</code>
版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任
本文轉自 夢朝思夕 51CTO部落格,原文連結:http://blog.51cto.com/qiangmzsx/1305085