Remember I talked about DB2 truncating strings to 256 bytes?

http://www.mail-archive.com/[email protected]/msg10523.html

That is still the case, but a friend of mine has found a fix:
Apparently, there's a bug in Castor on how String gets mapped to varchar.
No matter if you map String to varchar or longvarchar, the PreparedStatement in Castor 
maps the
datatype to CHAR anyway. DB2 truncates CHARs to 256, even if they are VARCHARs in the 
database.

!!

A long story made short, to map a String correctly to varchar, this change of order 
has to be made in:
org.exolab.castor.jdo.engine.SQLTypes

        new TypeInfo( java.sql.Types.VARCHAR,       "varchar",       
java.lang.String.class ),
        new TypeInfo( java.sql.Types.LONGVARCHAR,   "longvarchar",   
java.lang.String.class ),
        new TypeInfo( java.sql.Types.CHAR,          "char",          
java.lang.String.class ),

Notice varchar is before char.
Otherwise, the type will be mapped to the first hist in the list,  which is CHAR in 
the default distribution.

This method in the same class, needs to be worked on for that case:

 public static int getSQLType( Class javaType )
    {
        for ( int i = 0 ; i < _typeInfos.length ; ++i ) {
            if ( javaType.isAssignableFrom( _typeInfos[ i ].javaType ) )
                return _typeInfos[ i ].sqlType;
        }
        return java.sql.Types.OTHER;
    }

/Thomas

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to