【问题标题】:Java and MySQL queryJava 和 MySQL 查询
【发布时间】: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的值是多少吗?

标签: java mysql jdbc


【解决方案1】:

手动执行查询通常会导致许多不同的问题——所有这些问题都是特定于平台和特定于数据库的。我认为您的最佳答案是:“切换到 ORM”。

该框架已被证明非常好,将所有 SQL 数据包装到实体和事务(如果需要)将同时解决您的大部分问题 - 您只需要正确注释您的实体和关系。数据库查询可以通过独立于平台的 JPA-“标准”来执行,并且允许您避免很多问题并使您的代码可读。
教程:http://www.vogella.com/tutorials/JavaPersistenceAPI/article.html
SO-问题:https://stackoverflow.com/questions/743065/what-is-the-fastest-way-to-learn-jpa

使用 JPA,您将不再需要关心语句或查询(嗯,至少大部分时间),并且您提到的问题将消失 - 另外:只需 30-60 分钟即可实施。

附加提示:使用 Maven 和 Eclipselink(JPA2 实现)——这是一个非常强大、可移植的组合

【讨论】:

  • 谢谢,但我认为在这种情况下我不需要ORM。
  • 在这种特定情况下,我可能不需要 orm。我在内存中构建大图,在数据库中创建临时表,所以在这种情况下我可能不需要 orm。
  • 显然很多互联网超级英雄不喜欢 ORM ......这对他们来说可能太复杂了 :-)
猜你喜欢
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 2015-09-11
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
相关资源
最近更新 更多