//查询多条记录,返回对应的对象的集合 public List getForList(Class clazz, String sql, Object...args){

List list = new ArrayList();

Connection connection = null;

PreparedStatement preparedStatement = null;

ResultSet resultSet = null;

try {

//1.得到结果集   connection = JDBCTools.GetConnection();

preparedStatement = connection.prepareStatement(sql);

for(int i = 0; i < args.length; i++){

preparedStatement.setObject(i + 1, args[i]);

}

resultSet = preparedStatement.executeQuery();

//2.处理结果集,得到 Map 的List,其中 一个 Map对象 就是一条记录

//Map 的 key 为 resultSet 中 列的别名, Map的 value 为列的值   List> values = handleResultSettoMapList(resultSet);

//3.把 Map的List 转为 clazz 对应的 List

//其中 Map 的key 即为 clazz 对应的对象的 propertyName

//而 Map 的 value 即为 clazz 对应的对象的 propertyValue。   list = transferMapListToBeanList(clazz, values);

} catch (Exception e) {

e.printStackTrace();

}finally{

JDBCTools.release(resultSet, preparedStatement, connection);

}

return list;

}

/**

* 处理结果集,得到 Map的一个List,其中 一个 Map对象对应一条记录

*@paramresultSet

*@return

*@throwsSQLException

*/ private List> handleResultSettoMapList(

ResultSet resultSet) throws SQLException {

//5.准备一个 List>:

//键:存放列的别名, 值:存放列的值。其中一个Map 对象对应着一条记录  List> values =

new ArrayList>();

ResultSetMetaData rsmd = resultSet.getMetaData();

Map map = null;

//7.处理 ResultSet, 使用 while 循环  while(resultSet.next()){

map = new HashMap();

for(int i = 0; i < rsmd.getColumnCount(); i ++){

String columLabel = rsmd.getColumnLabel(i + 1);

Object value = resultSet.getObject(i + 1);

map.put(columLabel, value);

}

//11.把一条记录的一个 Map 对象放入 5 准备的List中   values.add(map);

}

return values;

}

private List transferMapListToBeanList(Class clazz,

List> values) throws InstantiationException,

IllegalAccessException, InvocationTargetException {

//12. 判断 List 是否为空集合,若不为空

//则遍历List,得到一个一个的Map对象,再把一个 Map对象转换为一个 Class参数对应的 Object对象  List result = new ArrayList();

T bean = null;

if(values.size() > 0){

for(Map m:values){

bean = clazz.newInstance();

for(Map.Entry entry:m.entrySet()){

String propertyName = entry.getKey();

Object value = entry.getValue();

BeanUtils.setProperty(bean, propertyName, value);

}

//13. 把 Object 对象放入到 list 中    result.add(bean);

}

}

return result;

}

//查询一条记录,返回对应的对象 public T get(Class clazz, String sql, Object...args){

List results = getForList(clazz, sql, args);

if(results.size() > 0){

return results.get(0);

}

return null;

}

//返回某条记录的某一个字段的值 或一个统计的值(一共有多少条记录等) public E getForValue(String sql, Object...args){

//1.得到结果集:该结果集应该只有一行,且只有一列  Connection connection = null;

PreparedStatement preparedStatement = null;

ResultSet resultSet = null;

try {

//1.得到结果集   connection = JDBCTools.GetConnection();

preparedStatement = connection.prepareStatement(sql);

for(int i = 0; i < args.length; i++){

preparedStatement.setObject(i + 1, args[i]);

}

resultSet = preparedStatement.executeQuery();

//2.取得结果集   if(resultSet.next()){

return (E) resultSet.getObject(1);

}

} catch(Exception e){

e.printStackTrace();

} finally{

JDBCTools.release(resultSet, preparedStatement, connection);

}

return null;

}

测试

@Test

public void testGet() {

String sql = "SELECT flow_id flowid, type, id_card idcard," +

" exam_card examcard,"

+ "student_name studentname, location, grade " + "FROM examstudent "

+ "WHERE flow_id = ?";

Student student = dao.get(Student.class, sql, 7);

System.out.println(student);

}

@Test

public void testGetForList() {

String sql = "SELECT flow_id flowid, type, id_card idcard," +

" exam_card examcard,"

+ "student_name studentname, location, grade " + "FROM examstudent";

List students = dao.getForList(Student.class, sql);

System.out.println(students);

}

