DAOメソッドで人々がfinally{}
を使用するデータベース接続を閉じる例がたくさんありましたが、私の場合、DAOメソッド(例:insertUsers())では、呼び出されたメソッドに例外がスローされます。この場合、どうやって接続を閉じることができますか?Java SQLite - 接続を閉じるには?
SELECT
+ INSERT
にしようとすると、「SQLiteException - データベースはロックされています」というエラーが表示されます。
ここに私のコードです:
DAO
public static Connection con = null;
private static boolean hasData = false;
private void getConnection() throws ClassNotFoundException, SQLException {
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:ProjFarmacia.db");
initialise();
}
private void initialise() throws SQLException {
if(!hasData){
hasData = true;
Statement state = con.createStatement();
ResultSet res = state.executeQuery("SELECT name FROM sqlite_master WHERE type='table' AND name='caixa'");
if(!res.next()){
Statement state2 = con.createStatement();
state2.execute("CREATE TABLE caixa(id integer, timestamp integer, valorTotal double, notas1 integer, notas2 integer,"
+ " notas5 integer, notas10 integer, notas20 integer"
+ "notas50 integer, notas100 integer, moedas1 integer, moedas5 integer, moedas10 integer, moedas25 integer"
+ "moedas50 integer, moedas1R integer, primary key(id));");
}
}
}
public ResultSet getCaixaByDate(long timestamp) throws ClassNotFoundException, SQLException{
if(con == null){
getConnection();
}
Statement state = con.createStatement();
ResultSet res = state.executeQuery("SELECT * FROM caixa WHERE timestamp=" + "'" + timestamp + "'" + ";");
return res;
}
public void createCaixa(Caixa caixa) throws ClassNotFoundException, SQLException{
if(con == null){
getConnection();
}
PreparedStatement prep = con.prepareStatement("INSERT INTO caixa VALUES(?,?);");
prep.setLong(1, caixa.getTimestamp());
prep.setDouble(2, caixa.getValorTotal());
con.close();
}
メインアプリケーション
try {
ResultSet rs = caixaDAO.getCaixaByDate(timestamp);
//If not exists in database
if(!rs.next()){
Caixa caixa = new Caixa();
caixa.setTimestamp(timestamp);
caixa.setValorTotal(venda.getValorDaVenda());
//Inserting new Caixa
caixaDAO.createCaixa(caixa);
}else{
System.out.println("Caixa already created!!!");
}
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(VendaMedicamento.class.getName()).log(Level.SEVERE, null, ex);
}
また、エラーを修正する方法を知りたいですか? – XtremeBaumer
あなたのコードは間違いがひどいです。より多くのコードを書く前に、チュートリアル(または2つ)を読むことをお勧めします。あなたはそのような非標準コードを書くのに苦労します。 – Kayaman
@Kayamanはあなたの意見を分かち合うことに感謝しますが、何の助けもないコメントであるので無視しなければなりません。 –