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