【问题标题】:jdbc not updating connectionjdbc不更新连接
【发布时间】:2014-01-14 23:23:57
【问题描述】:

我在使用 jdbc 和 MySql 时遇到了一个奇怪的问题,这就是我正在做的事情:我打开一个 java.sql.Connection,进行查询,我没有关闭连接以进行重用。然后我使用 phpMyadmin 更新同一个数据库,

当我回到 Java 时,从具有相同未关闭连接的同一个数据库中检索给我的是旧结果,而不是我更新的结果。可能是什么问题?

我没有关闭的只是连接,其余的,preparedStatement,resultSet 在每次查询后都会关闭。

【问题讨论】:

  • 可能你的查询结果被缓存了,第二次没有新的查询被执行。您能否详细说明使用了哪个驱动程序以及配置是什么?
  • 您的 PhpMyAdmin 工具中是否禁用了自动提交?你检查了吗?
  • 没有提交选择。我只是选择。更新部分在 phpmyadmin 中完成。我这样做是有目的的,因为数据库将被很多人使用,如果一个人从另一台计算机更新,另一个人应该能够看到更改。

标签: java mysql jdbc


【解决方案1】:

可能是您的连接未设置为auto commit

通过调用con.getCommit() 检查其状态。它返回一个boolean。 如果返回false,则可以在创建连接对象后显式设置。

con.setAutoCommit( true );

所有DML操作后,调用con.commit()

【讨论】:

  • 他正在使用 PhpMyAdmin 更新数据。检查 JDBC 连接有什么帮助?
  • @JSS 事务将不会看到在该事务开始后提交的不同事务中执行的数据更改。
【解决方案2】:

您的会话似乎没有通过 JDBC 调用提交。这意味着您的更改在您提交之前不会应用于数据库,并存储在您的本地会话中。

请提供一些示例代码以供进一步调查。

【讨论】:

    【解决方案3】:

    尝试实现JDBC Transaction看这个例子

    HERE

    【讨论】:

      【解决方案4】:

      我明白了。

      java.sql.Connection c = ...;
      c.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED);
      

      这确保即使我们在事务期间进行选择,我们也能够选择由不同机器在某处更新的结果。

      Apache Docs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-17
        • 2012-03-27
        • 1970-01-01
        • 2019-09-30
        • 2014-09-24
        • 2014-12-12
        • 2010-12-06
        相关资源
        最近更新 更多