Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java H2数据库支持滚动吗_Java_Hibernate_Jdbc_H2 - Fatal编程技术网

Java H2数据库支持滚动吗

Java H2数据库支持滚动吗,java,hibernate,jdbc,h2,Java,Hibernate,Jdbc,H2,我试图使用滚动来遍历表中的所有记录。 代码和查询非常简单 // a really really simple query String hql = "from " + MyTable.class.getSimpleName(); Query query = session.createQuery(hql); query.setReadOnly(true); query.setFetchSize(Integer.MIN_VALUE); // An exception is caused her

我试图使用滚动来遍历表中的所有记录。 代码和查询非常简单

// a really really simple query
String hql = "from " + MyTable.class.getSimpleName();

Query query = session.createQuery(hql);
query.setReadOnly(true);
query.setFetchSize(Integer.MIN_VALUE);

// An exception is caused here
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);

// My code would have continued by iterating the results
while (results.next()) { ... }
但这会导致出现
genericjdbception
“无法使用scroll执行查询”


是否H2数据库不支持滚动,或者我做错了什么?

以下一行是错误的:

query.setFetchSize(Integer.MIN_VALUE);
Integer.MIN_值
,是告诉JDBC使用流的技巧。但这个技巧(仅)由MySQL支持,而不是由H2支持

发件人:

前向只读结果集与fetch size(获取大小)Integer.MIN_VALUE(最小值)的组合将作为一个信号发送给驱动程序,以逐行流式处理结果集。此后,将逐行检索使用该语句创建的任何结果集

堆栈跟踪显示异常“参数行的无效值
-2147483648
”。该值正好是-2^31(
Integer.MIN\u值
)。H2不知道如何处理负获取大小,并引发异常


结论:滚动对H2数据库很有效。

我不认为这个技巧对任何数据库都有帮助。fetchSize的思想是减少到数据库的往返。你几乎总是想要的。@eckes我引用了MySQL文档中的一句话。@bvdb你说的是“结论:滚动对于H2数据库很好。”但是你能解释一下如何使用H2吗?@BjörnJacobs只需删除
setFetchSize(…)
中的一行即可。剩下的代码应该可以正常工作。
query.setFetchSize(Integer.MIN_VALUE);