我有一个设置敏感信息的Jooq更新查询。敏感信息是char [],然后我用Arrays.fill(characterArray,'0')将其归零。
为了通过Jooq设置该值,我必须将该字符数组转换为一个首先会破坏字符数组目的的String,因为它会在内存中创建一个不可变的String,我会在那里受垃圾收集的支配。
Jooq有没有办法将该值设置为字符数组而不首先将其转换为String?
答案 0 :(得分:1)
这里适当的方法是为您的VARCHAR
列(jOOQ视为String
)和您的"用户定义类型"创建data type binding。 char[]
。实施将遵循:
public class CharArrayBinding implements Binding<String, char[]> {
// ^^^^^^ ^^^^^^
// JDBC / database type ------------------------+ |
// user facing type --------------------------------+
@Override
public void set(BindingSetStatementContext<char[]> ctx) {
ctx.statement().setCharacterStream(
ctx.index(),
new java.io.CharArrayReader(ctx.value())
);
}
...
}
That binding could then be associated with your relevant columns by the code generator
现在,有更多的方法可以实现,但上面已经展示了如何在这里进行的想法。
我不完全理解您的要求,因此我选择的CharArrayReader
可能仍然不适合您的需求。此外,无法保证您的JDBC驱动程序可能也不会执行一些额外的分配,这可能会也可能不会影响您的要求。我个人更喜欢将加密用于这些目的,但同样,这可能并不适合您的需求。
然而,通过使用数据类型绑定,您可以覆盖jOOQ的内部结构,并且在绑定变量上不会有任何String
分配,由jOOQ执行。