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 по дате отправления: