我制作了一个简单的应用程序,用于使用java + sqlite(netbeans和sqlite Studio)注册,删除和搜索用户。 我在3台计算机上进行了测试,并且一切正常,但是在特定计算机上,其行为是:
我打开了应用程序一次,执行了一些插入和/或删除操作,我关闭了应用程序,一切正常。
我再次打开该应用程序,进行了多次插入和/或删除,一切正常。
我再次打开,从执行任何操作的那一刻起,就会在该文件夹中创建一个.sqlite-journal文件,该文件在创建时将不再保存我所做的所有操作。我关闭了应用程序,但它仍然存在。重新打开时,更改未保存。
仅在此特定PC上会发生这种情况,在其他PC上不会创建.sqlite-journal文件,并且一切正常。
我已经在sqlite网站上阅读了此内容:
“ SQLite通常将所有内容存储在单个磁盘文件中。但是,在执行事务时,在崩溃或电源故障后回滚该事务所需的信息存储在辅助日志文件中。这些日志文件与原始数据库文件,并带有-journal或-wal后缀。
SQLite必须查看日志文件,以便从崩溃或电源故障中恢复。如果在崩溃或电源故障后移动,删除或重命名日志文件,则自动恢复将不起作用,并且数据库可能会损坏。”
我在互联网上看到,在sqlite中,所有内容都已设置为自动提交,有时可能会出错,并保存在该日记中。我已经接受了自动提交,并在每次操作后手动放入了代码来提交,但是并没有解决。
要删除的代码是(插入类似):
private void cmd_deletarintActionPerformed(java.awt.event.ActionEvent evt){
// TODO在此处添加您的处理代码:
int p = JOptionPane.showConfirmDialog(null,“Vocêrealmente quer deletar?”,“ Delete”,JOptionPane.YES_NO_OPTION);
if (p==0) {
String sql = "delete from EleitoresInterior where id=?";
try {
conn.setAutoCommit(false);
pst = conn.prepareStatement(sql);
pst.setString(1, txt_idint.getText());
pst.execute();
conn.commit();
JOptionPane.showMessageDialog(null, "Dados apagados!");
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, e);
try {
if (conn != null) {
conn.rollback();
}
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, "Problemas na conexão!");
}
}
finally{
try{
pst.close();
}
catch(Exception e){
}
}
Update_table2();
}
}
在该代码中,当我运行应用程序时,在创建日记文件后,它会显示消息“ Problemas naconexão!”,因此在某些时候该连接为空,从而导致错误。