@Test

public void testGetForValue() {

String sql = "SELECT id_card idcard FROM examstudent "

+ "WHERE flow_id = ?";

String idCard = dao.getForValue(sql, 7);

System.out.println(idCard);

sql = "SELECT max(grade) FROM examstudent";

int grade = dao.getForValue(sql);

System.out.println(grade);

}

MySQL批量查询能返回集合吗_JDBC——查询多条记录,返回对应的对象的集合;查询一条记录,返回对应的对象...相关推荐

  1. mybatis主从表关联查询,返回对象带有集合属性

    昨天有同事让我帮着看一个问题,mybatis主从表联合查询,返回的对象封装集合属性.我先将出现的问题记录一下,然后再讲处理方法也简单说明一下: VersionResult为接收返回数据对象,get\s ...

  2. MySQL 批量插入:如何不插入重复数据?

    以下文章来源方志朋的博客,回复"666"获面试宝典 知识这个东西,看来真的要温故而知新,一直不用,都要忘记了???? 业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表 ...

  3. MySql批量插入时,如何不插入重复的数据

    以下文章来源方志朋的博客,回复"666"获面试宝典 温故而知新 业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不 ...

  4. MySQL 批量插入数据,单次插入多少条数据效率最高

    文章目录 一.前言 二.批量插入前准备 1.插入到数据表的字段 2.计算一行字段占用的空间 3.在数据里做插入操作的时候,整体时间的分配 三.批量插入数据测试 1.SQL语句的大小限制 2.查看服务器 ...

  5. mysql临时表如何分页查询慢_面试官扎心一问:数据量很大,分页查询很慢,有什么优化方案?...

    准备工作 一般分页查询 使用子查询优化 使用 id 限定优化 使用临时表优化 关于数据表的id说明 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明 ...

  6. mysql统计记录数据库设计_MYSQL数据库设计,查询规范

    MySQL数据库 (一)建表规约 1.[强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否) .说明:任何字段如果为非负数,必须是 ...

  7. MySQL 批量插入数据,一次插入多少行数据效率最高?

    一.前言 我们在操作大型数据表或者日志文件的时候经常会需要写入数据到数据库,那么最合适的方案就是数据库的批量插入.只是我们在执行批量操作的时候,一次插入多少数据才合适呢?假如需要插入的数据有百万条,那 ...

  8. Mysql批量删除大量数据

    一.Mysql批量删除大量数据 方案1 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE ...

  9. MySQL学习记录04where条件子句、联表查询、子查询

    文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...

最新文章

  1. ES6常用新特性---笔记一
  2. java中调用_如何获取Java中的调用方类
  3. CentOS6 启动流程图文解剖 + 引导文件损坏处理方法
  4. 【多线程基础】- 多个线程顺序打印ABC
  5. [设计模式]开闭原则
  6. 微软免费软件项目DreamSpark更名为Microsoft Imagine
  7. Python中内置函数的介绍
  8. 自定义事件和jQuery插件
  9. 9.1 Zend_Json
  10. mysql用户管理设置权限_mysql 用户管理和权限设置
  11. javaswing个人记账系统 java swing mysql实现的个人记账系统源码(1012)
  12. oppo手机解锁_ColorOS一键解锁工具
  13. logback配置详解
  14. 国内外你知道的设计网站!给你的设计找点灵感!
  15. get请求中文乱码问题解决
  16. 英语词根词缀记忆法(全集)_【干货又来啦】中考英语词汇速记,你也会说 so easy啦...
  17. oracle中锁机制,Oracle锁的基本机制
  18. 全国精确到市的新冠疫情历史数据
  19. 免费远程控制软件新功能
  20. python写文字冒险游戏手机版_用128行代码实现一个文字冒险游戏

热门文章

  1. Android锁机样本分析
  2. 服务器被入侵了?反手溯源出入侵者画像【网络安全】
  3. UNIX环境高级编程第二版_扫描 版笔记
  4. 通过cookie保存并读取用户登录信息
  5. 100. 增减序列【差分 / 思维】
  6. Codeforces Beta Round #6 (Div. 2)【未完结】
  7. Java之static
  8. ActiveMQ中Topic消费者
  9. 系统设计说明书案例_案例 | 太阳能+热泵枸杞烘干系统设计及经济性分析
  10. 【PAT】A1106 Lowest Price in Supply Chain