From: | Craig Ringer <ringerc(at)ringerc(dot)id(dot)au> |
---|---|
To: | PostgreSQL JDBC <pgsql-jdbc(at)postgresql(dot)org> |
Subject: | Re: setObject(...) with native Java arrays like String[] ? |
Date: | 2012-08-22 03:31:11 |
Message-ID: | 5034527F.5040609@ringerc.id.au |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
From | Date | Subject | |
---|---|---|---|
Next Message | Craig Ringer | 2012-08-22 03:32:50 | Re: setObject(...) with native Java arrays like String[] ? |
Previous Message | Craig Ringer | 2012-08-22 03:09:12 | setObject(...) with native Java arrays like String[] ? |