您好我有这个代码的问题,因为它似乎总是返回SQL异常。它工作了几个然后停止并回来了例外。所以我不确定是什么问题。 我试图将vld.close()改为不同的地方,所以是的。感谢
PreparedStatement vld = conn.prepareStatement("SELECT * FROM carsharing.available(?,?,?,?)");
vld.setString(1, carName);
vld.setString(2, memberUser);
vld.setTimestamp(3, new java.sql.Timestamp(startTime.getTime()));
vld.setTimestamp(4, new java.sql.Timestamp(endTime.getTime()));
System.out.println("test1");
ResultSet rset = vld.executeQuery();
System.out.println("test2");
rset.next();
int num = rset.getInt("num");
boolean valid = rset.getBoolean("aval");
vld.close();
System.out.println(num);
System.out.println(valid);
答案 0 :(得分:2)
1)验证SQL
首先验证SQL是否正确?这对我来说看起来不正确。您现在尝试执行的是以下SQL:
SELECT * FROM carsharing.available(?,?,?,?)
如果要按给定名称限制结果集,则用户和时间戳SQL应如下所示:
SELECT * FROM carsharing WHERE carNameField=? AND memberUserField=? AND tsField1=? AND tsField2=?
使用正确的架构列名替换字段名称的位置。
2)结果集导航
然后,当你在执行后得到你的结果集时,你可以使用first()导航到第一个位置,它也会返回布尔值,这样你就可以检查是否有结果可用。如果你想要获取更多的值,你需要一个循环。
//...
ResultSet rset = vld.executeQuery();
if( rset.first()){
int num = rset.getInt("num");
boolean valid = rset.getBoolean("aval");
}
//...
答案 1 :(得分:0)
你需要迭代结果集。你不能这样
rset.next();
代码是
ResultSet rset = vld.executeQuery();
System.out.println("test2");
while(rset.next()) {
int num = rset.getInt("num");
boolean valid = rset.getBoolean("aval");
System.out.println(num);
System.out.println(valid);
}
vld.close();