| From | Sent On | Attachments |
|---|---|---|
| vasy...@uksatse.org.ua | Apr 16, 2007 7:34 am | |
| Kris Jurka | Apr 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?





