如何使用jooq在本机SQL中的postgreSQL函数中传递数组参数?
动态编译的函数名称,我想用字符串调用它:
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
答案 0 :(得分:2)
您的两次尝试都使用字符串连接来生成函数调用:someFunction + "(?)"
。虽然您可能完全控制这些字符串,但总是存在添加不必要的风险:
更好地使用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 }));