2012-05-31 68 views
0

嗨我有這個代碼的問題,因爲它似乎總是返回SQL異常。這是工作了幾個去,然後停下來,除了例外。所以我不確定有什麼問題。 我曾嘗試將vld.close()更改爲在不同的地方。由於ResultSet定位不正確,也許你需要調用下一個

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

是,即使是一個有效的SQL? – adarshr

+0

是的。它實際上工作之前,然後停止工作... –

+4

和什麼是例外? – mprabhat

回答

2

1)驗證SQL

您可以驗證先說SQL是正確的?它看起來不正確。你現在試圖執行是下面的SQL:

SELECT * FROM carsharing.available(?,?,?,?) 

如果您想通過給定的名稱,以限制結果集,用戶和時間戳SQL應該像:

SELECT * FROM carsharing WHERE carNameField=? AND memberUserField=? AND tsField1=? AND tsField2=? 

在這裏您將更換帶有正確列名稱的字段名稱用於您的模式。

2)結果集導航

然後,當你執行後,有你的結果集,你可以先用()導航到第一位置,並且它也返回布爾所以你可以檢查是否有甚至可用結果。如果你想獲取更多的值,你需要一個循環。

//... 
ResultSet rset = vld.executeQuery(); 
if(rset.first()){ 
    int num = rset.getInt("num"); 
    boolean valid = rset.getBoolean("aval"); 
} 
//... 
+0

謝謝,這是一個SQL問題,而不是Java –

0

U需要迭代結果集。 ü只是不能作爲 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(); 
相關問題