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
- java实现从oracle数据库中读出table配置并逆向生成model类
- servlet实现从oracle数据库的blob字段中读出文件并显示。
- 保存java对象到数据库,并从数据库读出生成用户界面
- Php从数据库里读出数据,并生成xml文件
- 从数据库中读出图片并显示的示例代码
- 从数据库中读出图片并显示的示例代码
- 如何从数据库中读出并下载文件
- 用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中
- 用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中
- Java中生成excel,并进行数据的写入读出
- 从数据库中读出记录
- Eclipse从数据库逆向生成实体类
- MyEclipse中hibernate通过数据库逆向生成java实体类
- java如何从数据库读出内容放到jsp中
- 从数据库读出数据动态生成菜单栏
- 从数据库表生成Model类程序
- Eclipse实现hibernate反向工程:从数据库逆向生成实体类和hbm文件
- 根据table逆向生成的DAO类中方法总结
- ibatis学习基本例子
- easyui-tree和thinkphp对于树节点的显示
- gcc编译错误
- cocos2dx吞噬
- mysql 用户管理和权限设置
- java实现从oracle数据库中读出table配置并逆向生成model类
- zoj 3647 Gao the Grid
- Java集合类的使用
- 我的劣根性——转变思维
- 数据结构学习——二叉堆ADT(程序化)
- 线性代数导论6——列空间和零空间
- 特殊的数字
- P52第31题
- ZOJ 3781 Paint the Grid Reloaded ( BFS(重点是对问题的分析) )