【问题标题】:Caching data on JDBC在 JDBC 上缓存数据
【发布时间】:2012-11-06 22:59:52
【问题描述】:

我使用 java swing 创建了一个数据库应用程序。每当我调用 find 类时,我的程序都会从​​数据库中检索数据。 find 类只是简单地创建一个语句,获取当前的数据库连接,然后执行该语句。从数据库返回的值将被放置在一个 ResultSet 上,然后将显示在一个 jTable 上。问题是这样的:

我打开了查找类,结果显示出来了。然后我转到 SQLyog 或 HeidiSQL(用于操作数据库的应用程序),编辑程序中显示的值,然后保存。我回到我的程序,关闭查找类然后重新打开它,我仍然得到以前的数据,而不是编辑过的数据。请帮忙。查找类打开后必须显示更新。我获取更新数据的唯一方法是关闭我的整个程序然后重新打开它,我不想这样做。

编辑: 这是我尝试过的。基本上,一旦我的程序第一次创建到数据库的连接,我将它保存到另一个类,这使得连接始终打开(我假设)。因此,每当我想创建查询时,我都会调用该类来获取连接。我现在所做的是,在从 find 类执行查询之后,我关闭了与 .close() 函数的连接。它有效,但我真的需要每次都关闭连接吗?同样,这只是一个桌面应用程序,而不是 Web 程序。

【问题讨论】:

  • 您确定这些工具确实提交了对您的数据所做的更改吗?
  • 您是否在数据库中提交了更改?
  • 是的。我获取更新数据的唯一方法是退出整个程序并重新打开它,我不想这样做。
  • 查找类只是我程序的一部分。它只是搜索值,然后将数据显示给用户。整个程序会在数据库中添加、编辑和删除值。
  • 在访问 Find 类时,您似乎没有执行 SELECT 语句。你是怎么打开的?

标签: java database jdbc resultset


【解决方案1】:

我认为您遇到了事务隔离问题。某些驱动程序在获取连接时会启动隐式事务,因此您当时会看到数据库的快照。您可能需要一个 READ COMMITTED 级别,它应该显示应用了所有已提交事务的数据库。

【讨论】:

    【解决方案2】:

    看起来您尚未提交编辑,或者您需要通过刷新查询来刷新数据。

    【讨论】:

    • 提交是在 SQLyog 或 HeidiSQL 上进行的。我确定这一点,因为我同时打开它们。我在 HeidiSQL 中对其进行编辑,然后检查是否使用 SQLyog 更新了这些值并进行了更新。但对于我的程序,它不是。我还检查了 find 类是否正确执行了 SELECT 语句,是的,确实如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多