0

我正在使用 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. 通过代码插入,然后直接从数据库中选择。
4

3 回答 3

1

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

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

于 2014-11-03T09:25:30.910 回答
1

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

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

因此,如下更改您的选择代码:

ResultSet returnedFriends = myStatement.executeQuery("SELECT * FROM friends;");
于 2014-11-03T09:26:10.317 回答
0

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

无论如何,关闭此界面后,一切正常。

谢谢您的帮助!

于 2014-11-03T12:35:28.153 回答