通过数据库内表的字段动态生成,同时也适应生成Dao等的文件

在开发有规律可言,且生成如Dao,Bean,Service,等较多但格式基本同意的java文件时,建议采用

自动生成的方式,可减少因来回复制黏贴所带来的错误。

在处理数据量比较大,但又规律时,也建议采用自动生成的形式,以减少错误。

通过数据库内表的字段动态生成 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil
{
/**
* 加载驱动
*
* 使用的是 SQL2005 的驱动程序因此务必将2005的驱动架包引入或置于项目根目录下
*
* @return
*/
public static Connection getConnection()
{
   Connection con = null;

   try
   {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    con = DriverManager.getConnection(
      "jdbc:sqlserver://localhost:1433;databasename=studentDB",
      "sa", "");
   }
   catch (ClassNotFoundException e)
   {
    e.printStackTrace();
   }
   catch (SQLException e)
   {
    e.printStackTrace();
   }

   return con;
}

/**
* 关闭连接的方法
*
* @param rs
* @param pstm
* @param con
*/
public static void closeAll(ResultSet rs, PreparedStatement pstm,
    Connection con)
{
   try
   {
    if (null != rs)
     rs.close();
    if (null != pstm)
     pstm.close();
    if (null != con)
     con.close();
   }
   catch (SQLException e)
   {
    e.printStackTrace();
   }
}
}
//-----------------------------------------------开发的工具类---------------------------------------------

package com.zhou.util;

import java.io.File;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Types;

public class BuildDTO
{
public void build(String tableName)
{
   Connection conn = null;
   PreparedStatement pment = null;
   ResultSet rs = null;
   PrintWriter pw = null;
 
 
   try
   {
    pw = new PrintWriter(new File("src/com/zhou/bean/StudentBean.java"));
  
    pw.println("package com.zhou.bean;/n/n");
    pw.println("/**");
    pw.println("* 通过数据库内表的字段动态生成 javabean");
    pw.println("**/");
    pw.println("public class StudentBean /n{/t");
  
    //创建连接
    conn = DBUtil.getConnection();
    //构建预处理器
    pment = conn.prepareStatement("select * from "+tableName+" where 1 = 2");
  
    rs = pment.executeQuery();
  
    ResultSetMetaData metaData = rs.getMetaData();
  
    //获取表单的列数
    int colum = metaData.getColumnCount();
  
    for (int i = 1; i <= colum; i++)
    {
     String pStr = ""; //setXxxx
     String typeStr = ""; //类型
   
   
     //获取列名
     String columName = metaData.getColumnName(i);
     //获取每一列的数据类型
     int type = metaData.getColumnType(i);
   
     //判断
     if(Types.INTEGER == type)
     {
      typeStr = "Integer";
     }
     else if(Types.VARCHAR == type)
     {
      typeStr = "String";
     }
   
     //组装 private 的语句
     pStr += "private "+typeStr+" "+columName+";";
   
   
     //输出 private 的字段
     pw.println("/t"+pStr+"");
   
    }

  
    String constructStr = ""; //构造
    //组装空参构造
    constructStr += "public StudentBean()/n/t{/n/n/t}";
    //输出空参构造
    pw.println("/n/t"+constructStr+"/n");
  
    for (int i = 1; i <= colum; i++)
    {
     String getStr = "";
     String setStr = "";
     String typeStr = "";
   
     //获取列名
     String columName = metaData.getColumnName(i);
     //获取每一列的数据类型
     int type = metaData.getColumnType(i);
   
     //判断
     if(Types.INTEGER == type)
     {
      typeStr = "Integer";
     }
     else if(Types.VARCHAR == type)
     {
      typeStr = "String";
     }
     //组装 set 的语句
     setStr += "public void set"+columName.substring(0, 1).toUpperCase()+""+columName.substring(1)+"("+typeStr+" "+columName+")/n/t{/n";
     setStr += "/t/tthis."+columName+" = "+columName+";/n/t}";
   
     //组装get语句
     getStr += "public "+typeStr+" get"+columName.substring(0,1).toUpperCase()+""+columName.substring(1)+"()/n/t{/n/t";
     getStr += "/treturn this."+columName+";/n/t}";

     //输出 set
     pw.println("/t"+setStr);
     // 输出 get
     pw.println("/t"+getStr);
    }
  
  
    pw.println("}");
  
    //缓冲
    pw.flush();
    pw.close();
  
   }
   catch (Exception e)
   {
    e.printStackTrace();
   }
   finally
   {
    //关闭连接
    DBUtil.closeAll(rs, pment, conn);
   }
}

public static void main(String[] args)
{
   BuildDTO dto = new BuildDTO();
 
   dto.build("studentInfo");
}
}
//-----------------------------------------------运行结果---------------------------------------------

package com.zhou.bean;


/**
* 通过数据库内表的字段动态生成 javabean
**/
public class StudentBean
{
private Integer stuID;
private String stuName;
private String stuAge;
private String stuGender;
private String stuAdress;
private String stuDec;

public StudentBean()
{

}

public void setStuID(Integer stuID)
{
   this.stuID = stuID;
}
public Integer getStuID()
{
   return this.stuID;
}
public void setStuName(String stuName)
{
   this.stuName = stuName;
}
public String getStuName()
{
   return this.stuName;
}
public void setStuAge(String stuAge)
{
   this.stuAge = stuAge;
}
public String getStuAge()
{
   return this.stuAge;
}
public void setStuGender(String stuGender)
{
   this.stuGender = stuGender;
}
public String getStuGender()
{
   return this.stuGender;
}
public void setStuAdress(String stuAdress)
{
   this.stuAdress = stuAdress;
}
public String getStuAdress()
{
   return this.stuAdress;
}
public void setStuDec(String stuDec)
{
   this.stuDec = stuDec;
}
public String getStuDec()
{
   return this.stuDec;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值