JOOQ和PostgreSQL - 使用bytea参数调用存储过程

时间:2015-12-17 13:03:25

标签: java sql postgresql jooq

我在postgresql中有一个玩具存储过程。

CREATE FUNCTION foo(bar bytea) RETURNS BOOLEAN AS
$$
BEGIN
    RETURN TRUE;
END;
$$
LANGUAGE plpgsql;

由于我想从Java代码中调用它,因此我使用jooq-codegen-maven插件生成了表示数据库例程的Java对象。我打电话的时候:

def select = DSL.select(Routines.test([1,2,3] as byte[]))
context.batch(s).execute()

由于缺少程序匹配名称和参数列表而导致失败。类型。事实证明,jooq生成了错误的查询:

select "public"."test"(X'010203');

function public.test(bit) does not exist

应该是:

select "public"."test"('\x010203');

或:

select "public"."test"(E'\\01\\02\\03'::bytea);

您对解决方法有什么建议吗?唯一的要求是最后有bytea,因为我想插入一行bytea列  进入数据库。

类似的情况适用于smallint。 Jooq生成不正确的查询(不转换值::smallint),因此postgresql因类型不匹配而无法匹配任何过程(给定整数,但预期为smallint)。这种情况可以很容易地解决"通过将参数类型更改为int并在程序正文中进行处理。

0 个答案:

没有答案
相关问题