Mysql分页数据显示总数恒为1问题的分析与解决
2016-06-21 15:06
876 查看
1.1 问题描述
Doma连接Mysql数据库进行分页时,查询出来的总数据显示总是为1(不是想要的数据结果)。界面现象如下:1.2 问题分析
Doma调用MySql语句时会自动在sql语句中加入sql_calc_found_rows关键字,然后配合found_rows()函数的使用,统计出去除limit限制条件的所有数据的总数。语句如下:select sql_calc_found_rows rce_message_id, message_service_id, message_name, message_description, depart_path, create_time, createby, update_time, updateby, update_count, delete_time, deleteby, delete_flag from rce_message_dict where delete_flag='0' order by update_time desc limit 0, 10 . . . . . . select found_rows() |
那么在执行上面两条语句之间发生了什么?
让我们来看一个配置文件:
没错这就是数据库连接池的配置文件,在配置项有个validationQuery配置项,该配置项的作用就是来验证数据库连接的有效性。常见的validationQuery语句有:
数据库 | validationQuery(仅供参考,并非固定) |
Oracle | select 1 from dual |
DB2 | select 1 from sysibm.sysdummy1 |
mysql | select 1 |
microsoft sql | select 1 |
hsqldb | select 1 from INFORMATION_SCHEMA.SYSTEM_USERS |
postgresql | select version(); |
ingres | select 1 |
derby | select 1 |
H2 | select 1 |
这样问题就出现了,在执行select found_rows()语句之前,其实就执行了配置项validationQuery中的语句“select 1”,所以返回结果就变成了1。
1.3 解决方法
思路很清楚,只要在执行select found_rows()语句之前不去执行validationQuery中的语句就可以了。如何做?在相应的查询方法上加上事务,这样就能保证使用的是同一个connection,就不会去执行validationQuery中的验证语句了。
最终界面效果:
以上资料仅供参考
友情链接:http://commons.apache.org/proper/commons-dbcp/configuration.html
http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
相关文章推荐
- MySQL中的integer 数据类型
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- MySQL存储过程
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- PropertyChangeListener简单理解
- MySQL创建用户及权限控制