博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用反射机制查询数据库内数据,数据库内数据库类型为类型时
阅读量:7297 次
发布时间:2019-06-30

本文共 3416 字,大约阅读时间需要 11 分钟。

  hot3.png

在数据库内数据类型为datetime类型,在创建实体类型属性时,属性设为Timestamp类型

/**BaseDao内容为**/

package com.lzcc.google_007.base.dao;

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

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

/**  * wqj  *所有DAO实现类,定义基本的数据库访问操作  */

package com.lzcc.google_007.base.dao;

import java.lang.reflect.Method;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

/**

 * wqj
 *所有DAO实现类,定义基本的数据库访问操作
 */
public class BaseDao {
 private static Properties pro = null;
 
 public static void setPro(Properties pro){
  BaseDao.pro = pro;
 }
 
 /**获取连接
  *
  * Exception
  * wqj
  */
 protected Connection getConnection() throws Exception{
  DataSource ds = BasicDataSourceFactory.createDataSource(pro);
  return ds.getConnection();
 }
 
 /** 查询的方法
  * @param sql 查询语句,可带“?”占位符
  * @param oList “?”号占位符需要填充的值
  * @param clazz  封装数据的类
  * @return 以封装好数据后
  * Exception
  * wqj
  */
 protected <T> List<T> select(String sql, List<Object> oList, Class<T> clazz) throws Exception{
  // 创建返回的list集合
  List<T> list = new ArrayList<T>();
  
  Connection conn = getConnection();
  
  PreparedStatement ps = conn.prepareStatement(sql);
  
  // 给SQL语句中的?号赋值
  for (int i = 0; oList != null && i < oList.size(); i++) {
   ps.setObject(i + 1, oList.get(i));
  }
  
  // 执行查询方法
  ResultSet rs = ps.executeQuery();
  
  // 获取结果集中的元数据
  ResultSetMetaData rsmd = rs.getMetaData();
  
  // 遍历保存数据库中对应表的列名
  List<String> columnList = new ArrayList<String>();
  for (int i = 0; i < rsmd.getColumnCount(); i++) {
   columnList.add(rsmd.getColumnName(i + 1));
  }
  // 循环遍历记录
  while(rs.next()){// 每次获取表中对应的一条记录
   // 创建封装记录的对象
   T obj = clazz.newInstance();
   // 遍历一个记录中的所有列
   for (int i = 0; i < columnList.size(); i++) {
    // 获取列名
    String column = columnList.get(i);
    // 根据列名创建set方法
    String setMethd = "set" + column.substring(0, 1).toUpperCase() + column.substring(1);
    // 获取clazz中所有方法对应的Method对象
    Method[] ms = clazz.getMethods();
    
    // 循环遍历ms
    for (int j = 0; j < ms.length; j++) {
     // 获取每一个method对象
     Method m = ms[j];
     // 判断m中对应的方法名和数据库中列名创建的set方法名是否形同
     if(m.getName().equals(setMethd)){
      // 反调set方法封装数据
      m.invoke(obj, rs.getObject(column));// 获取rs中对应的值,封装到obj中
      break; //提高效率
     }
    }
   }
   // 封装好的一条记录对应的对象放入list集合中
   list.add(obj);
  }
  // 关闭资源
  close(rs, ps, conn);
  
  return list;
 }
 
 /** 执行增、删、改方法
  * @param sql
  * @param oList
  *
  * Exception
  * wqj
  */
 public int executeUpdate(String sql, List<Object> oList) throws Exception{
  int rowCount = -1;
  
  Connection conn = this.getConnection();
  
  PreparedStatement ps = conn.prepareStatement(sql);
  
  if(oList != null && oList.size() > 0){
   for (int i = 0; i < oList.size(); i++) {
    ps.setObject(i + 1, oList.get(i));
   }
  }
  
  rowCount = ps.executeUpdate();
  
  close(null, ps, conn);
  
  return rowCount;
  
 }
 
 /**关闭资源
  * @param rs
  * @param ps
  * @param conn
  * SQLException
  * wqj
  */
 public void close(ResultSet rs, PreparedStatement ps, Connection conn) throws SQLException{
  if(rs != null){
   rs.close();
   rs = null;
  }
  if(ps != null){
   ps.close();
   ps = null;
  }
  if(conn != null){
   conn.close();
   conn = null;
  }
 }
}

 

转载于:https://my.oschina.net/HIJAY/blog/114106

你可能感兴趣的文章
深入计算机系统 练习题2.44 补码运算
查看>>
python 在linux下读取 .xlsx
查看>>
Java 学习 面向对象学习
查看>>
创建一个git仓库
查看>>
理解爬虫原理
查看>>
Linux 多线程
查看>>
iOS“.NET研究”平台应用开发的敏捷设计流程
查看>>
sqlite数据库中自增key的设定,autoincrement 和 rowid
查看>>
【推荐】10款优秀的jQuery图片插件
查看>>
黑帽大会:SCADA系统安全就像一颗“定时炸弹”
查看>>
20165303第九周学习总结
查看>>
sql存储过程中的整形变量和字符串变量
查看>>
WebService 调用三种方法
查看>>
自定义web框架
查看>>
java集合架构(二)——Map
查看>>
课堂实验
查看>>
The King’s Ups and Downs
查看>>
JRadioButton 实现图片切换
查看>>
图片和字符串相互转换
查看>>
动态规划,Dijkstra算法,A*算法的比较
查看>>