2014-11-03 71 views
0

我正在使用AWS RDS(特别是mysql),我正在使用SQL Workbench/J作为GUI工具。用Java编写的,在这里我的服务器端代码是我的代码:Java mysql AWS执行成功,然后选择不返回新值

插入代码:

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. 

不幸的是,返回的朋友不会返回新的插入值'朋友'。

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

我到现在为止试过了什么?

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

回答

0

我的问题是一样简单和恼人的,因为可以 - 显然,我不得不关闭工作台GUI从代码,这是怎样的工作时有线,并且需要Workbench/AWS团队进行更深入的调查。

无论如何,关闭此界面后,一切工作。

感谢您的帮助!

1

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

此外,如果您的选择只是为了得到一个新的密钥不要忘记你可以拨打电话myStatement.getGeneratedKeys()与更新。

+0

是的我试过第一个建议没有运气,连接已经设置为自动提交。 select语句由我在所描述的流程中忽略的代码的不同部分调用,只是为了使其更清晰。 – 2014-11-03 09:46:29

1

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

的executeUpdate(字符串SQL)执行给定的SQL语句,其可以 为INSERT,UPDATE,或DELETE语句或SQL语句 返回任何诸如SQL DDL语句。

因此改变你的选择代码如下:

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

这是我在附加到这个问题的代码中所犯的一个错误,我会立即改变它。在我的代码中,我使用insert语句的executeUpdate,但select是executeQuery – 2014-11-03 09:49:09