Jdbi: كيف أقوم بربط () قيمة تعداد Postgres؟ أحصل على أخطاء إذا استخدمت سلسلة

تم إنشاؤها على ٢٩ يوليو ٢٠١٦  ·  10تعليقات  ·  مصدر: jdbi/jdbi

dbi.withHandle(handle -> handle .createQuery("SELECT * FROM comment WHERE parent_type = :parentType AND parent_id = :parentId") .bind("parentType", "comment") .bind("parentId", 23) .map(Comment.class) .list());

نوع parent_type هو تعداد PostgreSQL. لا أعرف ما إذا كان هذا له علاقة بذلك ، فقد حدث فقط عندما أعمل مباشرة مع التعداد.

إليك رسالة الخطأ الخاصة بالرمز أعلاه:
org.skife.jdbi.v2.exceptions.CallbackFailedException: org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: org.postgresql.util.PSQLException: ERROR: operator does not exist: parent_type = character varying Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. Position: 41 [statement:"SELECT * FROM comment WHERE parent_type = :parentType AND parent_id = :parentId", located:"SELECT * FROM comment WHERE parent_type = :parentType AND parent_id = :parentId", rewritten:"SELECT * FROM comment WHERE parent_type = ? AND parent_id = ?", arguments:{ positional:{}, named:{parentType:'entry',parentId:1}, finder:[]}]

لاحظ كيف يحاول تغذية السلسلة غير المنسقة؟

question

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

أعتقد أنك بحاجة إلى إرسال المعلمة في جملة SQL باستخدام بناء الجملة ::<enum type name> سبيل المثال ::parent_type :

SELECT * FROM comment WHERE parent_type = :parentType::parent_type AND parent_id = :parentId

ال 10 كومينتر

أعتقد أنك بحاجة إلى إرسال المعلمة في جملة SQL باستخدام بناء الجملة ::<enum type name> سبيل المثال ::parent_type :

SELECT * FROM comment WHERE parent_type = :parentType::parent_type AND parent_id = :parentId

شكرا ، هذا نجح. هل هذا شيء متعلق بـ JDBC على وجه التحديد؟ هل تعرف أين يمكنني معرفة المزيد عن بناء الجملة حتى لا أواجه المزيد من السقطات ذات الصلة في المستقبل؟

تحرير: اكتشف NamedParameters

بناء جملة ::parent_type cast خاص بـ postgres ، على الرغم من أنه قد يتم مشاركته بواسطة أنظمة DBMS أخرى لكل ما أعرفه.

يمكنك أيضًا ربط التعداد الخاص بك كـ java.sql.Types.OTHER بدلاً من سلسلة - يتم دعم هذا أصلاً في jdbi v3 ولكن من السهل نقله إلى الإصدار 2 إذا كنت تفضله على الإرسال:
https://github.com/jdbi/jdbi/blob/jdbi3/postgres/src/main/java/org/jdbi/v3/postgres/TypedEnumArgumentFactory.java

هناك أيضًا بناء جملة محمول: CAST(? as parent_type) أو شيء من هذا القبيل ، والذي لا يتطلب الهروب من الأحرف : .

stevenschlansker ألم يزيل الإصدار 2.x الأخير الحاجة إلى الهروب من :: ؟

D'oh ، أنت على حق - ما زلت أكثر قابلية للحمل على الرغم من :)

هل JDBI 3 متاح على Maven؟ أم علي أن أبني نفسي؟

تحرير: نظر إلى الموقع ، ويبدو أنه لا يزال في ألفا.

يتوفر Alpha 0: http://search.maven.org/#search٪ 7Cga٪ 7C1٪ 7Cg٪ 3A٪ 22org.jdbi٪ 22٪ 20AND٪ 20v٪ 3A٪ 223.0.0-alpha0٪ 22

بأي طريقة يمكننا بها صب عناصر متعددة في عبارة in (...) ؟

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