【发布时间】:2021-06-18 16:30:54
【问题描述】:
我们有一个事件系统为变更数据捕获生成数据库事件。
系统发送一个事件,其中包含带有 ? 占位符的 INSERT 或 UPDATE 语句以及与每个问号匹配的有序值数组。
我想将它用于每小时备份文件,所以如果我得到如下声明:
insert into T0(a,b,c) VALUES(?,?,?)
使用一组值 1、2 和 it's his 然后我将 a 行写入该小时的备份文件
insert into T0(a,b,c) VALUES(1,2,'it\'s his');
一些事情:
- 是否只有字符串需要转义?我们没有或不允许使用二进制列
- 是否已经有 Java 库可以做到这一点(来自 Spring 生态系统、Apache 或其他)?
- 我已经看到了用于转义 https://github.com/pgjdbc/pgjdbc/blob/master/pgjdbc/src/main/java/org/postgresql/core/Utils.java 的 Postgres JDBC 代码 - 这足够了吗?
我还考虑每小时创建一个 SQLite 数据库,写入 SQLite,然后将其转储到 hr.sql 文本文件。这样做的好处是可以利用已经投入到 SQLite 处理转义中的所有辛勤工作和思想,但如果有一种方法可以在 Java 中执行 toString 然后在文件中附加一行,那感觉就像是矫枉过正。
在使用 SQLite 时需要考虑性能,也让我对那条路线犹豫不决。
【问题讨论】:
-
JDBC 已经处理了转义。查看PreparedStatement。
-
我不想执行准备好的语句,我想将它序列化为字符串。我是否错过了准备好的语句类上的 API 来执行此操作?据我所知,您通常会拨打
executeUpdate或类似的电话……这不是我想要的。查询已经被发送到将处理它的数据库。这是数据库之外的备份解决方案...因为它没有支持我们想要对备份执行的操作。
标签: java sqlite ignite database-backups change-data-capture