atom feed2 messages in org.postgresql.pgsql-jdbcHow to modify my class inherited from...
FromSent OnAttachments
vasy...@uksatse.org.uaApr 16, 2007 7:34 am 
Kris JurkaApr 16, 2007 9:44 am 
Subject:How to modify my class inherited from java.sql.Array
From:vasy...@uksatse.org.ua (vasy@uksatse.org.ua)
Date:Apr 16, 2007 7:34:56 am
List:org.postgresql.pgsql-jdbc

Hi! I need to update (and insert too) an Array type into table via JDBC. Array consist of Strings;

I created class with methods toString.

<CODE> public class ArrayClass implements Array {         private Object[] anArray;

        public int getBaseType() throws SQLException {                 // TODO Auto-generated method stub                 return java.sql.Types.VARCHAR;//org.postgresql.core.types.PGUnknown;

        }

        public String getBaseTypeName() throws SQLException {

                // TODO Auto-generated method stub                 return "text";         }

        public String toString()         {                 String temp ="{";                 for(int i=0;i<anArray.length;i++)                 {                         temp += anArray[i].toString();                         if(i+1<anArray.length)                                 temp += ",";                 }                 temp+="}";                 return temp;         }

}

<CODE/>

The method ResultSet -> setObject(i,arrayClassObject)   -  works well.

But after the method ResultSet ->  updateRow() generate the exception ClassCastException.

It is generated inside method <CODE> void org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateRowBuffer() ; <CODE/>

because the java can't convert my ArraClass object to byte[].

For all standart java.sql.Types method makes calls

<CODE> switch ( getSQLType(columnIndex + 1) )                 {

                case Types.DECIMAL:                 case Types.BIGINT:                 case Types.DOUBLE:                 case Types.BIT:                 case Types.VARCHAR:                 case Types.SMALLINT:                 case Types.FLOAT:                 case Types.INTEGER:                 case Types.CHAR:                 case Types.NUMERIC:                 case Types.REAL:                 case Types.TINYINT:                 case Types.OTHER:                     rowBuffer[columnIndex] = connection.encodeString(String.valueOf( valueObject));                     break;

                //                 // toString() isn't enough for date and time types; we must format it correctly                 // or we won't be able to re-parse it.                 //

                case Types.DATE:                     rowBuffer[columnIndex] =

connection.encodeString(connection.getTimestampUtils().toString(null, (Date)valueObject));                     break;

                case Types.TIME:                     rowBuffer[columnIndex] =

connection.encodeString(connection.getTimestampUtils().toString(null, (Time)valueObject));                     break;

                case Types.TIMESTAMP:                     rowBuffer[columnIndex] =

connection.encodeString(connection.getTimestampUtils().toString(null, (Timestamp)valueObject));                     break;

                case Types.NULL:                     // Should never happen?                     break;

                default:                     rowBuffer[columnIndex] = (byte[]) valueObject;                 } <CODE/>

but for the rest makes default action.

How can I modify my ArrayClass to avoid such exception?