java - HSQLDB 不保存通过 Java 进行的更新

标签 java hsqldb

我正在尝试通过 Java 将记录添加到 HSQL 数据库中的表中。

我有一个通过 OpenOffice 创建的 HSQL 数据库,将 .odb 文件重命名为 .zip 并将 SCRIPT 和 PROPERTIES 文件(目前没有数据)提取到我的 java 项目中的文件夹“\database”文件夹。

该表在 SCRIPT 文件中如下所示

CREATE CACHED TABLE PUBLIC."Season"("SeasonID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,"Year" VARCHAR(50))

到目前为止一切都很好,数据库通过以下代码在 Java 中连接得很好:

public void connect(){
    try{
        String dbName = "database\\db";

        con = DriverManager.getConnection("jdbc:hsqldb:file:" + dbName, // filenames prefix
                "sa", // user
                "");  // pass

    }catch (Exception e){
            e.printStackTrace();
    }
}

我有以下代码将记录插入“季节”。

public void addSeason(String year){

        int result = 0;

        try { 
            stmt = con.createStatement(); 
            result = stmt.executeUpdate("INSERT INTO \"Season\"(\"Year\") VALUES ('" + year + "')"); 
            con.commit(); 
            stmt.close();
        }catch (Exception e) { 
            e.printStackTrace(); 
        } 

        System.out.println(result + " rows affected");
}

我有一个名为 printTables() 的最终函数:

private void printTables(){
    try { 
        stmt = con.createStatement(); 
        ResultSet rs = stmt.executeQuery("SELECT * FROM \"Season\"");
        System.out.println("SeasonID\tYear");
        while(rs.next()){
            System.out.println(rs.getInt("SeasonID") + "\t\t" + rs.getString("Year"));
        }
    }catch (Exception e) { 
        e.printStackTrace(System.out);
    }
}

现在,如果我运行这一系列函数:

connect();
printTables();
addSeason("2010");
printTables();

我得到这个输出:

SeasonID    Year
1 rows affected
SeasonID    Year
0       2010

现在,当我关闭程序并再次启动它时,我会得到完全相同的输出。因此,第一次运行期间所做的更改尚未保存到数据库中。我有什么遗漏的吗?

最佳答案

这是由hsqldb中的写入延迟参数引起的,默认情况下从内存到文件有500ms的延迟同步。

所以当它设置为 false 时问题就解决了

statement.execute("设置文件写入延迟FALSE");

或根据您的应用行为进行设置。

关于java - HSQLDB 不保存通过 Java 进行的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46097018/

相关文章:

java - 无法将 Java ap 连接到在线 MySQL 数据库 - 错误的 URL

jboss5.x - 意外 token UNIQUE,需要在语句 [SET DATABASE UNIQUE] 中进行 COLLATION

hsqldb - 使用hsqldb时缓存的表不是缓存而是在内存中

java - 为什么这段代码在我的系统上运行良好并在 HackerRank 中抛出 EmptyStackException

java - 尝试从 sqlite 调用 user_id

java - 当 ServerSocket 在 accept() 上阻塞时通知另一个线程

java - 如何从 JAVA 中的两个集合中获取不匹配的字符串?

java - 在 Java 中选择 Firebird 和 HSQLDB

java - 在 hsqldb 中禁用主机名验证

java - 如何将 HSQL DB 与 Java 应用程序集成