Jdbi: الهروب من عامل تشغيل علامة الاستفهام jsonb في postgres

تم إنشاؤها على ١٨ سبتمبر ٢٠١٥  ·  6تعليقات  ·  مصدر: jdbi/jdbi

أحاول استخدام jdbi مع postgres و jsonb لكتابة استعلام مثل هذا:

select id, data from some_table where data ? :key

لسوء الحظ ، يفسر jdbi علامة الاستفهام هذه كعنصر نائب لمتغير. كيف يمكنني الهروب من علامة الاستفهام حتى أتمكن من استخدام عامل تشغيل علامة الاستفهام postgres؟

التعليق الأكثر فائدة

تبين أن هذه مشكلة في المنبع في jdbc. لقد نفذوا طريقة للهروب منه. عليك أن تستخدم ؟؟. مثل ذلك:

select id, data from some_table where data ?? :key

ال 6 كومينتر

هل جربت الشرطة المائلة للخلف \? ؟

نعم ، أعتقد أنه كان يجب علي ذكر ذلك. كانت هذه أول غريزتي. لكن ما زلت أحصل على خطأ.

Exception in thread "main" org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: org.postgresql.util.PSQLException: No value specified for parameter 2. [statement:"select id, createdDate, data from something where data \? ?", located:"select id, createdDate, data from something where data \? ?", rewritten:"select id, createdDate, data from something where data ? ?", arguments:{ positional:{0:'pattern'}, named:{}, finder:[]}]
    at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1334)
    at org.skife.jdbi.v2.Query.fold(Query.java:173)
    at org.skife.jdbi.v2.Query.list(Query.java:82)
    at org.skife.jdbi.v2.Query.list(Query.java:75)
    at com.ngc.vault.eventer.Query.hasKey(Query.java:45)
    at com.ngc.vault.eventer.Main.main(Main.java:34)
Caused by: org.postgresql.util.PSQLException: No value specified for parameter 2.
    at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:228)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:163)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:615)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:465)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:458)
    at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1328)
    ... 5 more

تبين أن هذه مشكلة في المنبع في jdbc. لقد نفذوا طريقة للهروب منه. عليك أن تستخدم ؟؟. مثل ذلك:

select id, data from some_table where data ?? :key

استعلام Postgres
SELECT json_data FROM employee where json_data -> 'employee' @> '{"name":"Aman"}'

يعمل الاستعلام أعلاه بشكل جيد عند تشغيله في postgres. ولكن عند تشغيله باستخدام jdbctemplate ، فإنه يتسبب في حدوث خطأ.

كود جافا

String sql="SELECT json_data FROM employee where json_data -> 'employee' @> '{\"name\":\"?\"}'";

List<Map<String, Object>> emp = jdbcTemplate.queryForList(sql,param);

عند مواجهة السطر الأخير من الكود ، يظهر خطأ: - فهرس العمود خارج النطاق: 1 ، عدد الأعمدة: 0 .؛ الاستثناء المتداخل هو org.postgresql.util.PSQLException.

انها ليست قادرة على استبدال "؟" نائب.

وذلك وفقًا لمواصفات JDBC. لم يتم التعرف على علامات ? كمعلمات داخل القيم الحرفية للسلسلة.

إذا كنت بحاجة إلى إقحام معلمة في سلسلة JSON تلك ، فاستخدم التسلسل. باستخدام صيغة سلسلة Postgres ، سيبدو الاستعلام بالشكل التالي:

SELECT json_data
FROM employee
WHERE json_data -> 'employee' @> ('{"name": "' || ? || '"}')

يرجى ملاحظة أن هذا هو مشروع جدبي وليس JdbcTemplate. :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

raderio picture raderio  ·  6تعليقات

keith-miller picture keith-miller  ·  3تعليقات

electrum picture electrum  ·  3تعليقات

kkrgwbj picture kkrgwbj  ·  4تعليقات

johanneszink picture johanneszink  ·  4تعليقات