数据库表到Java类转换工具的实现

简介:
没有工具,动手自造,想尽办法提高生产力!
目前做工作中常常用到表数据到xml的转换,常常需要将数据库表字段一一转换为Java Bean的成员,一般做法都是看着数据字段去写代码,这样效率低下还容易出错,本人深有体会,于是乎写出一个小工具自动将从数据库表到Java Bean的转换,先将核心的源码拿出来,欢迎各位博友能在更多数据库平台上实现,并分享源码。
 
我目前用的数据是DB2  V9。
 
实现的代码如下:
 
数据库配置文件
zfzvf.properties
host=127.0.0.1 
port=50000 
dbname=zfzvf
driverClassName=com.ibm.db2.jcc.DB2Driver 
username=root 
password=lavasoft
 
配置文件读取类
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import java.util.Properties; 
import java.io.InputStream; 
import java.io.IOException; 

/** 
* Created by IntelliJ IDEA. 
* File: PropertyUtil.java 
* User: leizhimin 
* Date: 2008-3-5 15:13:30 
*/
 
public  class PropertyUtils { 
     private  static  final Log log = LogFactory.getLog(PropertyUtils. class); 
     private  static String host; 
     private  static String port; 
     private  static String dbname; 
     private  static String driverClassName; 
     private  static String username; 
     private  static String password; 

     private  static String url; 

     static { 
        reload(); 
    } 

     /** 
     * 私有构造方法,不需要创建对象 
     */
 
     private PropertyUtils() { 
    } 

     /** 
     * 重载配置文件 
     * 
     * @return 重载成功返回true,否则为false 
     */
 
     public  static  boolean reload() { 
         boolean flag =  false
        Properties prop =  new Properties(); 
        InputStream in = PropertyUtils. class.getResourceAsStream( "/zfzvf.properties"); 
         try { 
            prop.load(in); 
            host = prop.getProperty( "host").trim(); 
            port = prop.getProperty( "port").trim(); 
            dbname = prop.getProperty( "dbname").trim(); 
            driverClassName = prop.getProperty( "driverClassName").trim(); 
            username = prop.getProperty( "username").trim(); 
            password = prop.getProperty( "password").trim(); 
            url =  "jdbc:db2://" + host + ":" + port + "/" + dbname; 
            flag = true
        } catch (IOException e) { 
            log.error("找不系统配置文件zfzvf.properties,请检查!"); 
            e.printStackTrace(); 
        } 
        return flag; 
    } 

    public static String getDbname() { 
        return dbname; 
    } 

    public static void setDbname(String dbname) { 
        PropertyUtils.dbname = dbname; 
    } 

    public static String getDriverClassName() { 
        return driverClassName; 
    } 

    public static void setDriverClassName(String driverClassName) { 
        PropertyUtils.driverClassName = driverClassName; 
    } 

    public static String getHost() { 
        return host; 
    } 

    public static void setHost(String host) { 
        PropertyUtils.host = host; 
    } 

    public static String getPassword() { 
        return password; 
    } 

    public static void setPassword(String password) { 
        PropertyUtils.password = password; 
    } 

    public static String getPort() { 
        return port; 
    } 

    public static void setPort(String port) { 
        PropertyUtils.port = port; 
    } 

    public static String getUrl() { 
        return url; 
    } 

    public static void setUrl(String url) { 
        PropertyUtils.url = url; 
    } 

    public static String getUsername() { 
        return username; 
    } 

    public static void setUsername(String username) { 
        PropertyUtils.username = username; 
    } 
}
 
核心实现类
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import java.sql.*; 

/** 
* Created by IntelliJ IDEA. 
* File: DBUtils.java 
* User: leizhimin 
* Date: 2008-3-5 15:05:00 
*/
 
public  class DBUtils { 
     private  static Log log = LogFactory.getLog(DBUtils. class); 
     private  static  final String tb_sql =  "\n" + 
             "SELECT C.COLTYPE, C.NAME, C.REMARKS\n" + 
             "  FROM SYSIBM.SYSCOLUMNS C, SYSIBM.SYSTABLES T\n" + 
             " WHERE C.TBNAME = T.NAME\n" + 
             "   AND C.TBCREATOR = T.CREATOR\n" + 
             "   AND T.CREATOR = ?\n" + 
             "   AND T.NAME = ?"

     /** 
     * 获取数据库连接 
     * 
     * @return 数据连接 
     */
 
     public  static Connection makeConnection() { 
        Connection conn =  null
        String url = PropertyUtils.getUrl(); 
        String username = PropertyUtils.getUsername(); 
        String password = PropertyUtils.getPassword(); 
        String diverClassName = PropertyUtils.getDriverClassName(); 
         try { 
            Class.forName(diverClassName); 
            conn = DriverManager.getConnection(url, username, password); 
        }  catch (ClassNotFoundException e) { 
            e.printStackTrace(); 
        }  catch (SQLException e) { 
            e.printStackTrace(); 
        } 
         return conn; 
    } 

     public  static  void main(String args[]) { 
//        testDBConnection(); 
        getTableProperty( "ZFZVF""JG_NJQK"); 
    } 

     /** 
     * 数据连接测试类,并将测试结果打印到控制台。 
     * 
     * @return 返回查询结果字符串 
     */
 
