Java JDBC Sqlite rs.next-当PreparedStatement有变量时,不要进入rs.next-loop
这真的把我吓坏了。在我的代码中,我将生成的uuid作为私钥移交。现在,我想从一个表中选择,其中只有一个值在avg_distance_as内。当我使用修复uuid编写语句时,一切正常。但是因为我想用我当前的uuid获取特定的行,所以我也想把它放在我的语句中 soooo没有错误-他甚至没有在rs.next循环中调用syso。这一个正在工作:Java JDBC Sqlite rs.next-当PreparedStatement有变量时,不要进入rs.next-loop,java,sqlite,jdbc,Java,Sqlite,Jdbc,这真的把我吓坏了。在我的代码中,我将生成的uuid作为私钥移交。现在,我想从一个表中选择,其中只有一个值在avg_distance_as内。当我使用修复uuid编写语句时,一切正常。但是因为我想用我当前的uuid获取特定的行,所以我也想把它放在我的语句中 soooo没有错误-他甚至没有在rs.next循环中调用syso。这一个正在工作: public int getavgDistanceAs(String uuid) { try { Class.forName(
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);
如果有人能帮忙,那就太棒了:好的-明白了。。。我在计算中把顺序弄乱了@Kayaman是对的:uuid在需要的时候丢失了。你的说法完全不同。第一个没有WHERE子句,因此除非表为空,否则您将得到一个包含行的结果集。您的第二个语句使用了一个参数,因此如果您没有得到结果,我会假设您正在使用数据库中不存在的UUID进行搜索。我很惊讶您的第一个示例能够正常工作,因为调用setString1。。当您没有参数占位符时,应抛出SQLException`但SQLite JDBC驱动程序可能有问题。@markrotVeel-我对SQLite-JDBC-3.8.11.2.jar的第一个PreparedStatement no WHERE子句的测试在.setString语句上给了我ArrayIndexOutOfBoundsException。第二个例子效果不错,不管问题怎么说。所述的问题是不可复制的。Sry,我把你和混合声明混淆了。要明确的是:这个on不会进入循环内部——尽管uuid存在。这是我的问题@MarkRotterveel:你是对的-它只在没有设置字符串的情况下工作。我只是想提一下。。。