每次程序重新运行时都承诺丢失的SQLite数据库

时间:2019-07-27 02:20:31

标签: sqlite jdbc

我有一个嵌入式SQLite数据库,它在每次运行程序时都会丢失其所有数据。

对于应用程序的实例,数据插入工作正常。插入数据后,我尝试查询数据库,并且数据按预期显示。

在应用程序关闭后查询SQlite数据库也显示数据仍存储在数据库中。

因此,我认为问题不在于JDBC的连接或提交部分,因为应用程序显然可以连接并提交至SQLite数据库。

但是,重新启动应用程序后,SQLite数据库中的所有数据都会丢失。仅擦除数据,架构很好。

更新 正如Mark所指出的,我的确将SQLite数据库存储在资源文件夹中。构建后,资源文件夹被打包到一个jar中,这是我遇到问题的原因,因为jar文件是只读的。编译我的构建时产生的jar确实遇到了问题,每次执行时都会崩溃。

但是,丢失数据的嵌入式SQLite数据库是在我的project / build / resources / main / finDB.sqlite文件路径中找到的数据库。因此,我认为这不是个问题。如果有帮助,我将使用gradle应用程序插件提供的“运行”任务来运行应用程序。我不是在重新编译项目,而是在运行和关闭已编译的项目。在运行和关闭的这两个周期之间,我的数据库将丢失之前刚刚运行的项目实例添加的所有数据。

我编写的代码

这是我用来创建与SQLite数据库的连接的实用程序类。


    public class DBUtil {
        private String getFileFromResources(String fileName) {
            URL resource = this.getClass().getClassLoader().getResource(fileName);
            if (resource == null) {
                throw new IllegalArgumentException("file is not found!");
            } else {
                return resource.getFile();
            }
        }

        public Connection getConnection() throws SQLException {
            String fileName = getFileFromResources("sql/finDB.sqlite");
            String connectionURL = "jdbc:sqlite:" + fileName;
            return DriverManager.getConnection(connectionURL);
        }
    }

这是我编写的用于连接插入事务并将其提交到SQLlite数据库的插入方法的示例。


    public static void addAccountGroup(String accountGroup) {
            String sql = "INSERT INTO ACCOUNTS_GROUP (ACCOUNTS_GROUP_NAME) VALUES (?)";
            try  (PreparedStatement preparedStatement = new DBUtil().getConnection().prepareStatement(sql)) {
                preparedStatement.setString(1,accountGroup);
                preparedStatement.executeUpdate();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }

0 个答案:

没有答案