table转javabean

  1. package com.coffee.common;  
  2.   
  3. import java.io.BufferedWriter;  
  4. import java.io.File;  
  5. import java.io.FileWriter;  
  6. import java.io.IOException;  
  7. import java.sql.Connection;  
  8. import java.sql.DriverManager;  
  9. import java.sql.PreparedStatement;  
  10. import java.sql.ResultSet;  
  11. import java.sql.ResultSetMetaData;  
  12. import java.sql.SQLException;  
  13. import java.util.Vector;  
  14.   
  15. public class reflectBean {  
  16.     private Connection connection;  
  17.     private PreparedStatement UserQuery;  
  18.     /*mysql url的连接字符串*/  
  19.     private static String url = "jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf-8&useOldAliasMetadataBehavior=true";  
  20.     //账号  
  21.     private static String user = "root";  
  22.     //密码  
  23.     private static String password = "123";  
  24.     private Vector<String> vector = new Vector<String>();  
  25.     //mysql jdbc的java包驱动字符串  
  26.     private String driverClassName = "com.mysql.jdbc.Driver";  
  27.     //数据库中的表名  
  28.     String table = "e_task_result";  
  29.     //数据库的列名称  
  30.     private String[] colnames; // 列名数组  
  31.     //列名类型数组    
  32.     private String[] colTypes;  
  33.     public reflectBean(){  
  34.         try {//驱动注册  
  35.             Class.forName(driverClassName);  
  36.             if (connection == null || connection.isClosed())  
  37.                 //获得链接  
  38.                 connection = DriverManager.getConnection(url, user, password);  
  39.         } catch (ClassNotFoundException ex) {  
  40.                 ex.printStackTrace();  
  41.                 System.out.println("Oh,not");  
  42.             } catch (SQLException e) {  
  43.                 e.printStackTrace();  
  44.                 System.out.println("Oh,not");  
  45.             }  
  46.     }  
  47.       
  48.     public Connection getConnection() {  
  49.         return connection;  
  50.     }  
  51.     public void setConnection(Connection connection) {  
  52.         this.connection = connection;  
  53.     }  
  54.   
  55.     public void doAction(){  
  56.         String sql = "select * from "+table;  
  57.         try {  
  58.             PreparedStatement statement = connection.prepareStatement(sql);  
  59.             //获取数据库的元数据   
  60.             ResultSetMetaData metadata = statement.getMetaData();  
  61.             //数据库的字段个数  
  62.             int len = metadata.getColumnCount();  
  63.             //字段名称  
  64.             colnames = new String[len+1];  
  65.             //字段类型 --->已经转化为java中的类名称了  
  66.             colTypes = new String[len+1];  
  67.             for(int i= 1;i<=len;i++){  
  68.                 //System.out.println(metadata.getColumnName(i)+":"+metadata.getColumnTypeName(i)+":"+sqlType2JavaType(metadata.getColumnTypeName(i).toLowerCase())+":"+metadata.getColumnDisplaySize(i));  
  69.                 //metadata.getColumnDisplaySize(i);  
  70.                 colnames[i] = metadata.getColumnName(i); //获取字段名称  
  71.                 colTypes[i] = sqlType2JavaType(metadata.getColumnTypeName(i)); //获取字段类型       
  72.             }  
  73.         } catch (SQLException e) {  
  74.             e.printStackTrace();  
  75.         }  
  76.     }  
  77.     /* 
  78.      * mysql的字段类型转化为java的类型*/  
  79.     private String sqlType2JavaType(String sqlType) {    
  80.           
  81.         if(sqlType.equalsIgnoreCase("bit")){    
  82.             return "boolean";    
  83.         }else if(sqlType.equalsIgnoreCase("tinyint")){    
  84.             return "byte";    
  85.         }else if(sqlType.equalsIgnoreCase("smallint")){    
  86.             return "short";    
  87.         }else if(sqlType.equalsIgnoreCase("int")){    
  88.             return "int";    
  89.         }else if(sqlType.equalsIgnoreCase("bigint")){    
  90.             return "long";    
  91.         }else if(sqlType.equalsIgnoreCase("float")){    
  92.             return "float";    
  93.         }else if(sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("numeric")     
  94.                 || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money")     
  95.                 || sqlType.equalsIgnoreCase("smallmoney")){    
  96.             return "double";    
  97.         }else if(sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")     
  98.                 || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")     
  99.                 || sqlType.equalsIgnoreCase("text")){    
  100.             return "String";    
  101.         }else if(sqlType.equalsIgnoreCase("datetime") ||sqlType.equalsIgnoreCase("date")){    
  102.             return "Date";    
  103.         }else if(sqlType.equalsIgnoreCase("image")){    
  104.             return "Blod";    
  105.         }    
  106.             
  107.         return null;    
  108.     }  
  109.     /*获取整个类的字符串并且输出为java文件 
  110.      * */  
  111.     public  StringBuffer getClassStr(){  
  112.         //输出的类字符串  
  113.         StringBuffer str = new StringBuffer("");  
  114.         //获取表类型和表名的字段名  
  115.         this.doAction();  
  116.         //校验  
  117.         if(null == colnames && null == colTypes) return null;  
  118.         //拼接  
  119.         str.append("public class "+table+" {\r\n");  
  120.         //拼接属性  
  121.         for(int index=1; index < colnames.length ; index++){  
  122.             str.append(getAttrbuteString(colnames[index],colTypes[index]));  
  123.         }  
  124.         //拼接get,Set方法         
  125.         for(int index=1; index < colnames.length ; index++){  
  126.             str.append(getGetMethodString(colnames[index],colTypes[index]));  
  127.             str.append(getSetMethodString(colnames[index],colTypes[index]));  
  128.         }  
  129.         str.append("}\r\n");  
  130.         //输出到文件中  
  131.         File file = new File(table+".java");  
  132.         BufferedWriter write = null;  
  133.   
  134.         try {  
  135.             write = new BufferedWriter(new FileWriter(file));  
  136.             write.write(str.toString());  
  137.             write.close();  
  138.         } catch (IOException e) {  
  139.   
  140.             e.printStackTrace();  
  141.             if (write != null)  
  142.                 try {  
  143.                     write.close();  
  144.                 } catch (IOException e1) {            
  145.                     e1.printStackTrace();  
  146.                 }  
  147.         }  
  148.         return str;  
  149.     }  
  150.     /* 
  151.      * 获取字段字符串*/  
  152.     public StringBuffer getAttrbuteString(String name, String type) {  
  153.         if(!check(name,type)) {  
  154.             System.out.println("类中有属性或者类型为空");  
  155.             return null;  
  156.         };  
  157.         String format = String.format("    private %s %s;\n\r", new String[]{type,name});  
  158.         return new StringBuffer(format);  
  159.     }  
  160.     /* 
  161.      * 校验name和type是否合法*/  
  162.     public boolean check(String name, String type) {  
  163.         if("".equals(name) || name == null || name.trim().length() ==0){  
  164.             return false;  
  165.         }  
  166.         if("".equals(type) || type == null || type.trim().length() ==0){  
  167.             return false;  
  168.         }  
  169.         return true;  
  170.           
  171.     }  
  172.     /* 
  173.      * 获取get方法字符串*/  
  174.     private StringBuffer getGetMethodString(String name, String type) {  
  175.         if(!check(name,type)) {  
  176.             System.out.println("类中有属性或者类型为空");  
  177.             return null;  
  178.         };  
  179.         String Methodname = "get"+GetTuoFeng(name);  
  180.         String format = String.format("    public %s %s(){\n\r", new Object[]{type,Methodname});  
  181.         format += String.format("        return this.%s;\r\n", new Object[]{name});  
  182.         format += "    }\r\n";  
  183.         return new StringBuffer(format);  
  184.     }  
  185.     //将名称首字符大写  
  186.     private String GetTuoFeng(String name) {  
  187.         name = name.trim();  
  188.         if(name.length() > 1){  
  189.             name = name.substring(0, 1).toUpperCase()+name.substring(1);  
  190.         }else  
  191.         {  
  192.             name = name.toUpperCase();  
  193.         }  
  194.         return name;  
  195.     }  
  196.     /* 
  197.      * 获取字段的get方法字符串*/  
  198.     private Object getSetMethodString(String name, String type) {  
  199.         if(!check(name,type)) {  
  200.             System.out.println("类中有属性或者类型为空");  
  201.             return null;  
  202.         };  
  203.         String Methodname = "set"+GetTuoFeng(name);  
  204.         String format = String.format("    public void %s(%s %s){\n\r", new Object[]{Methodname,type,name});  
  205.         format += String.format("        this.%s = %s;\r\n", new Object[]{name,name});  
  206.         format += "    }\r\n";  
  207.         return new StringBuffer(format);  
  208.     }  
  209.   
  210.     public static void main(String[] args) {  
  211.         reflectBean bean = new reflectBean();  
  212.         System.err.println(bean.getClassStr());  
  213.     }  
  214.       
  215. }  

 

转载于:https://my.oschina.net/wugong/blog/900224

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值