java实现从oracle数据库中读出table配置并逆向生成model类

来源:互联网 发布:v家歌曲知乎 编辑:程序博客网 时间:2024/06/05 20:47

刚学习java jdbc的时候写的一个工具类,现在回头看当时的代码果然有点惨不忍睹,但是觉得可能对初学者来说还有些参考价值,还是拿出来献丑了。

(连接oracle的代码就不贴了)

首先是核心类DataBaseToJava.java:


package com.modeller.dao;import java.io.File;import java.io.FileWriter;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 com.modeller.core.DB;public class DataBaseToJava {private static String dir = "src/com/modeller/model";        //包路径private static String packagename = "com.modeller.model";    //包名//user为要逆向生成model类的table所属的orcale用户,因为orcale有大量系统表,不指定用户会把别的表也一起读进来public static void getAllModels(String user) throws SQLException{String sql = "";Connection con = DB.getConnection();DatabaseMetaData meta = con.getMetaData();PreparedStatement ps = null;ResultSet rs = meta.getTables(null, null, null, new String[]{"TABLE"});String rt="\r\n";  //回车换行      while(rs.next()){if(user.equals(rs.getString(2))){String java = "";String tablename = rs.getString("TABLE_NAME");//System.out.println(user+"用户的表:"+tablename);sql = "select * from "+tablename;ps = con.prepareStatement(sql);ResultSetMetaData col = ps.getMetaData();//开始写model类        java="package "+packagename+";" +  rt + rt;         java+="public class "+upFirstLetter(tablename)+" {" + rt;         //循环定义属性for(int i=1;i<=col.getColumnCount();i++){int columnType = col.getColumnType(i);String columnName = col.getColumnName(i);System.out.println(columnName+",type:"+columnType);java+="   private "+getDataType(columnType)+" "+columnName.toLowerCase()+";" + rt;}//循环写getter/setter方法for(int i=1;i<=col.getColumnCount();i++){int columnType = col.getColumnType(i);String columnName = col.getColumnName(i);java+="   public "+getDataType(columnType)+" get"+upFirstLetter(columnName)+"(){" + rt;java+="       return "+columnName.toLowerCase()+";"+rt;java+="   }"+rt;java+="   public void set"+upFirstLetter(columnName)+"("+getDataType(columnType)+" "+columnName.toLowerCase()+"){" + rt;java+="       this."+columnName.toLowerCase()+" = "+columnName.toLowerCase()+";"+rt;java+="   }"+rt;}java+="   }" + rt;//类结束File file=new File(dir+"/"+upFirstLetter(tablename)+".java");            try{              file.createNewFile();              FileWriter fw=new FileWriter(file);              fw.write(java);              fw.flush();            fw.close();             }catch(Exception e){          e.printStackTrace();          }}}DB.close(rs, ps, con);}//这些数字是orcale中对表字段类型的code,因为写的时候只是玩玩,这里类型不全,仅供参考。public static String getDataType(int typecode){String dataType = "";switch(typecode){case 2:dataType = "Number";break;case 12:dataType = "String";break;case 1:dataType = "String";break;case -9:dataType = "String";break;case 93:dataType = "String";break;case 101:dataType = "double";break;case 100:dataType = "float";break;case 2005:dataType = "String";break;}return dataType;}public static String upFirstLetter(String str){String temp = str.toLowerCase();temp = temp.substring(1);str = str.substring(0, 1).toUpperCase()+temp;return str;}}
下面就是使用了,使用的时候只需指定是要生成那个oracle用户的table即可,Run.java文件如下:

package com.modeller.main;import java.sql.SQLException;import com.modeller.dao.DataBaseToJava;public class Run {public static void main(String[] args) throws SQLException {DataBaseToJava.getAllModels("orcaleManager");    //假如你的orcale用户名叫orcaleManager}}

运行成功后目录结构中就会生成model文件了。


总结:

这个例子仅供初学者学习java特别是jdbc的时候作为一种进一步理解java通过jdbc驱动与数据库交互的参考。或者包括但不限于将其发展成一个方便自己建立model类的小工具类。

0 0
原创粉丝点击