0 0

JdbcTemplate.queryForObject 返回值怎么判断5

1、查询表中一条数据。
public Admin findById(String id) throws Exception {
String sql = "select adminid,note,adminflag from admin where adminid=?";
Admin admin = (Admin) this.jdbc.queryForObject(sql,
new Object[] { id }, new int[] { Types.VARCHAR },
new RowMapper(){
public Object mapRow(ResultSet rs,int index)throws SQLException{
Admin a = new Admin();
a.setAdminid(rs.getString("adminid"));
a.setNote(rs.getString("note"));
a.setAdminflag(rs.getInt("adminflag"));
return a;
}
});
return admin;

2、在插入一条新数据时,判断这条数据是否存在。
public boolean doCreate(Admin vo) throws Exception {
boolean flag = false;
if(this.findById(vo.getAdminid()) == null){
String sql = "insert into admin(adminid,password,note,adminflag)values(?,?,?,?)";
if (this.jdbc.update(sql, new Object[] { vo.getAdminid(),
vo.getPassword(), vo.getNote(), vo.getAdminflag() },
new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR,
Types.INTEGER }) > 0) {
flag = true;
}
}
return flag;

}

异常:
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0

我是这么判断的,结果老报错,findById()可以把数据查询出来,而页面也有显示,就是判断这里,出错!

问题补充:
sy197661944 写道
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0


spring做了封装, queryForObject回去数据库查询一条记录,如果没有记录符合查询条件,或者有多条记录符合条件,都会报出错误,

只不过 expected 1, actual 0 意味这没有记录符合这查询条件.
expected 1 可以理解为期望有一条且只有一条符合条件的记录,
actual 0 意味着,没有记录符合.
如果 actual *  , * 为  > 1 ,那么也会出错.(这个方法就是这么规定的..)


可以这样写,假设一个简单的表,user.字段有:
id 和  name.

queryForInt(select count(1) as c from user where id = ?)

在结果集中取 c 的值 ,如果大于0,就可以认为有1条或者多条记录.


谢谢,我怎么就没想到呢。
2011年11月01日 19:54

1个答案 按时间排序 按投票排序

0 0

采纳的答案

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0


spring做了封装, queryForObject回去数据库查询一条记录,如果没有记录符合查询条件,或者有多条记录符合条件,都会报出错误,

只不过 expected 1, actual 0 意味这没有记录符合这查询条件.
expected 1 可以理解为期望有一条且只有一条符合条件的记录,
actual 0 意味着,没有记录符合.
如果 actual *  , * 为  > 1 ,那么也会出错.(这个方法就是这么规定的..)


可以这样写,假设一个简单的表,user.字段有:
id 和  name.

queryForInt(select count(1) as c from user where id = ?)

在结果集中取 c 的值 ,如果大于0,就可以认为有1条或者多条记录.

2011年11月02日 17:16

