在 jooq 中使用数组参数调用 postgres 函数

Call postgres function with array param in jooq

如何在 postgreSQL 函数中使用 jooq 在本机 SQL 中传递数组参数?

动态编译的函数名,我想在字符串中调用:

dsl().execute(someFunction + "(?)", Arrays.asList(1, 2, 3));

函数接受类型为 integer[]

的参数

我找到了丑陋的解决方案:

dsl().execute(someFunction + "(string_to_array(?, ',')::INT[])", Joiner.on(",").join(1, 2, 3));

我正在使用 jooq 版本 3.6.4

不要使用字符串连接

您的两次尝试都使用字符串连接来生成函数调用:someFunction + "(?)"。虽然您可能完全控制这些字符串,但添加不必要的字符串总是存在轻微的风险:

  • 语法错误
  • SQL 注入漏洞

最好使用 jOOQ 的内置模板机制:

dsl().execute("{0}({1})", DSL.name("someFunction"), bindValue);

此处记录了模板机制:http://www.jooq.org/doc/latest/manual/sql-building/queryparts/plain-sql-queryparts

传递数组绑定变量

很简单。只需将绑定变量作为数组(而不是列表)传递到 Java 中。例如:

dsl().execute("someFunction({0})", DSL.val(new Integer[] { 1, 2, 3 }));