  | | | Subject: getObject() autoDeserialize question | Subject: getObject() autoDeserialize question 2007-11-06 - By Pavel B. Milovantsev
Back Hello, not sure that this is a bug, so prefer to ask it at the maillist.
As I see the only backport at 3.1.11 which consider blobs (http://bugs.mysql.com/bug.php?id=13277), but I don't understand why it provoke change at ResultSet(Impl).java:getObject():
from: if ((data[0] == -84) && (data[1] == -19)) { // Serialized object? .... }
to: if ((data[0] == -84) && (data[1] == -19)) { // Serialized object? .... } else { return getString(columnIndex); }
This simple code works on mysql connector/J version 3.1.10, and fails at version 5.1.5 with java.lang.ClassCastException: java.lang.String cannot be cast to [B
import java.sql.*;
public class Main { public static void main(final String[] args) throws Exception { byte[] byteArrayWrite = new byte[Math.abs(Byte.MIN_VALUE) + Math.abs(Byte.MIN_VALUE) + 1]; for (int b = 0; b < Math.abs(Byte.MIN_VALUE) + Math.abs(Byte.MAX_VALUE) + 1; b++) byteArrayWrite[b] = (byte)(b + Byte.MIN_VALUE);
Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/sw2_std?user=root&password =XXX&useUnicode=true&characterEncoding=UTF-8 (See http://UTF-8.ora-code.com)&zeroDateTimeBehavior=convertToNull &autoDeserialize=true&jdbcCompliantTruncation=false");
PreparedStatement stmt = conn.prepareStatement("insert into testblob(blob_field) values(?)"); stmt.setObject(1, byteArrayWrite); stmt.executeUpdate();
stmt = conn.prepareStatement("select blob_field from testblob"); ResultSet rs = stmt.executeQuery(); if (rs.next()) { final byte[] byteArrayRead = (byte[]) rs.getObject(1);
// Make sure original and read content are equal assert byteArrayRead.length == byteArrayWrite.length; for (int byteArrayIdx = 0; byteArrayIdx < byteArrayRead.length; byteArrayIdx++) assert byteArrayRead[byteArrayIdx] == byteArrayWrite[byteArrayIdx]; } } }
> mysql> show create table testblob; > +-- ---- --+-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -- -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -- -- ---- ---- ---- ---- ---- ---- ---- --+ > | Table | Create Table | > +-- ---- --+-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -- -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -- -- ---- ---- ---- ---- ---- ---- ---- --+ > | testblob | CREATE TABLE `testblob` ( > `pk_field` bigint(20) NOT NULL auto_increment, > `blob_field` mediumblob, > PRIMARY KEY (`pk_field`) > ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 | > +-- ---- --+-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -- -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -- -- ---- ---- ---- ---- ---- ---- ---- --+ > 1 row in set (0.00 sec) -- Pavel B. Milovantsev <pav@(protected)> SupportWizard
-- MySQL Java Mailing List For list archives: http://lists.mysql.com/java To unsubscribe: http://lists.mysql.com/java?unsub=mysql@(protected)
|
|
 |