public static List getListBySql(String sql, Class cls){
  List list = new ArrayList();
  Connection connection =null;
  Statement stmt =null;
  ResultSet rs =null;
  try {
   connection = getConnection();
   stmt = connection.createStatement();
   rs = stmt.executeQuery(sql);
   while (rs.next()) {
    Object obj = getObject(rs, cls);
    list.add(obj);
   }
  }catch (Exception e) {
   e.printStackTrace();
   String sWord = " sql:" + sql;
   sWord += " 错误信息:" + e.getLocalizedMessage();
   PayMd5Utils.logResult(logpath,sWord);
   throw new RuntimeException("#执行出错:"+e.getLocalizedMessage());
  }finally{
   closeResultSet(rs);
   closeStatement(stmt);
   closeConnection(connection);
  }
  return list;
 }

private static Object getObject(ResultSet rs, Class cls) throws SQLException, IllegalArgumentException, IllegalAccessException, InstantiationException {
  Object object = null;
  Field[] fields = cls.getDeclaredFields();
  ResultSetMetaData metaData = rs.getMetaData();
  int columnCount = metaData.getColumnCount();
  for (int i = 1; i <= columnCount; i++) {
   String columnName = metaData.getColumnName(i);
   Field field = getField(fields, columnName);
   if (field != null) {
    if (object==null) {
     object=cls.newInstance();
    }
    field.setAccessible(true);
    Object value = rs.getObject(field.getName());
    setFieldValue(object, value, field);
   }
  }
  return object;
 }

private static Field getField(Field[] fields, String columnName) {
  for (Field field : fields) {
   if (columnName.toUpperCase().equals(field.getName().toUpperCase())) {
    return field;
   }
  }
  return null;
 }

private static void setFieldValue(Object obj, Object value, Field field)
   throws IllegalArgumentException, IllegalAccessException {
  if (value == null) {
   return;
  }
  if (field.getType() == Long.class) {
   field.set(obj, StringUtil.toLong(value));
  } else if (field.getType() == Double.class) {
   field.set(obj, StringUtil.toDouble(value));
  } else if (field.getType() == Integer.class) {
   field.set(obj, StringUtil.toInteger(value));
  } else if (field.getType() == Date.class) {
   field.set(obj, new Date());
  } else {
   field.set(obj, StringUtil.toString(value));
  }
 }

SQL查询数据封装JavaBean对象的更多相关文章

  1. PL/SQL查询oracle数据库对象

    dictionary 全部数据字典表的名称和解释,它有一个同义词dict,dict_column 全部数据字典表里字段名称和解释 如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句: se ...

  2. 使用jbc查询数据封装成对象的工具类

    适用于获取Connection对象的util package com.briup.myDataSource; import java.io.FileReader; import java.io.Inp ...

  3. Hibernate-原生SQL查询

    HQL尽管容易使用,但是在一些复杂的数据操作上功能有限.特别是在实现复杂的报表统计与计算,以及多表连接查询上往往无能为力,这时可以使用SQL(Native SQL)实现HQL无法完成的任务. 1.使用 ...

  4. sql server查询可编程对象定义的方式对比以及整合

    本文目录列表: 1.sql server查看可编程对象定义的方式对比 2.整合实现所有可编程对象定义的查看功能的存储dbo.usp_helptext2 3.dbo.helptext2的选择性测试 4. ...

  5. hibernate将本地SQL查询结果封装成对象

    hibernate将本地SQL查询结果封装成对象 不知道大家有没有碰过这种情况,迫于很多情况只能用native SQL来查询(如:复杂统计等),然而使用native查询后,结果会被放到object里, ...

  6. SQL Server中查询用户的对象权限和角色的方法

    --SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...

  7. 笔面试复习(spring常用.jar包/事务/控制反转/bean对象管理和创建/springMVC工作原理/sql查询)

    ###spring常用jar包1.spring.jar是包含有完整发布模块的单个jar包.2.org.springframework.aop包含在应用中使用Spring的AOP特性时所需要的类.3.o ...

  8. 集合对象与自定义javabean对象接收数据库查询的数据 (基础知识扫盲)

    一.集合对象(List,Map,数组)等对象接收数据库查询的记录,如果没有一条记录,就得到的内容为空的集合,不是null: 例如:List查不到记录得到的就是size=0的list 二.自定义的jav ...

  9. Hibernate纯sql查询VO对象封装

    hibernate 纯sql查询返回结果集(未关联映射)组装VO的问题//须保证别名字段与Vo字段一致 //引号中为vo对象属性需与sql查询返回字段一致.addScalar("chname ...

随机推荐

  1. JavaScript和JQuery获取DIV的值

    1.设计源代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  2. ajax异步请求实例

    1. 问题分析 用户管理显示页面:usermanagement.tpl(也可以说是MVC中的V,即视图) 用户管理数据发送页面:usermanagement.php(也可以说是MVC中的M,即模型) ...

  3. 第14周 项目三-OOP版电子词典

    做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文.中文释义与词性间用'\t'隔开. (1)编程序,由用户输入英文词.显示词性和中文释义. ...

  4. java模拟实现生产者---消费者问题

    本文章为小编原创,请尊重文章的原创性,转载请注意写明转载来源:http://blog.csdn.net/u012116457 已知技术參数: 生产者消费者问题,描写叙述一组生产者向一组消费者提供产品/ ...

  5. 关于callContext

    coding们肯定有这种需求,在程序中,方法一级级调下去,比如A->b->C->D.... ->Z.在调用过程中,希望在调用函数之间传递一些数据,常见的是将特定的数据从高往低处 ...

  6. ean128与code128 条形码 算法分析

    [code128条形码组成] 除终止符(STOP)由13个模块组成外,其他字符均由11个模块组成 就是说,如果用‘1’表示黑线(实模块),用‘0’表示白线(空模块),那么每表示一个字符就需要11条线, ...

  7. WCF技术剖析之十一:异步操作在WCF中的应用(上篇)

    原文:WCF技术剖析之十一:异步操作在WCF中的应用(上篇) 按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作.对于前者,操 ...

  8. C# 中 双问号??的用法

    int? x = null;int y = x ?? -1; 这里的y不能为null,但是等于x,x为null时赋值给y会报错.?? 可以在x==null时对y赋值-1 更多相关资料:https:// ...

  9. 基于visual Studio2013解决C语言竞赛题之1040因数分解

     题目 解决代码及点评 /* 将一个数M分解为质因数(M≠0). */ #include <stdio.h> #include <stdlib.h> void main() ...

  10. 纯CSS设置Checkbox复选框控件的样式

    Checkbox复选框是一个可能每一个网站都在使用的HTML元素,但大多数人并不给它们设置样式,所以在绝大多数网站它们看起来是一样的.为什么不把你的网站中的Checkbox设置一个与众不同的样式,甚至 ...