H2 分页的时候报错,SQL 语句的解析应该有点问题,在解析 H2 SQL 的时候并没有把 SQLSelectQueryBlock 解析为 MySqlSelectQueryBlock。 测试了 1.1.4 - 1.1.6,都有这个问题。
PagerUtils.limit("SELECT * FROM test", JdbcUtils.H2, 0, 10);
报类型转换错误
java.lang.ClassCastException: com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock cannot be cast to com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock at com.alibaba.druid.sql.PagerUtils.limitQueryBlock(PagerUtils.java:108) at com.alibaba.druid.sql.PagerUtils.limit(PagerUtils.java:97) at com.alibaba.druid.sql.PagerUtils.limit(PagerUtils.java:76) at com.alibaba.druid.sql.PagerUtils.limit(PagerUtils.java:72)
原提问者GitHub用户JaynLau
H2 是一款开源的关系型数据库,它支持 SQL 语言并提供了丰富的功能,如分页查询。但是,如果在使用 H2 数据库时遇到了分页错误,可以尝试以下解决方案:
SELECT FROM table_name LIMIT page_size OFFSET (page_number - 1) page_size;
CopyCopyCopy
其中,table_name 是要查询的表名,page_size 是每页显示的记录数,page_number 是当前要显示的页码。
SELECT FROM table_name WHERE condition LIMIT page_size OFFSET (page_number - 1) page_size;
CopyCopyCopy
jdbc:h2:file:path/to/database;DB_CLOSE_ON_COMMIT=FALSE;
CopyCopyCopy
CREATE TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(255),
age INT
);
CopyCopyCopy
这个问题可能是由于在解析H2 SQL语句时,出现了类型转换错误导致的。具体原因可能与不正确地将SQLSelectQueryBlock解析为MySqlSelectQueryBlock有关。
为了解决这个问题,你可以尝试更新Druid依赖的版本。在你提供的信息中,你测试了1.1.4至1.1.6版本都存在这个问题。有时,更高版本的依赖可能已经修复了一些问题。
你可以尝试查找并升级Druid到最新版本。如果问题仍然存在,请考虑向Druid官方报告这个问题,他们将能够提供更好的支持和解决方案。
另外,你也可以尝试检查你的SQL查询是否有其他问题,例如语法错误或其他不一致性,这可能会导致解析错误。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
根据您提供的信息,问题可能出在使用的SQL解析器上。PagerUtils.limit方法中的第二个参数是指定SQL解析器的类型,而您传入的是JdbcUtils.H2,表示使用H2数据库的解析器。然而,PagerUtils.limit方法内部的实现是基于MySQL的语法来进行分页处理的,所以当解析H2的SQL语句时会报类型转换错误。
要解决这个问题,您可以尝试使用H2数据库的解析器来进行分页处理。可以尝试修改PagerUtils.limit方法的实现,将MySQL相关的代码替换为H2相关的代码。或者,您可以尝试使用其他支持H2数据库的分页工具或自行编写分页逻辑来处理分页查询。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。