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

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;  }

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏拂晓风起

java web 自定义错误页面 完整jsp错误页面代码(同时写错误日志) error.jsp

1005
来自专栏lonelydawn的前端猿区

JDBC的泛化设计

在mysql数据库中建立如下数据库及表结构作测试使用: create database market; use market; create table cl...

2048
来自专栏我和未来有约会

xml-rpc(1)-first demo

今天简单的研究了一下xml-rpc,做了一个小demo,使得最近开发的一个blog系统可以试用word2007来发表文章,现在还没有具体的实现,只是试Word能...

1759
来自专栏LIN_ZONE

java jdbc操作数据库通用代码

2》在项目中导入jdbc驱动,注意连接不同的数据库,所用到的驱动是不一样的,这些在网上都能找到

842
来自专栏Java 技术分享

JDBC(MySQL)一周学习总结(一)

3148
来自专栏别先生

简易图书管理系统(主要是jsp的练习)

1:首先设计用户表和图书表,设计的字段和类型如下图所示   1.1:用户表user ? 1.2:图书表book ? 2:第二写实体类user.java和boo...

2835
来自专栏日常分享

Struts2+DAO层实现实例02——搭建DAO基本框架并与Struts2组合

1075
来自专栏技术小黑屋

赶走那些Android工程中得冗余字符串

Android提供了一套很方便的进行资源(语言)国际化机制,为了更好地支持多语言,很多工程的翻译往往会放到类似crowdin这样的平台上。资源是全了,但是还是会...

542
来自专栏菩提树下的杨过

Silverlight与WPF中BeginInvoke的差异

Silverlight/WPF中,如果要在多线程中对界面控件值做修改,用Dispatcher对象的BeginInvoke方法无疑是最方便的办法 ,见:温故而知新...

1898
来自专栏用户2442861的专栏

JAVA对Mysql进行连接、插入、修改、删除操作

    -> userid int(8) unsigned not null auto_increment,

922

扫码关注云+社区