[BUGS] JDBC: 2 bugs: Getting a smallint array actually gets an integer array and return type of a boolean array is bit. - Mailing list pgsql-jdbc
From | Saneesh Apte |
---|---|
Subject | [BUGS] JDBC: 2 bugs: Getting a smallint array actually gets an integer array and return type of a boolean array is bit. |
Date | |
Msg-id | 4C295503.5020506@calccit.org Whole thread Raw |
Responses |
Re: [BUGS] JDBC: 2 bugs: Getting a smallint array actually
gets an integer array and return type of a boolean array is bit.
|
List | pgsql-jdbc |
Hi, I think I found two bugs (and I hope I am not wasting everyone's time). One is minor: the base type of a boolean[] is java.sql.Types.BIT instead or java.sql.Types.BOOLEAN. At the very least shouldn't these be aliases for the same type? And secondly the returned type from a smallint[] is an Integer[] instead of a Short[]. So running this code: ------------------------------------------------------------------ public class NewClass { public static void main(String[] args) { try { Class.forName("org.postgresql.Driver"); java.sql.Connection conn = java.sql.DriverManager.getConnection( "jdbc:postgresql://localhost:5432/dev", "dev", "devmm" ); java.util.Enumeration<java.sql.Driver> drivers = java.sql.DriverManager.getDrivers(); while( drivers.hasMoreElements() ) { java.sql.Driver d = drivers.nextElement(); System.out.println( d.toString() + ": " + d.getMajorVersion() + "." + d.getMinorVersion() ); } java.sql.PreparedStatement ps_ver = conn.prepareStatement( "SELECT version()" ); java.sql.ResultSet rs = ps_ver.executeQuery(); while(rs.next()) System.out.println(rs.getString(1)); java.sql.PreparedStatement ps_create = conn.prepareStatement( "CREATE TABLE public.aab (" + "ia integer[], " + "sa smallint[], " + "ba boolean[] )" ); ps_create.executeUpdate(); java.sql.PreparedStatement ps_insert = conn.prepareStatement( "INSERT INTO public.aab (ia,sa,ba) VALUES (?,?,?)" ); ps_insert.setArray( 1, conn.createArrayOf( "int4", new Integer[] { 1, 2 } ) ); ps_insert.setArray( 2, conn.createArrayOf( "int2", new Short[] { 100, 200 } ) ); ps_insert.setArray( 3, conn.createArrayOf( "bool", new Boolean[] {false,true} ) ); ps_insert.executeUpdate(); java.sql.PreparedStatement ps_select = conn.prepareStatement( "SELECT ia,sa,ba FROM public.aab" ); rs = ps_select.executeQuery(); java.sql.Array jdbcArr; while(rs.next()) { System.out.println("Integer[]"); jdbcArr = rs.getArray("ia"); Integer[] javaIntArr = (Integer[]) jdbcArr.getArray(); System.out.println(javaIntArr[0] + " " + javaIntArr[1]); System.out.println(String.format( "%s: %d %d", jdbcArr.getBaseTypeName(), java.sql.Types.INTEGER, jdbcArr.getBaseType())); System.out.println("END Integer[]"); System.out.println("Boolean[]"); jdbcArr = rs.getArray("ba"); Boolean[] javaBooArr = (Boolean[]) jdbcArr.getArray(); System.out.println(javaBooArr[0] + " " + javaBooArr[1]); System.out.println(String.format( "%s: %d %d %d", jdbcArr.getBaseTypeName(), java.sql.Types.BOOLEAN, jdbcArr.getBaseType(), java.sql.Types.BIT)); System.out.println("END Boolean[]"); System.out.println("Short[]"); jdbcArr = rs.getArray("sa"); Short[] javaShoArr = (Short[]) jdbcArr.getArray(); System.out.println(javaShoArr[0] + " " + javaShoArr[1]); System.out.println(String.format( "%s: %d %d", jdbcArr.getBaseTypeName(), java.sql.Types.SMALLINT, jdbcArr.getBaseType())); System.out.println("END Short[]"); } catch( Exception e ) { ; } } // main } // class ------------------------------------------------------------------ Prints the following for me: ------------------------------------------------------------------ sun.jdbc.odbc.JdbcOdbcDriver@de6f34: 2.1 org.postgresql.Driver@47b480: 8.4 PostgreSQL 8.4.2 on x86_64-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42), 64-bit Integer[] 1 2 int4: 4 4 END Integer[] Boolean[] false true bool: 16 -7 -7 END Boolean[] Short[] java.lang.ClassCastException: [Ljava.lang.Integer; cannot be cast to [Ljava.lang.Short; at NewClass.main(NewClass.java:90) [Ljava.lang.Integer; cannot be cast to [Ljava.lang.Short; ------------------------------------------------------------------ Thanks for any help, -- Saneesh Apte 510-642-5478 http://www.calccit.org California Center for Innovative Transportation University of California, Berkeley, MC3830 2105 Bancroft Way, Suite 300 Berkeley, CA 94720-3830 Phone: 510-642-4522 Fax: 510-642-0910 -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs
pgsql-jdbc by date: