package com.batch.tabletojava

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List; public class Table2JavaBean {
private static final String TAB = "\t";
private static final String LINE = "\r\n"; public static void main(String[] args) { try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = null;
String jdbcString = "jdbc:oracle:thin:@localhost:1521:xe";
conn = DriverManager.getConnection(jdbcString, "oracle", "oracle");
List<String> tableList = new ArrayList<String>();
tableList = getTableList(conn); for(String s: tableList){
makeJavaBean(conn, s);
System.out.println(s);
} }catch(Exception e){
e.printStackTrace();
} } private static void makeJavaBean( Connection conn ,String tableID) { FileOutputStream fo = null;
DataOutputStream ds = null;
File file = new File("c:\\tableBean\\" + tableID + ".java");
String sql = "select * from " + tableID + " where 1<>1";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
ResultSetMetaData md = rs.getMetaData();
String tableName = getTableName(conn, tableID);
int columnCount = md.getColumnCount();
tableID = tableID.substring(0, 1).toUpperCase()
+ tableID.substring(1);
StringBuffer buff = new StringBuffer(); buff.append("/*----------------------------------------------------------------------------------------");
buff.append(LINE);
buff.append("Program Name | " + tableID + ".java");
buff.append(LINE);
buff.append("Language | Java");
buff.append(LINE);
buff.append("Name | " + tableName + "类");
buff.append(LINE);
buff.append("Preparation person | XX.XXX (XXXXX) 2013/12/20");
buff.append(LINE);
buff.append("Note |");
buff.append(LINE);
buff.append("------------------------------------------------------------------------------------------");
buff.append(LINE);
buff.append("2013-12-20 | Original Source Release by XX.XXX (XXXX)");
buff.append(LINE);
buff.append("------------------------------------------------------------------------------------------*/");
buff.append(LINE);
buff.append("package com.batch.common;");
buff.append(LINE);
buff.append(" ");
buff.append(LINE);
buff.append("/**");
buff.append(LINE);
buff.append(" * " + tableName + "类.");
buff.append(LINE);
buff.append(" * ");
buff.append(LINE);
buff.append(" * @author XX.XXX");
buff.append(LINE);
buff.append(" */");
buff.append(LINE); buff.append("public class " + tableID + " extends WWUMTCOMMON {");
buff.append(LINE);
for (int i = 1; i <= columnCount; i++) {
if("ZZ".equals(md.getColumnName(i).substring(0,2))){
continue;
}
// 取得字段注释
String columnComment = getColumnComment(conn, tableID, md.getColumnName(i));
String columnID = makeColumnID(md.getColumnName(i));
buff.append(TAB).append("/** "+columnComment+". */");
buff.append(LINE);
buff.append(TAB);
buff.append("private "
+ Table2JavaBean.toType(md.getColumnTypeName(i)) + " "
+ columnID.substring(0,1).toLowerCase()
+ columnID.substring(1)+ ";");
buff.append(LINE);
} for (int i = 1; i <= columnCount; i++) {
if("ZZ".equals(md.getColumnName(i).substring(0,2))){
continue;
}
// 取得字段注释
String columnComment = getColumnComment(conn, tableID, md.getColumnName(i));
buff.append(TAB);
String pojiType = Table2JavaBean
.toType(md.getColumnTypeName(i));
String columnName = makeColumnID(md.getColumnName(i));
columnName = columnName.substring(0, 1).toLowerCase()
+ columnName.substring(1);
String getName = null;
String setName = null;
if (columnName.length() > 1) {
// get
buff.append(LINE).append(TAB).append("/** ");
buff.append(LINE).append(TAB).append(" * 获取" +columnComment+"。");
buff.append(LINE).append(TAB).append(" * @return "+columnName +" " + columnComment);
buff.append(LINE).append(TAB).append(" */"); getName = "public " + pojiType + " get"
+ columnName.substring(0, 1).toUpperCase()
+ columnName.substring(1) + "() {"; buff.append(LINE).append(TAB).append(getName);
buff.append(LINE).append(TAB).append(TAB);
buff.append("return " + columnName + ";");
buff.append(LINE).append(TAB).append("}");
buff.append(LINE); // set
setName = "public void set"
+ columnName.substring(0, 1).toUpperCase()
+ columnName.substring(1) + "("
+ pojiType + " " + columnName + ") {";
buff.append(LINE).append(TAB).append("/** ");
buff.append(LINE).append(TAB).append(" * 设定"+ columnComment+"。 ");
buff.append(LINE).append(TAB).append(" * @param "+columnName +" " + columnComment);
buff.append(LINE).append(TAB).append(" */");
buff.append(LINE).append(TAB).append(setName);
buff.append(LINE).append(TAB).append(TAB);
buff.append("this." + columnName + " = " + columnName + ";");
buff.append(LINE).append(TAB).append("}");
buff.append(LINE);
}
}
buff.append("}").append(LINE);
fo = new FileOutputStream(file);
ds = new DataOutputStream(fo);
ds.write(buff.toString().getBytes()); }catch(Exception e){
e.printStackTrace();
} finally{
try{
if(ds != null){
ds.flush();
ds.close();
}
if(fo != null){
fo.close();
}
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
} }catch (Exception e){
e.printStackTrace();
}
}
} private static String makeColumnID(String columnID) {
String[] strs = columnID.toLowerCase().split("_");
StringBuffer sb = new StringBuffer();
for(int i = 0; i<strs.length; i++){
try{
sb.append(strs[i].substring(0, 1).toUpperCase() + strs[i].substring(1).toLowerCase());
}catch(Exception e){
e.printStackTrace();
System.out.println(columnID);
} } return sb.toString();
} private static String getColumnComment(Connection conn, String tableID, String columnID){
String columnName = "";
// USER_TAB_COLUMNS
String sql = "select COMMENTS from USER_COL_COMMENTS where TABLE_NAME = ? and COLUMN_NAME = ?";
PreparedStatement ps = null;
ResultSet rs = null;
try{
ps = conn.prepareStatement(sql);
ps.setString(1, tableID);
ps.setString(2, columnID);
rs = ps.executeQuery(); while (rs.next()) {
columnName = rs.getString("COMMENTS");
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
return columnName;
} private static List<String> getTableList(Connection conn ){
try{}catch(Exception e){}
List<String> tableList = new ArrayList<String>();
// USER_TAB_COLUMNS
String sql = "select distinct TABLE_NAME from USER_TAB_COLUMNS";
// System.out.println(sql);
PreparedStatement ps = null;
ResultSet rs = null;
try{
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
String tableID = "";
while (rs.next()) {
tableID = rs.getString("TABLE_NAME");
// System.out.println(tableID);
tableList.add(tableID);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
return tableList;
} private static String getTableName(Connection conn ,String tableID) throws Exception{
String tableName = "";
// USER_TAB_COLUMNS
String sql = "select COMMENTS from USER_TAB_COMMENTS where TABLE_NAME = ?";
PreparedStatement ps = null;
ResultSet rs = null;
ps = conn.prepareStatement(sql);
ps.setString(1, tableID);
rs = ps.executeQuery(); while (rs.next()) {
tableName = rs.getString("COMMENTS");
rs.close();
return tableName;
}
return tableName;
} public static String toType(String str){
String result = null;
if(str.startsWith("VARCHAR2") || str.startsWith("CHAR")){
result = "String";
}else if(str.startsWith("NUMBER")){
result = "int";
}else if(str.startsWith("DATE")){
result = "Date";
}
return result;
} }

  网上查到很多关于java做成数据库表javabean的例子,但是都没有自动生成注释。

在网上查到的例子的基础上,改写了一下。发帖备份。

Oracle表生成JavaBean的更多相关文章

  1. java工具类–自动将数据库表生成javabean

    最近和数据库的表打交道挺多的,因为暂时做的是接口活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不 ...

  2. mysql表生成JavaBean

    MySQLToBean.java package org.just.util; import java.io.File; import java.io.FileInputStream; import ...

  3. 用generator 根据oracle表生成java代码,数据库与代码字段不一致

    前两天用generator生成java代码时发现,生成的javabean和数据库里的字段对应不上,不是少几个就是有几个字段不一样,感觉很怪异,后来发现日志里边这个表转换成bean是日志打印了好几遍,所 ...

  4. 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第2版)

             目录:                 第1版:http://blog.csdn.net/vipbooks/article/details/51912143              ...

  5. Oracle表结构转Mysql表结构

    1. fnc_table_to_mysql 主体程序 create or replace function fnc_table_to_mysql ( i_owner in string, i_tabl ...

  6. 链接oracle数据库 生成表对应的javabean

    package com.databi.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOExc ...

  7. 【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp

    一.本人环境描述      1.oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0      2.Linux为centos6.5 32位,安装在Oracle VM Vir ...

  8. 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)

            目录:            第1版:http://blog.csdn.net/vipbooks/article/details/51912143            第2版:htt ...

  9. 基于数据库的自动化生成工具,自动生成JavaBean、数据库文档、框架代码等(v5.8.8版)

    TableGo v5.8.8版震撼发布,此次版本更新如下:          1.新增两个扩展字段,用于生成自定义模板时使用.          2.自定义模板新增模板目录,可以选择不同分类目录下的模 ...

随机推荐

  1. JAVA网络编程TCP通信

    Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端 ...

  2. Java 后台创建word 文档

    ---恢复内容开始--- Java 后台创建 word 文档 自己总结  网上查阅的文档 分享POI 教程地址:http://www.tuicool.com/articles/emqaEf6 方式一. ...

  3. python 之走坑的道路

    ### python之 继续走函数的坑 上篇文章简单介绍了函数的一些简单的使用,这次继续踩函数的坑1.函数对象 函数其实也可以当做一个参数传给另一个函数,也可以使用赋值的方式来给另一个,而且这两个的内 ...

  4. Redis中的数据结构与常用命令

    开发系统:Ubuntu 17.04Redis驱动:StackExchange.Redis 1.2.3Redis版本:3.2.1开发平台:.NET Core 对于Redis的介绍这里只写一句:Redis ...

  5. C#码农的大数据之路 - HDP SandBox配置及VS连接.md

    在进行HDInsight的开发测试之前,搭建一个测试环境是很重要的. 由于微软与Hortonworks合作开发了HDInsgiht,如果不方便建立Azure账号使用Azure HDInsight进行开 ...

  6. 一天搞定CSS:BFC布局与普通文档流布局比较--15

    BFC:Block Formatting Contexts–块级元素格式化上下文 1.BFC定义 它决定了块级元素如何对它的内容进行布局,以及与其它元素的关系和相互作用 关键词解释: 块级元素:父级( ...

  7. Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)

    例子: 定义泛型Store package javabased; public interface Store<T> { } 两个实现类StringStore,IntegerStore p ...

  8. 【Windows 10 应用开发】自定义快捷键

    上一篇鸟文中,老周通过史无前例的代码向各位 demo 了访问键的用法(即 Alt + 某某).不过,大伙伴们一定会发现,访问键毕竟限制较大,不太灵活,也不好发挥,于是就需要自定义快捷键了. 其实,自定 ...

  9. Angular JS的Placeholder功能在IE8/9浏览器中不可用

    附上如下代码可正常工作: .directive('placeholder', function($timeout){ var i = document.createElement('input'); ...

  10. Mysql数据库存储emoji表情

    emoji表情需要使用编码格式未utf8mb4,mysql数据库版本要5.5以上,我用的是5.6,因为只有5.5以上支持utf8mb4. 1.数据库编码设定为utf8mb4,如果建库时指定的是utf8 ...