Java 为什么这个查询不起作用?

Java 为什么这个查询不起作用?,java,sql,database,Java,Sql,Database,我正在写一个非常简单的查询。但是我找不到错误。代码如下: con = DBConnect.connect(); try { PreparedStatement query = (PreparedStatement) con.prepareStatement("SELECT * FROM accounts where iban=?"); query.setString(1, iban); ResultSet result = (ResultSet) query.ex

我正在写一个非常简单的查询。但是我找不到错误。代码如下:

 con = DBConnect.connect();

 try {
    PreparedStatement query = (PreparedStatement) con.prepareStatement("SELECT * FROM accounts where iban=?");
    query.setString(1, iban);

    ResultSet result = (ResultSet) query.executeQuery();
    double oldBalance;
    } catch (SQLException e) {
         System.out.println(e);
    }
我确信表的名称是accounts,并且存在一个名为iban的varchar类型的列。我进行了调试,因此我确信
query.setString(1,iban)行正确设置iban

但是当涉及到行
ResultSet result=(ResultSet)query.executeQuery()时它突然跳到最后一行,该行由“}”组成。它甚至没有进入捕捉块,因此我看不到问题

这里怎么了,有人能告诉我吗

谢谢

编辑:看起来查询执行成功。现在,在执行命令行之后,我只需执行以下操作:

double oldBalance=result.getDouble("iban");
这给了我一个错误:

 java.sql.SQLException: Before start of result set

有人能告诉我这里的问题吗?

调试代码时,一旦进入
ResultSet result=(ResultSet)查询。executeQuery()行,因为在
try
块中不需要执行其他操作,因此如果转到下一步,它将跳到块的末尾

因此,您的查询实际上可能工作正常,您只需要在块中对其执行一些操作,因为您的
ResultSet
是在块中分配的


编辑:检查其他问题。

首先,不需要将对象强制转换为与方法返回的类型相同的类型。您的
ResultSet
PreparedStatement
强制转换是多余的。第二,您是否在连接中选择了默认数据库。您应该始终是显式的,
SELECT*fromschema.table
而不是依赖于连接指定的模式(该模式无论如何只适用于MySQL,除非它位于公共模式中)清理并重建项目。然后再次运行它。未分配您的
oldBalance
变量。在
executeQuery
行之后,它将跳转到最后一行,因为在
try
块中没有其他操作。在调用
result.getDouble()
检索下一行(第一行)之前,请确保使用
result.next()
。仅当您的问题是关于JSF或与此技术相关时,才使用JSF标记(与其他标记类似)作为建议,如果您的问题恰好是关于纯JSF(Facelets、RichFaces、PrimeFaces、OmniFaces等),最好不要添加Java标记,因为很多人不了解JSF的行为,倾向于投票支持close(或[暂停])。谢谢,这让我发疯。但是还有一件事,请你再看一次编辑的问题好吗?@iceface你应该做另一个问题,但我添加了一个链接来回答你的编辑。如果所有问题都回答了你的问题,不要忘了接受答案。