首页 > 解决方案 > 关闭后,带有 SQLite 的 Java 应用程序未在特定计算机上保存操作,.sqlite-journal 未刷新

问题描述

我制作了一个简单的应用程序,用于使用 java + sqlite(netbeans 和 sqlite studio)注册、删除和搜索用户。我在 3 台计算机上进行了测试,一切正常,但是在特定计算机上的行为是:

这只发生在这台特定的电脑上,在其他电脑上没有创建 .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 na conexão!”,因此在某些时候连接为空,这会导致错误。

标签: javasqlitenetbeans-8sqlitestudio

解决方案


推荐阅读