0
用意された文を使用してxmlexists
関数の文字列パラメータを注入しようとするとエラーが発生します。Derby PreparedStatementは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();
エラー:それはプリペアドステートメントずに手動で組み込まれているとき
ERROR 42Z75: XML query expression must be a string literal.
文は成功します。
select *
from "Data"
where xmlexists('//*[text()[contains(., ''v1'')]]' passing by ref "data")
どのような理由が考えられますか?
内部動的パラメータを許可しないよう
XMLEXISTS (xqueryStringLiteral PASSING BY REF xmlValueExpression [ BY REF ])
サウンド。 Derbyはオープンソースです:おそらくあなたはそのような機能を提供することができます! –