     public  static String testDBConnection() { 
        Connection conn = makeConnection(); 
        StringBuffer sb =  new StringBuffer(); 
         try { 
            Statement stmt = conn.createStatement(); 
            ResultSet rs = stmt.executeQuery( "SELECT NAME,CTIME FROM SYSIBM.SYSTABLES WHERE NAME NOT LIKE 'DM_%' AND NAME NOT LIKE 'SYS%'"); 
             while (rs.next()) { 
                sb.append(rs.getString(1) +  "\t\t\t\t" + rs.getString(2) +  "\n"); 
            } 
        }  catch (SQLException e) { 
            e.printStackTrace(); 
        } 
        System.out.println(sb.toString()); 
         return sb.toString(); 
    } 

     /** 
     * 获取表到Java Bean的成员列表的Java代码 
     * @param schema 模式 
     * @param tbName 表名 
     * @return Java Bean的成员列表的Java代码 
     */
 
     public  static String getTableProperty(String schema, String tbName) { 
        Connection conn = makeConnection(); 
        StringBuffer sb =  new StringBuffer(); 
        sb.append(schema).append( ".").append(tbName).append( "\n"); 
         try { 
            PreparedStatement pstmt = conn.prepareStatement(tb_sql); 
            pstmt.setString(1, schema); 
            pstmt.setString(2, tbName); 
            ResultSet rs = pstmt.executeQuery(); 
             while (rs.next()) { 
                String type = typeProcessor(rs.getString(1).trim()); 
                String name = rs.getString(2).toLowerCase(); 
                String remark; 
                 if (rs.getString(3) ==  null) { 
                    remark = ""; 
                }  else { 
                    remark = rs.getString(3); 
                } 
                sb.append( "\tprivate\t" + type +  "\t" + name +  ";\t\t\t//" + remark + "\n"); 
            } 
            rs.close(); 
            pstmt.close(); 
        } catch (SQLException e) { 
            e.printStackTrace(); 
        } finally { 
            try { 
                conn.close(); 
            } catch (SQLException e) { 
                e.printStackTrace(); 
            } 
        } 
        System.out.println(sb.toString()); 
        return sb.toString(); 
    } 

    /** 
     * SQL数据类型到Java数据类型的转换 
     * @param sqlType SQL数据类型 
     * @return Java数据类型 
     */
 
    public static String typeProcessor(String sqlType) { 
        String newType; 
        if (sqlType.equalsIgnoreCase("varchar")) newType = "String"
        else if (sqlType.equalsIgnoreCase("char")) newType = "String"
        else if (sqlType.equalsIgnoreCase("bigint")) newType = "Long"
        else if (sqlType.equalsIgnoreCase("smallint")) newType = "int"
        else if (sqlType.equalsIgnoreCase("integer")) newType = "int"
        else if (sqlType.equalsIgnoreCase("decimal")) newType = "double"
        else if (sqlType.equalsIgnoreCase("timestmp")) newType = "Date"
        else { 
            newType = sqlType; 
        } 
        return newType; 
    } 
}
 
运行结果:
ZFZVF.JG_NJQK 
     private    String    gxr;       //管辖人 
     private    Long    bs;       //标识 
     private    Long    qybs;       //企业标识 
     private    String    qymc;       //(企业)名称 
     private    String    zh;       //字号 
     private    String    xzqh_dm;       //行政区划代码 
     private    String    hylb_dm;       //行业类别 
     private    String    zzxs_dm;       //组织形式 
     private    String    fddbr;       //法定代表人(负责人、投资人、执行合伙企业事务的合伙人) 
     private     double    zczb;       //注册资本(金) 
     private    String    jydz;       //经营地址 
     private    String    lxdh;       //联系电话 
     private    String    jyfw;       //经营范围 
     private    String    qydl_dm;       //企业类型 
     private    String    qyxxlx_dm;       //企业详细类型 
     private    String    yyzzhm;       //营业执照号码 
     private    String    yyzxm;       //经营者姓名 
     private    Long    gxdw;       //管辖单位 
     private    String    zt;       //状态 
     private    Long    jgbs;       //机构标识 
     private    Long    zwbs;       // 
     private    Long    nd;       //年度 
     private     int    mjbz;       //免检标志 
     private    String    njms;       //年检描述 
     private    String    njwt_dm;       //年检问题代码 
     private    Long    njr;       //年检人 
     private    Date    njsj;       //年检时间 
     private    Date    slrq;       //受理日期 
     private    Long    slr;       //受理人 
     private    Date    bsrq;       //报送日期 
     private    String    bsr;       //报送人 
     private     int    sfggdwbz;       //是否广告单位标志 
     private     int    ggsfnjbz;       //广告经营许可证是否年检标志 
     private    String    slyj;       //受理意见 
     private    String    qylxsx_dm;       // 
     private    String    njjg_dm;       // 
     private    Long    shr;       // 
     private    Date    shrq;       // 


Process finished with exit code 0 
 
呵呵,实现很粗糙,加工一下,可以直接输出java Bean的源码。
 
 本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/64305,如需转载请自行联系原作者
相关文章
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
74 9
|
27天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
138 83
|
1月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
143 57
|
3天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
24天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
46 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
27天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
55 26
|
28天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
50 24
|
1月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
49 8
|
27天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
28天前
|
数据采集 存储 监控
Java爬虫:数据采集的强大工具
在数据驱动的时代,Java爬虫技术凭借其强大的功能和灵活性,成为企业获取市场信息、用户行为及竞争情报的关键工具。本文详细介绍了Java爬虫的工作原理、应用场景、构建方法及其重要性,强调了在合法合规的前提下,如何有效利用Java爬虫技术为企业决策提供支持。