Re: setObject(...) with native Java arrays like String[] ?

Поиск
Список
Период
Сортировка
От Craig Ringer
Тема Re: setObject(...) with native Java arrays like String[] ?
Дата
Msg-id 5034527F.5040609@ringerc.id.au
обсуждение исходный текст
Ответ на setObject(...) with native Java arrays like String[] ?  (Craig Ringer <ringerc@ringerc.id.au>)
Список pgsql-jdbc
Here's a proposed patch to the tests to make the current behaviour explicit:




Add tests for String[] arrays

Shows that Connection.createArrayOf works, and that passing a raw
Java String[] to PreparedStatement.setObject() isn't accepted.
---
  org/postgresql/test/jdbc2/ArrayTest.java | 31
+++++++++++++++++++++++++++++++
  1 file changed, 31 insertions(+)

diff --git a/org/postgresql/test/jdbc2/ArrayTest.java
b/org/postgresql/test/jdbc2/ArrayTest.java
index 16b0823..7b796be 100644
--- a/org/postgresql/test/jdbc2/ArrayTest.java
+++ b/org/postgresql/test/jdbc2/ArrayTest.java
@@ -186,6 +186,37 @@ public class ArrayTest extends TestCase
          assertEquals(3, resultCount);
      }

+    public void testSetObjectFromJavaArray() throws SQLException {
+        String[] strArray = new String[]{"a","b","c"};
+
+        PreparedStatement pstmt = conn.prepareStatement("INSERT INTO
arrtest(strarr) VALUES (?)");
+
+        // Incorrect, but commonly attempted by many ORMs:
+        try {
+            pstmt.setObject(1, strArray, Types.ARRAY);
+            pstmt.executeUpdate();
+            fail("setObject() with a Java array parameter and
Types.ARRAY shouldn't succeed");
+        } catch (org.postgresql.util.PSQLException ex) {
+            // Expected failure.
+        }
+
+        // Also incorrect, but commonly attempted by many ORMs:
+        try {
+            pstmt.setObject(1, strArray);
+            pstmt.executeUpdate();
+            fail("setObject() with a Java array parameter and no Types
argument shouldn't succeed");
+        } catch (org.postgresql.util.PSQLException ex) {
+            // Expected failure.
+        }
+
+        // Correct way, though the use of "text" as a type is non-portable.
+        Array sqlArray = conn.createArrayOf("text", strArray);
+        pstmt.setArray(1, sqlArray);
+        pstmt.executeUpdate();
+
+        pstmt.close();
+    }
+
      /**
       * Starting with 8.0 non-standard (beginning index isn't 1) bounds
       * the dimensions are returned in the data.  The following should
--
1.7.11.2



В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Craig Ringer
Дата:
Сообщение: setObject(...) with native Java arrays like String[] ?
Следующее
От: Craig Ringer
Дата:
Сообщение: Re: setObject(...) with native Java arrays like String[] ?