Hibernate JdbcTemplate的queryForInt的些许问题
Posted 杨晨光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate JdbcTemplate的queryForInt的些许问题相关的知识,希望对你有一定的参考价值。
最近,在项目中,所做的模块中,一个特别简单的逻辑问题,搞完之后,控制台居然报错了。这可不是我所能容忍的,静下心来,返回去,好好看了看,这个Bug。
重现Bug
需求描述
前台需要上传一些文件,首先需要判断文件是否已经存在在数据库中。根据返回的值来判断,1代表存在,不添加;0代表不存在,可以添加。
既然这样,感觉那就好办了,去数据库中查,有记录的话,肯定返回不是null。没有的话,返回null,然后返回就行了。一开始,我定义了一个Int类型的,心想,也就一个数字,就Int吧。一执行,虽然可以成功,但是后台报错了。
spring的javadoc上讲getObject(String, Object[], Class) will return NULL if the result of the query is NUL
这里有0行和nullresult的区别
0行: select name from user where 1 = 2
null result: select max(salary) from user where 1 = 2 返回就是null
0行一定抛出IncorrectResultSizeDataAccessException异常
原因如下
ResultSetMetaData rsmd = rs.getMetaData();int nrOfColumns = rsmd.getColumnCount();这里返回ResultSet的列数
if (nrOfColumns != 1)
throw new IncorrectResultSizeDataAccessException(
"Expected single column but found " + nrOfColumns, 1, nrOfColumns);
0行,多于1行,就抛异常了。最好还是用QueryForList,返回的list的size为0,就是0行。
最后,改为List,就OK了。
遇到Bug,虽然能马上解决,但是,还是要多思考,多想想。
以上是关于Hibernate JdbcTemplate的queryForInt的些许问题的主要内容,如果未能解决你的问题,请参考以下文章
jdbc ,jdbcTemplate,MyBatis,Hibernate比较与分析
spring boot 集成 jpa+hibernate+jdbcTemplate
如何配置 Spring 使 JPA(Hibernate)和 JDBC(JdbcTemplate 或 MyBatis)共享同一个事务
使用 Spring boot 嵌入式 tomcat 连接池,无需 jdbctemplate、hibernate 或 JPA