首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用java反射机制将orcale数据库中的表反射到类中

利用java反射机制将orcale数据库中的表反射到类中

作者头像
用户1171305
发布2017-12-28 11:04:24
1.6K0
发布2017-12-28 11:04:24
举报
文章被收录于专栏:成长道路成长道路

import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;

public class Test {

 static String driverName = "oracle.jdbc.driver.OracleDriver";  static String url = "jdbc:oracle:thin:@172.22.246.26:1521:orcl";  static String user = "java1";  static String pass = "java1";

 static {   try {    Class.forName(driverName);   } catch (ClassNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }  }

 public static void main(String[] args) {   // 定义存储多个对象的集合   List<Object> list = new ArrayList<Object>();   Test t = new Test();   Class<?> demo = null;   Connection conn = null;   PreparedStatement pstmt = null;   ResultSet rs = null;   Bonus_m bonus = null;   conn = t.getConnection();

  String sql = "SELECT * FROM bonus_m";   try {    pstmt = conn.prepareStatement(sql);    rs = pstmt.executeQuery();

   // 获取表的元数据    ResultSetMetaData rsmd = rs.getMetaData();

   // 获取表中的列数    int count = rsmd.getColumnCount();

   demo = Class.forName("com.iflytek.test.Bonus_m");

   // 获取属性的数组    Field[] fields = demo.getDeclaredFields();

   while (rs.next()) {     bonus = (Bonus_m) demo.newInstance();     for (int i = 1; i <= count; i++) {      String colunmName = rsmd.getColumnName(i);      Object value = rs.getObject(i);

     for (int j = 0; j < fields.length; j++) {       if (fields[j].getName().equalsIgnoreCase(colunmName)) {        t.setter(bonus, fields[j].getName(), value, fields[j].getType());        break;       }      }     }     list.add(bonus);    }    t.getter(list, fields);

  } catch (Exception e) {    // TODO Auto-generated catch block    e.printStackTrace();   }  }

 // 获取数据库连接  public Connection getConnection() {   Connection conn = null;   try {    conn = DriverManager.getConnection(url, user, pass);   } catch (SQLException e) {    e.printStackTrace();   }   return conn;  }

 /*   * @param obj 待操作的对象   *   * @param att 待操作的属性   *   * @param value 待设置的值   *   * @param type 属性的类型   */  public void setter(Object obj, String att, Object value, Class<?> type) {   Test t = new Test();   String filed = t.firstChar2Upper(att).toString();   try {    Method method = obj.getClass().getMethod("set" + filed, type);    method.invoke(obj, value);   } catch (Exception e) {    e.printStackTrace();   }  }

 public void getter(List<Object> list, Field[] fields) {

  /*    * Bonus_m{"ename":"张三", "":"", "":"", "":""}    */   if (list != null) {    for (Object obj : list) {     Class<?> cla = obj.getClass();     StringBuilder builder = new StringBuilder();     builder.append(cla.getSimpleName()).append("{");

    for (Field field : fields) {      String fieldName = field.getName();

     try {       Object value = field.get(obj);

      builder.append("\"").append(fieldName).append("\":");       builder.append("\"").append(value).append("\"");       builder.append(",");      } catch (Exception e) {       e.printStackTrace();      }     }

    builder.deleteCharAt(builder.length() - 1);     builder.append("}");     System.out.println(builder);    }   }  }

 /*   * 修改字符串,将字符串的首字母变成大写   */  public StringBuffer firstChar2Upper(String str) {   StringBuffer strBuff = new StringBuffer();   strBuff.append(str.substring(0, 1).toUpperCase()).append(str.substring(1));   return strBuff;  } }

import java.math.BigDecimal;

public class Bonus_m {  private String ename;  private String job;  private BigDecimal sal;  private BigDecimal comm;

 public String getEname() {   return ename;  }

 public void setEname(String ename) {   this.ename = ename;  }

 public String getJob() {   return job;  }

 public void setJob(String job) {   this.job = job;  }

 public BigDecimal getSal() {   return sal;  }

 public void setSal(BigDecimal sal) {   this.sal = sal;  }

 public BigDecimal getComm() {   return comm;  }

 public void setComm(BigDecimal comm) {   this.comm = comm;  }

}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档