Java Derby PreparedStatement不在XMLEXISTS函数内注入参数

Java Derby PreparedStatement不在XMLEXISTS函数内注入参数,java,jdbc,prepared-statement,derby,Java,Jdbc,Prepared Statement,Derby,尝试使用准备好的语句注入xmlexists函数的字符串参数时出错 Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection con = DriverManager.getConnection("jdbc:derby:c:\\mydb"); PreparedStatement st = con.prepareStatement("select * from \"Data\" where xmlexists(? passing

尝试使用准备好的语句注入
xmlexists
函数的字符串参数时出错

Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection con = DriverManager.getConnection("jdbc:derby:c:\\mydb");
PreparedStatement st = con.prepareStatement("select * from \"Data\" where xmlexists(? passing by ref \"data\")");
st.setString(1, "//*[text()[contains(., 'v1')]]");
ResultSet rs = st.executeQuery();
select *
from "Data"
where xmlexists('//*[text()[contains(., ''v1'')]]' passing by ref "data")
错误:

ERROR 42Z75: XML query expression must be a string literal. 原因可能是什么?

引自:

语法:
XMLEXISTS(xqueryStringLiteral通过REF传递xmlValueExpression[BY REF])

xqueryStringLiteral
必须指定为字符串文字。如果将此参数指定为参数、非文字的表达式或非字符串的文字(例如整数),Derby将抛出错误。xqueryStringLiteral参数还必须是XPath表达式。Derby不支持完整的XQuery,只支持XPath子集。如果无法编译或执行查询参数,Derby将抛出SQLException

听起来derby不允许在
xmlexists
函数中使用动态参数

这将是一个有趣的增强。Derby是开源的:也许你可以贡献这样一个特性!