استخدم namedparameterjdbctemplate لتحديث حقل الصفيف
-
11-09-2019 - |
سؤال
لدي حقل صفيف مزدوج الدقة 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 () طريقة.