【发布时间】:2016-03-18 10:03:35
【问题描述】:
真的把我吓坏了。在我的代码中,我交出一个生成的 uuid 作为我的私钥。现在我想从一个只有一个值的表中进行选择(avg_distance_as)。当我使用修复 uuid 编写语句时,一切正常。但是因为我想用我当前的 uuid 获取特定的行,所以我也想把它放在我的语句中。
soooo no error nothing - 他甚至没有在 rs.next 循环中调用 syso。这个正在工作:
public int getavgDistanceAs(String uuid) {
try {
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:test.db");
statement = con.prepareStatement("Select avg_distance_as, UUID from avg_distance");
System.out.println(uuid);
statement.setString(1, uuid);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
System.out.println(rs.getDouble(1));
System.out.println("test");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
statement.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}
但这个不是,它看起来非常相似:
statement = con.prepareStatement("Select avg_distance_as, UUID from avg_distance where UUID = ?");
statement.setString(1, uuid);
如果有人能帮忙就太好了:)
【问题讨论】:
-
你的说法完全不同。第一个没有
WHERE子句,所以除非表是空的,否则你会得到一个带有行的ResultSet。您的第二条语句带有一个参数,因此如果您没有得到结果,我会假设您正在使用数据库中不存在的UUID进行搜索。 -
我很惊讶您的第一个示例有效,因为调用
setString(1, ..) when you don't have a parameter placeholder should throw anSQLException`(虽然可能是 SQLite JDBC 驱动程序的问题)。 -
@MarkRotteveel - 我使用 sqlite-jdbc-3.8.11.2.jar 对第一个 PreparedStatement(无 WHERE 子句)的测试在
.setString语句上给了我一个 ArrayIndexOutOfBoundsException。尽管问题说了什么,第二个例子工作正常。所述问题不可重现。 -
对不起,我把你的说法搞混了。为了清楚起见:pastebin.com/UKzc7NJa# this on 不会进入循环内部 - 尽管存在 uuid。那是我的问题。 @MarkRotteveel:你是对的 - 它只有在没有“setString”的情况下才能工作。我只是想提一下……