使用Jooq设置字符数组而不是字符串

时间:2017-10-18 17:10:25

标签: java arrays string jooq

我有一个设置敏感信息的Jooq更新查询。敏感信息是char [],然后我用Arrays.fill(characterArray,'0')将其归零。

为了通过Jooq设置该值,我必须将该字符数组转换为一个首先会破坏字符数组目的的String,因为它会在内存中创建一个不可变的String,我会在那里受垃圾收集的支配。

Jooq有没有办法将该值设置为字符数组而不首先将其转换为String?

1 个答案:

答案 0 :(得分:1)

这里适当的方法是为您的VARCHAR列(jOOQ视为String)和您的"用户定义类型"创建data type bindingchar[]。实施将遵循:

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执行。