gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:17:04 25 4
gpt4 key购买 nike

我正在尝试通过 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com