JDBC返回一個空的ResultSet(rs.isBeforeFirst()== true)我試圖爲我的Web服務完成一個數據庫訪問方法。服務和數據庫訪問方法適用於數據庫中的所有其他表,但這種特定的方法不適用。當我查詢數據庫時,ResultSet
總是返回空(意思是isBeforeFirst() == true
)。雖然表不是空的
經過多次嘗試之後,我將查詢切換到一個簡單的SELECT * FROM VIDEOS
,以查看問題是否與我輸入的數據和我在查詢中使用的數據之間存在差異,但即使這個簡單的查詢選擇表中的所有項目也沒有不會返回任何結果。
這是我使用從DB拉動信息的方法:
public static Object[] getVideo(String phonenum, String timeStamp)
{
Connection c = null;
Statement stmt = null;
Object[] result = null;
try
{
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:lineappDB.db");
c.setAutoCommit(false);
System.out.println("Opened database successfully");
stmt = c.createStatement();
String query = String.format("SELECT * FROM VIDEOS");
ResultSet rs = stmt.executeQuery(query);
// If no data was found
if (rs.isBeforeFirst())
{
rs.close();
stmt.close();
c.close();
return null;
} else
{
result = new Object[6];
while (rs.next())
{
result[0] = rs.getInt(1);
result[1] = rs.getString(2);
result[2] = rs.getString(3);
result[3] = rs.getString(4);
result[4] = rs.getString(5);
result[5] = rs.getInt(6);
}
}
rs.close();
stmt.close();
c.close();
} catch (Exception e)
{
try
{
if (!c.isClosed())
{
c.commit();
c.close();
}
} catch (Exception ex)
{
System.err.println(ex.getClass().getName() + ": " + ex.getMessage());
return null;
}
System.err.println(e.getClass().getName() + ": " + e.getMessage());
return null;
}
System.out.println(String.format("Succesfully pulled from DB - %s %s", result[1], result[2]));
return result;
}
任何幫助將是非常讚賞。
CLARIFICATION編輯: 該方法是一個Web服務的一部分,該服務從數據庫中提取某個視頻的路徑,以發送給客戶端。這些視頻由客戶端上傳,然後存儲在文件系統中,其路徑存儲在數據庫中。
一旦我看到DB工作,我將用SELECT * FROM VIDEOS WHERE PHONENUM = '%s' AND DATETIME = '%s'", phonenum, timeStamp
替換SELECT * FROM VIDEOS
,以便查詢提取我需要的確切項目。
我會把所有的'.close()'命令插入到'finally'阻止 – David 2014-10-12 11:42:00
@大衛感謝您的建議,我會這樣做。 – 1CodeRed 2014-10-12 11:45:53
@David當我把'.close()'命令放在'finally'塊中時,eclipse大聲說我沒有處理異常。所以我需要再次使用雙重try catch塊。你能展示一個正確的例子嗎? – 1CodeRed 2014-10-12 11:52:33