我正在使用帶有java的sqlite驅動程序。正如你所知道的一般順序是在關閉後獲取結果
Create Statement
Execute Statement
Get ResultSet
Process Results
close ResultSet
close statement
的問題是,所有的上面是一個方法,我想調用者得到的結果並對其進行處理。但是,由於結果在方法結束時返回,那麼語句和結果集將關閉。
我能想到的唯一工作就是讓RS和Stmnt成爲一個類變量,並讓調用者關閉它們,但如果它是多線程環境,則會造成問題。
什麼是推薦的方式來實現我想要的?有了這個主叫
public void query(String query, Consumer<ResultSet> consumer) {
// Create Statement
try (Statement stmt = ...) {
// Execute Statement
ResultSet rs = ...
consumer.accept(rs);
}
}
可以從結果中提取的數據集和你: 感謝
public ResultSet runQuery(String sql) {
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
rs.close();
st.close()
} catch (SQLException ex) {
Logger.getLogger(DatabaseHelper.class.getName()).log(Level.SEVERE, null, ex);
}
return rs
}
從另一個文件
private void displayListOfEmployee(){
String sql = "Select * from employee";
ResultSet rs = DB.getInstance().runQuery(sql);
while(rs.next()!=null){
System.out.println(.....); // display value of column
}
}
你應該問問自己,你是否真的想要這樣包裝JDBC,因爲它違背瞭如何使用JDBC(你似乎正在使用'conn','st'和'rs'這是一個意外的字段等待在併發使用下發生)。 –