利用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 条评论
登录 后参与评论

相关文章

来自专栏新工科课程建设探讨——以能源与动力工程专业为例

5.2.3 二维导热算例-整体架构

1150
来自专栏進无尽的文章

编码篇-数组的相关使用

数据的常规方法的使用本文不做描述,本文旨在归纳一些数组不是很常用的方法使用。算作一个归纳笔记,后续会持续更新.....

1022
来自专栏海说

Java源码学习 -- java.lang.StringBuilder,java.lang.StringBuffer,java.lang.AbstractStringBuilder

一直以来,都是看到网上说“ StringBuilder是线程不安全的,但运行效率高;StringBuffer 是线程安全的,但运行效率低”,然后默默记住:一个是...

1750
来自专栏HansBug's Lab

1622: [Usaco2008 Open]Word Power 名字的能量

1622: [Usaco2008 Open]Word Power 名字的能量 Time Limit: 5 Sec  Memory Limit: 64 MB Su...

2534
来自专栏web编程技术分享

【Java框架型项目从入门到装逼】第十节 simple-jdbc源码

39410
来自专栏java达人

数字的陷阱

Java中对数字的处理,如四舍五入,如加减乘除,貌似是一个很基础很简单的知识点,但是如果你没有对他进行充分了解,很容易掉进它的陷阱里。 1、浮点数运算 先来看一...

1848
来自专栏小灰灰

FastJson 反序列化注意事项

问题描述 使用fastJson对json字符串进行反序列化时,有几个点需要注意一下: 反序列化内部类 反序列化模板类 0. Getter/Setter问题 如我...

1.1K8
来自专栏函数式编程语言及工具

Scalaz(4)- typeclass:标准类型-Equal,Order,Show,Enum

  Scalaz是由一堆的typeclass组成。每一个typeclass具备自己特殊的功能。用户可以通过随意多态(ad-hoc polymorphism)把这...

1795
来自专栏精讲JAVA

使用J2SE API读取Properties文件的六种方法

使用J2SE API读取Properties文件的六种方法 1。使用Java.util.Properties类的load()方法 示例: InputStre...

17910
来自专栏武培轩的专栏

京东2019春招Java工程师编程题题解

生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串。 例如"ABCBA","AA","A"是回文串,而"ABCD"...

2988

扫码关注云+社区