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你应该做另一个问题,但我添加了一个链接来回答你的编辑。如果所有问题都回答了你的问题,不要忘了接受答案。