我正在考虑在桌面应用程序中使用 HSQLDB 版本 1.8.x 来存储本地数据。据我所知,数据库作为一些 SQL 语句存储在磁盘上,用于创建表、插入数据等。
有没有一种简单的方法可以向用户隐藏它?我不一定需要将其完全加密,等等 - 我只是想防止临时用户简单地打开文件并查看数据库的结构。
您可以将数据库文件嵌入到 jar 文件中,并使用以下符号连接到它们:
jdbc:hsqldb:res:<path in jar>
查看 HSQLDB 指南的高级主题部分以获取更多信息。但是,我从未尝试过,所以不能 100% 确定它会起作用......
我现在采用的解决方案是调用:
db.update("SET SCRIPTFORMAT COMPRESSED;");
以人类不可读的形式存储 .script 文件,并且:
db.update("SET PASSWORD password;");
防止更精明的用户使用自己的 HSQLDB 客户端打开数据库。
不幸的是,我无法执行以下命令
db.update("SET scriptformat COMPRESSED");
并收到此错误
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: SCRIPTFORMAT
使用此命令解决了此错误
db.update("SET FILES SCRIPT FORMAT COMPRESSED");
我正在使用 HSQLDB 2.3.3