结果集为空但SQL语句正确

huangapple go评论128阅读模式
英文:

ResultSet Empty but SQL Statement correct

问题

我正在尝试从我的表中选择一列,但结果集始终为空。
当我在IntelliJ数据库工具中尝试时,SQL语句按预期工作,甚至我使用System.out.print将其打印出来并放入SQL查询工具中时也可以正常工作。

由于结果集为空,我一直收到错误消息"ResultSet is not positioned correctly"(我尝试写rs.next但它不起作用)

以下是代码:

  1. private final String HELP_STATEMENT_STR =
  2. "SELECT a1atnr " +
  3. "FROM market.a1 INNER JOIN market.asol ON a1atnr = asoatnr " +
  4. "WHERE asoatikid = ?;";
  5. private PreparedStatement HELP_STATEMENT;
  6. public List<Long> deleteArticle(String ext_article_nr) throws SQLException {
  7. if (HELP_STATEMENT == null){
  8. HELP_STATEMENT = database.getConnection().prepareStatement(HELP_STATEMENT_STR);
  9. }
  10. HELP_STATEMENT.setString(1, ext_article_nr);
  11. System.out.println(HELP_STATEMENT.toString());
  12. ResultSet rs = HELP_STATEMENT.executeQuery();
  13. if (!rs.next()){
  14. System.out.println("ResultSet is empty");
  15. } else {
  16. System.out.println("ResultSet is not empty");
  17. }
  18. String nr = rs.getString("a1atnr");
  19. }

我还尝试使用普通的Statement而不是prepareStatement,但结果完全相同。

任何帮助将不胜感激。

英文:

I'm trying to SELECT a column from my table, but the ResultSet is always empty.
The SQL Statement works as expected when I try it in the IntelliJ database tool and I even printed it out using System.out.print and put it into the sql query tool and it works.

Because the ResultSet is empty I keep getting the error "ResultSet is not positioned correctly" (I tried writing rs.next but it didn't work)

Here is the code

  1. private final String HELP_STATEMENT_STR =
  2. &quot;SELECT a1atnr &quot; +
  3. &quot;FROM market.a1 INNER JOIN market.asol ON a1atnr = asoatnr &quot; +
  4. &quot;WHERE asoatikid = ?;&quot;;
  5. private PreparedStatement HELP_STATEMENT;
  6. public List&lt;Long&gt; deleteArticle(String ext_article_nr) throws SQLException {
  7. if (HELP_STATEMENT == null){
  8. HELP_STATEMENT = database.getConnection().prepareStatement(HELP_STATEMENT_STR);
  9. }
  10. HELP_STATEMENT.setString(1, ext_article_nr);
  11. System.out.println(HELP_STATEMENT.toString());
  12. ResultSet rs = HELP_STATEMENT.executeQuery();
  13. if (!rs.next()){
  14. System.out.println(&quot;ResultSet is empty&quot;);
  15. } else {
  16. System.out.println(&quot;ResultSet is not empty&quot;);
  17. }
  18. String nr = rs.getString(&quot;a1atnr&quot;);
  19. }

I also tried using a normal Statement instead of a prepareStatement but the results are exactly the same

Any help would be appreciated

答案1

得分: 2

  1. 你可以尝试在FROM子句中为这两个表添加别名,并在ON子句中使用它们,就像这样:

"SELECT a1atnr " +
"FROM market.a1 a1Table INNER JOIN market.asol asolTable " +
"ON a1Table.a1atnr = asolTable.asoatnr " +
"WHERE asoatikid = ?;";

  1. ```
  2. <details>
  3. <summary>英文:</summary>
  4. could you try adding aliases for the two tables in your FROM clause and use them in the ON clause like this:

"SELECT a1atnr " +
"FROM market.a1 a1Table INNER JOIN market.asol asolTable " +
"ON a1Table.a1atnr = asolTable.asoatnr " +
"WHERE asoatikid = ?;";

  1. </details>

huangapple
  • 本文由 发表于 2023年7月12日 21:21:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/76671060.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定