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