jdbcTemplate.queryXX 方法用法

本文介绍了如何使用JDBC进行数据查询,包括使用List和SqlRowSet处理查询结果的方法,并对比了ResultSet与SqlRowSet的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//  List list = jdbcTemplate.queryForList("select * from task");
  // 读取数据
//  Iterator iterator = list.iterator();
//  Map map = (Map) iterator.next();
//  System.out.println(map.get("tState"));//此处的get必需是与数据库列名相同
//  System.out.println(list.size());//共几条数据
  
//  SqlRowSet rs = jdbcTemplate.queryForRowSet("select * from task");//与ResultSet类似
  // 读取数据
//  System.out.println(rs.getRow());//共几条数据
//  System.out.println(rs.next());
//  System.out.println(rs.getString("tstate"));

 

ResultSet 是 “连接的行集”不要在页面中使用,使用的话就不能关掉connection,这样做会导致严重的问题。
SqlRowSet 是 “非连接的行集” 可以在页面中使用

 

详解:

http://www.blogjava.net/176142998/archive/2009/02/03/221507.html

 

http://www.javaeye.com/topic/368070

<think>我们正在讨论Spring框架中的JdbcTemplate类,特别是queryForList方法。根据用户需求,需要提供该方法的使用指南和示例代码。同时,根据系统指令,需要正确使用LaTeX格式,生成相关问题,并在回答中引用相关段落时添加引用标识。首先,回顾一下JdbcTemplatequeryForList方法:-queryForList用于执行SQL查询并返回一个List,其中每个元素是一个Map,代表一行数据,键是列名,值是对应的数据。-该方法有多个重载版本,常用的包括:1.`List<Map<String,Object>>queryForList(Stringsql)`2.`List<Map<String,Object>>queryForList(Stringsql,Object...args)`3.`<T>List<T>queryForList(Stringsql,Class<T>elementType)`4.`<T>List<T>queryForList(Stringsql,Class<T>elementType,Object...args)`接下来,根据引用内容,我们可以参考:-引用[1]和[3]提到了如何配置数据源和创建JdbcTemplate实例。-引用[2]是响应式编程的内容,与当前问题无关。-引用[4]是SpringMVC视图解析,无关。-引用[5]是缓存配置,无关。因此,我们将主要参考引用[1]和[3]来构建回答。回答结构:1.简要介绍queryForList方法。2.展示如何配置数据源和JdbcTemplate(参考引用[1]和[3])。3.提供不同重载方法的使用示例。4.注意事项。同时,生成相关问题。注意:所有行内数学表达式用$...$,独立公式用$$...$$(但这里可能用不上数学公式,所以主要关注代码示例)。最后,生成相关问题。</think>### Spring JdbcTemplate queryForList 方法使用指南 `queryForList` 是 Spring JdbcTemplate 的核心查询方法之一,用于执行 SQL 查询并将结果映射为 `List` 集合。根据返回数据类型可分为两种主要形式: #### 一、基础配置(参考引用[1][3]) 1. **配置数据源**(application.properties): ```properties spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 2. **注入 JdbcTemplate**: ```java @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } // [^1] ``` #### 二、方法重载及示例 ##### 1. 返回 `List<Map<String, Object>>` 每行数据以 `Map` 形式存储(键=列名,值=数据): ```java // 无参数查询 List<Map<String, Object>> result = jdbcTemplate.queryForList( "SELECT id, name FROM users" ); // 带参数查询(预防SQL注入) List<Map<String, Object>> result = jdbcTemplate.queryForList( "SELECT * FROM products WHERE price > ?", 50.0 // 参数值 ); ``` **结果示例**: ```json [ {"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"} ] ``` ##### 2. 返回 `List<T>`(指定元素类型) 直接映射为基本类型或包装类的集合: ```java // 获取单列数据(如List<String>) List<String> names = jdbcTemplate.queryForList( "SELECT name FROM departments", String.class // 元素类型 ); // 带参数的单列查询 List<Integer> ids = jdbcTemplate.queryForList( "SELECT id FROM orders WHERE status = ?", Integer.class, // 元素类型 "SHIPPED" // SQL参数 ); ``` #### 三、注意事项 1. **结果集要求**: - 返回 `List<Map>` 时:适用于多列查询 - 返回 `List<T>` 时:**SQL必须仅查询单列**,否则抛出 `IncorrectResultSizeDataAccessException` 2. **参数绑定**: 使用 `?` 占位符传递参数,自动处理类型转换和 SQL 注入防护: ```java jdbcTemplate.queryForList( "SELECT email FROM users WHERE age BETWEEN ? AND ?", String.class, 18, // 第一个参数 30 // 第二个参数 ); ``` 3. **空结果处理**: - 当查询无结果时返回**空集合**(非 `null`),可直接调用 `size()` 判断 #### 四、完整示例 ```java @Repository public class UserDao { private final JdbcTemplate jdbcTemplate; public UserDao(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } // 获取所有用户ID(单列) public List<Long> getAllUserIds() { return jdbcTemplate.queryForList( "SELECT id FROM users", Long.class ); } // 按角色查询用户详情(多列) public List<Map<String, Object>> getUsersByRole(String role) { return jdbcTemplate.queryForList( "SELECT * FROM users WHERE role = ?", role ); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值