【发布时间】:2014-07-15 21:02:06
【问题描述】:
我有 java 和 MySQL 的问题。我的代码:
Connection connection;
// ...
for (String query : updateAndInsertQuery) {
Statement stm = connection.createStatement();
stm.execute(query);
stm.close();
}
Statement stm2 = connection.createStatement();
System.out.println("Before query");
System.out.flush();
ResultSet Result = stm2.executeQuery(selectQuery);
System.out.println("After query");
System.out.flush();
int vfrom, vto;
while (Result.next()) {
// ...
}
当我运行程序时,我会在 MySQL 查询中看到并运行
show processlist;
selectQuery 在列表中可见,状态为正在发送数据或正在写入网络。在控制台打印:Before query。下一个
show processlist;
返回空列表,但应用程序不打印After query。你有类似的问题吗?
--编辑
我解决了我的问题。
我认为: wen MySQL 返回数据并且查询在 MySQL 的 processlist 中不可见 我应该立即收到控制台消息:查询后
但是控制台是空的,java 进程可以工作(cpu 使用率是 90-100%)所以我认为这是我的错误,但是在 1h 之后应用程序抛出异常
增加内存限制解决我的问题。
所以我有下一个问题,为什么应用程序在小时后抛出异常?垃圾收集尝试释放未分配的对象?
【问题讨论】:
-
应用程序发生了什么,它是崩溃还是冻结?你能更详细地解释一下你的步骤吗?
-
可能有一个例外。查询是什么?
-
你能说出
selectQuery的值是多少吗?