0
我在解決SQLite和Java的問題。Java - 鎖定SQLite數據庫
我不知道是否因爲我離開了一些開放的連接(或PreparedStatement/ResultSet),或者是因爲我以錯誤的方式處理了連接,但是這段代碼讓我很難過去2天。
我試圖讓所有客戶註冊getClientes()方法,這就是當我得到「數據庫文件鎖定」錯誤。
我創建了上面的類來創建連接到SQLite的DB:
public class ConnectionFactory
{
public Connection getConnection()
{
Connection c = null;
try
{
System.out.println("Conectando ao banco de dados...");
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:src/lp2/database/rivieraresort.db");
System.out.println("Conectado com sucesso!");
}
catch(Exception e)
{
e.printStackTrace();
}
return c;
}
}
而下面的一個處理DB本身
public class RivieraDB
{
public Quarto buscarQuarto(int contratoID) throws Exception
{
Quarto quartoEncontrado = null;
Connection c = new ConnectionFactory().getConnection();
c = new ConnectionFactory().getConnection();
String query = "SELECT * FROM quartos WHERE contrato_id = ?";
PreparedStatement pstmt = c.prepareStatement(query);
pstmt.setInt(1, contratoID);
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
String tipo = rs.getString("tipo");
int camasExtras = rs.getInt("camas_extras");
double preco = rs.getDouble("preco");
quartoEncontrado = new Quarto(tipo, camasExtras, preco);
}
rs.close();
pstmt.close();
c.close();
return quartoEncontrado;
}
public Contrato buscarContrato(int contratoID) throws Exception
{
Contrato contratoEncontrado = null;
Connection c = new ConnectionFactory().getConnection();
Quarto quartoAssociado = buscarQuarto(contratoID);
c = new ConnectionFactory().getConnection();
String query = "SELECT * FROM contratos WHERE id = ?";
PreparedStatement pstmt = c.prepareStatement(query);
pstmt.setInt(1, contratoID);
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
String inicioContrato = rs.getString("data_inicio");
int tempo = rs.getInt("tempo");
contratoEncontrado = new Contrato(quartoAssociado, inicioContrato, tempo);
}
rs.close();
pstmt.close();
c.close();
return contratoEncontrado;
}
public ArrayList<Cliente> getClientes() throws Exception
{
ArrayList<Cliente> clientesEncontrados = new ArrayList<Cliente>();
Cliente clienteEncontrado = null;
Connection c = new ConnectionFactory().getConnection();
String query = "SELECT * FROM clientes";
PreparedStatement pstmt = c.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
String nome = rs.getString("nome");
String cpf = rs.getString("cpf");
String nascimento = rs.getString("nascimento");
String endereco = rs.getString("endereco");
String cartao = rs.getString("cartao");
int contratoID = rs.getInt("contrato_id");
boolean statusHospedagem = rs.getBoolean("status_hospedagem");
clienteEncontrado = new Cliente(nome, cpf, nascimento, endereco);
clienteEncontrado.setCartao(cartao);
clienteEncontrado.setContrato(buscarContrato(contratoID));
clienteEncontrado.setEstaHospedado(statusHospedagem);
clientesEncontrados.add(clienteEncontrado);
}
rs.close();
pstmt.close();
c.close();
return clientesEncontrados;
}
}
的「[SQLITE_BUSY]數據庫文件被鎖定(數據庫被鎖定)「錯誤只會在我嘗試使用getClientes()方法時發生。
任何想法?
請總結一下或者我們:1)你想用代碼做什麼2)你看到的是什麼? 3)是什麼觸發的? 4)當你搜索錯誤信息5)其他研究或你試圖讓它工作的東西時發生了什麼。 – 2015-02-09 03:45:12
1)試圖使用getClientes()方法獲取在表中註冊的所有客戶機2)當我嘗試使用getClientes()方法時,我得到「數據庫文件被鎖定」錯誤3)這就是爲什麼我來到這裏4)沒有找到一個類似的案例 – motionCrazy 2015-02-09 04:01:20
你剛告訴我的這些東西應該是你原來的問題的一部分 - 你能編輯你的問題並將它們添加到那裏嗎? (如果有人可能會掃描你的問題認爲你只是不完整,並且沒有閱讀評論) – 2015-02-09 04:02:12