設置
我爲我的服務器數據庫使用JDBC SQLite
。如何檢查值存在/爲什麼ResultSet在SQLite中關閉?
我所試圖做的
我要檢查,如果一個值(例如ID
或username
)在表中已經存在。
我的代碼
PreparedStatement preparedStatement = connection.prepareStatement("select * from " + tableName + " where " + columnName + "=? limit 1");
preparedStatement.setString(1, value);
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
try { // this was just for testing and is dumb because it prints an error every time the value does not exist.
// my code actually wasn't wrong. I just tested it badly ..
// it's replacable with if (resultSet.next())
resultSet.getString(1);
System.out.println("check true");
return true;
} catch (Exception e) {
e.printStackTrace();
System.out.println("check false");
return false;
}
這裏我要檢查,如果一個特定的value
在我column(Name)
已經存在於我的table
。
的問題
此代碼將總是拋出一個SQLException
: 「ResultSet的封閉」 在resultSet.getString(columnName)
。這個值是否已經存在於表格中並不重要。我的查詢也可能是錯誤的,因爲我沒有得到我應該在select
之後放置的內容。我有一次1
那裏,但每個人都使用*
爲「全部」,它沒有改變。我認真沒有得到this,因爲這對我來說太複雜,我只是想知道什麼select
後的說法有..
途徑
我嘗試了很多東西,閱讀了大量的線程,但我遇到的唯一的事情是,我需要先撥打resultSet.next()
,並且ResultSet
不會拋出ResultSet closed
例外,但它沒有改變任何東西。 如果有更好的方法來檢查表中是否存在某個值,請告訴我。
可視化
我這裏有一個表(NULL
的並不重要,他們可能是一些隨機值),我想檢查ggffvgvg
存在與否。
完整的堆棧跟蹤
java.sql.SQLException: ResultSet closed
at org.sqlite.core.CoreResultSet.checkOpen(CoreResultSet.java:69)
at org.sqlite.core.CoreResultSet.markCol(CoreResultSet.java:96)
at org.sqlite.jdbc3.JDBC3ResultSet.getString(JDBC3ResultSet.java:436)
at Database.check(Database.java:50)
at ClientHandler.run(ClientHandler.java:72)
您已將您的列名添加到單引號中,將其轉換爲字符串文字。 –
之前,我得到「列columnName不存在」異常,即使它 – creativecreatorormaybenot
我總是將ResultSet.next()調用包裝到一個if。它返回true,如果實際上有一個新的行被讀取。只有從結果集中讀取值 –