相关推荐

    Spring笔记之整合JdbcTemplate.doc

    return jdbcTemplate.queryForObject("SELECT * FROM t_person WHERE id=?", new Object[]{id}, new PersonRowMapper()); } @Override public void update(Person person) { jdbcTemplate.update("UPDATE t_...

    15熟悉集成JdbcTemplate.md

    15熟悉集成JdbcTemplate.md

    jdbcTemplate.jar

    《Spring JDBC模板——jdbcTemplate.jar深度解析》 在Java编程领域,Spring框架以其强大的功能和易用性成为了开发者们的首选。而在Spring框架中,Spring JDBC是处理数据库操作的重要模块,它提供了一种更加简洁、...

    Spring JdbcTemplate.batchUpdate 例子

    总之,`Spring JdbcTemplate.batchUpdate`是处理批量数据库操作的强大工具,它可以提高效率,减少与数据库的交互次数。然而,正确地使用它需要对事务管理、异常处理和性能优化有深入的理解。通过合理的配置和良好的...

    Spring--JdbcTemplate.pdf

    - 查询返回某个值(如计数或总和):调用queryForObject方法,传入SQL语句和返回值对应的Class类型。 - 查询返回对象:通过query方法结合RowMapper接口来实现,RowMapper负责将结果集中的数据封装到实体对象中。 ...

    spring-springMvc-jdbctemplate.rar

    在本项目中,"spring-springMvc-jdbctemplate.rar" 是一个包含了使用Spring框架、Spring MVC和JdbcTemplate实现的Web应用示例。这个压缩包可能包含了一系列的配置文件、源代码和数据库脚本,旨在展示如何整合这些...

    Java 使用JdbcTemplate 中的queryForList发生错误解决办法

    jdbcTemplate.queryForList(selectSql.toString(), entityClass) ``` 查询 SQL 如下: ```sql select * from test where 1=1 order by create_time desc limit 0,10 ``` 错误信息如下: ``` Incorrect column count:...

    jdbcTemplate

    return getJdbcTemplate().queryForObject(sql, Integer.class,map); } @Override public User getUserById(Integer primaryKeyId) { String sql = "select id,username, password, createDate, modifyDate...

    JdbcTemplate.7z

    在实际操作中,JdbcTemplate提供了多种执行SQL的方法,如`queryForList()`, `queryForObject()`, `update()`, `execute()`等。这些方法都包含了事务管理、异常处理和结果集转换等功能。例如,`queryForList(String ...

    RedisTemplate-JDBCTemplate.zip

    在处理数据库操作和缓存服务时,Spring提供了两个非常有用的模板类:JdbcTemplate和RedisTemplate。这两个模板类旨在简化数据库操作(如JDBC)和NoSQL存储(如Redis)的交互,从而减少代码量,提高可读性和可维护性...

    spring自带的jdbcTemplate查询、插入预编译使用

    List<MyObject> result = jdbcTemplate.query(sql, params, new MyRowMapper()); ``` 在这个例子中,`id = ?`是预编译的占位符,`params`数组包含了实际参数,`MyRowMapper`是一个自定义的映射器,用于将查询结果...

    jdbcTemplate的使用方法.pdf

    String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[]{id}, java.lang.String.class); ``` 查询多条记录并遍历: ```java List, Object>> rows = ...

    使用jdbcTemplate查询返回自定义对象集合代码示例

    一、使用JdbcTemplate.queryForList()方法 首先,我们可以使用JdbcTemplate的queryForList()方法来查询数据库,并将查询结果转换为自定义对象集合。下面是一个示例代码: ```java public List<UserInfo> findAll()...

    JDBCTemplate.zip

    return jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class)); } ``` 这里,`query()`方法会自动处理SQL执行过程中的异常,并将查询结果转换为User对象的列表。 总的来说,JDBCTemplate是Spring对...

    JdbcTemplate.rar

    在需要的代码块中,可以使用`jdbcTemplate.execute(new TransactionCallback() {...})`或开启手动事务,确保操作的原子性。 8. **最佳实践** - 尽可能使用PreparedStatement,以防止SQL注入攻击。 - 避免硬编码...

    Spring的getBean和JdbcTemplate

    List<User> users = jdbcTemplate.query("SELECT * FROM users", (rs, rowNum) -> new User(rs.getString("name"), rs.getInt("age"))); // 处理查询结果 } ``` 在上述代码中,`@Autowired`注解使得Spring自动将`...

    JdbcTemplate.jar

    - **queryForObject()**:执行查询并期望返回单个对象,如果结果集为空或有多个结果,会抛出异常。 - **update()**:用于执行更新、插入、删除等操作,返回受影响的行数。 - **execute()**:可以执行任意的SQL语句,...

    使用Spring JDBCTemplate进行增删改查curd操作

    return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper()); } ``` 这里,`queryForObject()`方法用于返回单个对象,`UserRowMapper`是自定义的RowMapper,负责将查询结果映射为User对象。...

    jdbcTemplate的jar包.rar

    在Java开发中,Spring框架的JdbcTemplate是连接和操作数据库的重要工具。JdbcTemplate提供了一种简单、安全的方式来执行SQL语句,避免了手动处理数据库连接、预编译语句、结果集等繁琐工作,从而降低了出错的可能性...

    简化版 java web 开发平台,基于 Spring MVC,jdbcTemplate.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...

Global site tag (gtag.js) - Google Analytics