【问题标题】:Java mysql AWS execute succeed and then select does not return the new valueJava mysql AWS 执行成功然后选择不返回新值
【发布时间】:2014-11-03 09:18:26
【问题描述】:

我正在使用 AWS RDS(特别是 mysql),并且正在使用 SQL Workbench/J 作为 GUI 工具。我用 Java 编写的服务器端代码,这是我的代码:

插入代码:

try {
    Statement myStatement = insertConnectionObject.createStatement();
    myStatement.executeUpdate("INSERT INTO friends VALUES('buddy', '15', '123');");
    myStatement.close();
} catch(Exception ex) {
    // code for handling exceptions
} finally {
    myStatement.close();
    insertConnectionObject.close();
}

之后,我从同一个表中调用选择代码:

try {
    Statement myStatement = selectConnectionObject.createStatement();
    ResultSet returnedFriends = myStatement.executeQuery("SELECT * FROM friends;");
    //unfortunately, the returnedFriends will not return the new inserted value 'buddy'
} catch(Exception ex) {
    // code for handling exceptions
} finally {
    myStatement.close();
    insertConnectionObject.

很遗憾,returnedFriends 不会返回新插入的值 'buddy'。

如果我单击 SQL Workbench/J GUI 工具中的“提交任何未决的数据库更改”按钮,然后运行 ​​select 语句,将返回新值 'buddy'。

到目前为止我尝试了什么?

  1. 对插入和选择使用相同的连接对象。
  2. 在插入命令之后以及每个选择命令之后打开和关闭连接。
  3. 禁用自动提交并尝试手动提交。
  4. 通过代码插入,然后直接从数据库中选择。

【问题讨论】:

    标签: java mysql sql-workbench-j


    【解决方案1】:

    您是否在连接上尝试过setAutoCommit(true),以防万一?

    此外,如果您的选择只是为了获取新密钥,请不要忘记您可以致电 myStatement.getGeneratedKeys() 进行更新。

    【讨论】:

    • 是的,我尝试了第一个建议,但没有成功,连接已设置为自动提交。 select 语句由我在描述的流程中忽略的代码的不同部分调用,只是为了使其更清晰。
    【解决方案2】:

    您应该使用executeQuery() 来选择。 executeUpdate() 只返回 int。它应该给出一个编译时错误,你确定代码正在编译而不是运行最后一个工作版本吗?

    executeUpdate(String sql) 执行给定的 SQL 语句,它可能 是 INSERT、UPDATE 或 DELETE 语句或 SQL 语句 不返回任何内容,例如 SQL DDL 语句。

    所以改变你的选择代码如下:

    ResultSet returnedFriends = myStatement.executeQuery("SELECT * FROM friends;");
    

    【讨论】:

    • 这是我在附加到这个问题的代码中犯的一个错误,我会立即更改它。在我的代码中,我将 executeUpdate 用于插入语句,但选择的是 executeQuery
    【解决方案3】:

    我的问题既简单又烦人 - 显然,在使用代码工作时,我不得不关闭 Workbench GUI,这有点连线,可能需要 Workbench / AWS 团队进行更深入的调查。

    不管怎样,关闭这个界面后,一切正常。

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 2014-09-01
      • 2023-03-14
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      相关资源
      最近更新 更多