سؤال

لدي حقل صفيف مزدوج الدقة dblArrayFld في جدول myTable وأود تحديثه باستخدام الربيع NamedParameterJdbcTemplate (أنا أستخدم postgres).

أنا أقوم بتشغيل التعليمات البرمجية مثل هذا:

SqlParameterSource params = (new MapSqlParameterSource())
        .addValue("myarray", myDblArrayListVar)
        .addValue("myid", 123);

namedJdbcTemplate.update("UPDATE myTable SET dblArrayFld = :myarray WHERE idFld = :myid", params);

يرجع هذا خطأ يقرأ خطأ في بناء الجملة أو بالقرب من "2 دولار"

أنا أفترض بناء جملة بلدي على: myarray في خطأ هنا. لقد حاولت أيضا التغليف :myarray بالطرق التالية:

  • dblArrayFld={:myarray}
  • dblArrayFld={ :myarray }
  • dblArrayFld=[:myarray]
  • dblArrayFld=ARRAY[:myarray]
  • dblArrayFld=(:myarray)

ما هو الجملة الصحيح هنا؟

هل كانت مفيدة؟

المحلول

Wehn تحاول ربط المجموعة أو صفيف باسم المعلمة المسماة، NamedParameterJdbcTemplate ينفذ المعلمة المسماة المناسبة في بيانك إلى عدد من المعلمات الموضعية المطابقة لطول صفيف / مجموعتك. هذا مفيد ل WHERE column IN (:param) البيانات، ولكن لن يعمل في هذه الحالة.

من أجل تعيين صفيف Postgres الفعلي، يجب عليك توفير المعلمة الخاصة بك java.sql.Array. وبعد يمكنك إنشاء مثيلها باستخدام Connection.creatarrayof () طريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top