我正试图从mySQL服务器(在我的局域网中)读取一个巨大的resultSet。我按照我发现寻找setFetchSize
方法的方式实现了它:BalusC's Example。所以我做了:
con = DriverManager.getConnection(url, user, password);
//con.setAutoCommit(false);
st = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
st.setFetchSize(Integer.MIN_VALUE);
rs = st.executeQuery(query);
int count = 0;
while (rs.next ()) {
// Process entry
String rsc = rs.getString ("resource");
String tpc = rs.getString("topic");
System.out.println(count + ": " + rsc);
++count;
}
虽然它挂在第{10}行第{10}行。它不会抛出异常。
编辑:
超时后发生了新的事情。它返回了这个错误 消息:
rs.next()
此错误似乎无关。
EDIT2:我编写了一个PHP脚本,用于按流检索结果,并且完全相同。所以它与JDBC无关......我不知道发生了什么!!
答案 0 :(得分:1)
第二条错误消息是热调和/或JRebel(source)时Eclipse调试器中的死锁:
这是一个众所周知的问题,实际上有两个问题 1)Eclipse调试器有时会出现热插拔死锁(对于任何版本的JRebel都是如此) 2)热交换时JVM崩溃 - JRebel 4M1也是如此。
我们期待很快发布bugfix(3.6.2与Eclipse插件一起) - 它将解决第一个问题。第二个问题应该用4M2版本修复。
建议:
System.out.println()
进行调试答案 1 :(得分:1)
好的,问题出在查询本身。
我发现流式传输对查询的构建方式非常敏感。如果我做了一点改动(比如添加SELECT DISTINCT),它会缓冲或挂起。最后,我从查询中留下了一列并且工作......