关闭后,带有SQLite的Java应用程序未在特定计算机上保存操作,.sqlite-journal无法刷新

时间:2018-07-25 11:34:25

标签: java sqlite netbeans-8 sqlitestudio

我制作了一个简单的应用程序,用于使用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!”,因此在某些时候该连接为空,从而导致错误。

0 个答案:

没有答案