在两次执行之间持久保存的sqlite内存数据库

时间:2019-12-18 01:05:55

标签: sqlite jdbc in-memory-database

在下面的代码中,我期望按照https://www.sqlite.org/inmemorydb.html

所述,在连接关闭时删除内存数据库。
public static void main(String[] args) throws SQLException {
    var connection = DriverManager.getConnection("jdbc:sqlite::memory");
    var statement = connection.createStatement();
    statement.execute("CREATE TABLE IF NOT EXISTS tab (name);");
    statement.execute("INSERT INTO tab (name) VALUES ('foo');");
    var result = statement.executeQuery("SELECT * from tab;");
    while (result.next()) {
        System.out.println(result.getString("name"));
    }
    connection.close();
}

实际上,我看到的是,每次运行此代码时,表中都会有一行额外的行,这表明数据库在两次调用之间是持久的。为什么会这样?

1 个答案:

答案 0 :(得分:0)

原来这是一个简单的错误。连接字符串应为:

var connection = DriverManager.getConnection("jdbc:sqlite::memory:");

缺少最后一个:意味着它正在将其解释为一个名为“内存”的数据库。