先贴出代码,后续补充自己的思路、配置文件、使用方式:
/**
*
* 数据查询
*
*/
@Override
public List<?> queryObject(List<Map<String, Object>> params,
String tableName) {
List<Object> objectList = new ArrayList<Object>();
StringBuilder sql = new StringBuilder("SELECT * FROM " + tableName
+ " WHERE 1=1");
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null; try {
connection = DBConnection.getConnection();
if (params != null && params.size() > 0) {
for (int i = 0; i < params.size(); i++) {
Map<String, Object> map = params.get(i);
sql.append(" AND " + map.get("name") + " "
+ map.get("rela") + " " + map.get("value") + " ");
}
}
preparedStatement = connection.prepareStatement(sql.toString()); resultSet = preparedStatement.executeQuery();
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
// 获取数据列数
int columnsCount = resultSetMetaData.getColumnCount();
Field field = null;
Object object = null;
while (resultSet.next()) {
/**
* 获取实例化对象
*/
object = objectClass.newInstance(); String columnName = null;
String columnTypeName = null;
String columnValue = null; for (int i = 1; i <= columnsCount; i++) {
columnName = resultSetMetaData.getColumnName(i);
columnTypeName = resultSetMetaData.getColumnTypeName(i);
columnValue = resultSet.getString(i);
field = object.getClass().getDeclaredField(columnName);
field.setAccessible(true);
switch (columnTypeName) {
case "INT":
field.set(object, Integer.parseInt(columnValue));
break;
case "VARCHAR":
field.set(object, columnValue);
break;
case "FLOAT":
field.set(object, Float.parseFloat(columnValue));
break;
case "Date":
field.set(object,
new SimpleDateFormat().parse(columnValue));
break;
} }
objectList.add(object); } } catch (SQLException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} finally {
DBConnection.close(connection, preparedStatement, resultSet);
}
return objectList;
}

基本流程:(这张表结合源码备注理解应该问题不大)如果看不清楚,复制图片地址在新窗口中查看

反射实现增删改查(DAO层)——查询数据的更多相关文章

  1. SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]

    SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数   --创建表格 create table aa ( UserName varchar(50 ...

  2. struts2增删改查---layer---iframe层

    在这里写一下struts2中的简单的增删改查 struts.xml中的配置 <?xml version="1.0" encoding="UTF-8" ?& ...

  3. 用C#实现对MSSqlServer数据库的增删改查---DAL层

    说明:本人完成的工作是对传感器--超声波物位计进行硬件集成,上位机通过串口接收传感器数据并将其存到数据库中:在DAL层实现对数据库的增删改查,其中包含两个数据表分别是WaterLevelSet表和Wa ...

  4. 增删改查- 万能map- 模糊查询

    1.编写接口 2.编写对应的mapper种的sql语句 3.测试 接口 public interface UserDao { List<User> getUserList(); //根据I ...

  5. struts2增删改查---layer---iframe层---通配符---国际化

    在前一篇文章的基础上,修改一部分即可(在此只是简单介绍) struts.xml页面 在原来的基础之上 action的name="*_*"  class="包名.{1}&q ...

  6. 【gridview增删改查】数据库查询后lodop打印

    ASP.NET中使用gridview可以很容易的把需要的数据动态显示在前台,还可以在表格里加入列进行增删改查,每次点击的时候重新加载数据,gridview也提供了分页等功能,还有一些模版让显示在前台的 ...

  7. 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

    数据库的创建和sql语句增删改查 1. 载入驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, nam ...

  8. 反射实现数据库增删改查DAO及DAOImpl源代码(一)

    这是DAO层,第一次尝试,如有bug希望能即使反馈,我们共同进步.具体的用法和实现原理我会在前面几篇博客中补充更新.配置文件及项目目录结构会在下一篇中贴出! package com.javasm.su ...

  9. LINQ的增删改查写法&&组合查询

    .ToList();//返回一个集合,包含查到的所有值: .First();//返回查到的第一条数据,如果查不到会报错: .FirstOrDefault();返回查到的第一条数据,差不到返回一个nul ...

  10. Spring Data JPA基本增删改查和JPQL查询(含完整代码和视频连接)

    问题:SpringDataJPA怎么使用? 一.考察目标 主要考核SpringDataJPA的用法 二.题目分析 spring data jpa 的使用步骤(下面有具体实现细节) 1.创建maven工 ...

随机推荐

  1. 机器学习(十九)— xgboost初试kaggle

     1.官网下载kaggle数据集Homesite Competition数据集,文件结构大致如下: 2.代码实战 #Parameter grid search with xgboost #featur ...

  2. JS+css3焦点轮播图PC端

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. MySQL丨删除一张表小常识

    在MySQL里面 ,对于删除一张表里面的所有内容有两种语句: 1.delete from table_name; 2.truncate table table_name; 解析:以上两种方式都可以删除 ...

  4. linux命令学习笔记(21):find命令之xargs

    xargs是一条Unix和类Unix操作系统的常用命令.它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题 xargs的作用一般等同于大多数Unix shell中的反引号,但更 ...

  5. p2p视频点播系统开发案例――Myseelite

    项目地址:http://sourceforge.net/projects/myseelite/ 1. MySee公司倡导的开源项目,目前国内功能最强大的一个开源系统. 2. 一个直播(也支持轮播.点播 ...

  6. BZOJ5324 JXOI2018 守卫

    传送门 这是我见过的为数不多的良心九怜题之一 题目大意 给定一段$n$个点构成的折线,第$i$个折点的坐标是$(i,h_i)$,你可以在$i$点放置一个视野,定义$i$能看到$j$当且仅当$i$处有视 ...

  7. mouseout与mouseleave的区别

    1 mouseout:当鼠标指针从元素上移开时,发生 mouseout 事件.该事件大多数时候会与 mouseover 事件一起使用. 2 mouseout与 mouseleave 事件不同,不论鼠标 ...

  8. URL、SRC、HREF知识整理

    今天理一下URL.SRC.HREF定义以及使用区别. URL(Uniform Resource Locator) 统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上 ...

  9. 添加一个用户并且让用户获得root权限

    1.创建一般用户: 完全参考默认值创建一个用户, 一般账号UID应该是500以后的. 默认会创建用户家目录和账号一模一样的群组名.创建使用账号且给予口令才算完成了用户的创建流程. useradd us ...

  10. SQL 时间及字符串操作

    都是一些很基础很常用的,在这里记录一下 获取年月日: year(时间) ---获取年,2014 month(时间) ----获取月,5 day(时间) -----获取天,6 如果月份或日期不足两位数, ...