Ti posto un esempio banale (ma che qui funziona)
codice:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;
import java.io.*;

public class blobHandling {

  private String db_host;
  private String db_name;
  private String db_user;
  private String db_password;

  public blobHandling(String db_host, String db_name, String db_user, String db_password) {
    this.db_host = db_host;
    this.db_name = db_name;
    this.db_user = db_user;
    this.db_password = db_password;

    try {
      try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
      }
      catch (Exception e) {
        System.out.println(e.toString());
      }

      Connection conn = DriverManager.getConnection("jdbc:mysql://" + db_host +
          "/" + db_name + "?user=" + db_user + "&password=" + db_password);
      
      serializableClass sc = new serializableClass();
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(baos);
      oos.writeObject(sc);
      
      byte[] objectByte = baos.toByteArray();
      baos.close();
      oos.close();
      
      ByteArrayInputStream bais = new ByteArrayInputStream(objectByte);
      
      PreparedStatement pstmt = conn.prepareStatement("INSERT INTO serialized (value) VALUES (?)");
      pstmt.setBinaryStream(1, bais, objectByte.length);

      //PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM IMAGES WHERE ID=1");
      if (pstmt.executeUpdate() != 1) {
        throw new RuntimeException();
      }
      
      // recupero l'oggetto dal Database
      pstmt = conn.prepareStatement("SELECT value FROM serialized WHERE id = ?");
      pstmt.setInt(1,1);
      ResultSet rs = pstmt.executeQuery();
      if (rs.next()) {
        objectByte = rs.getBytes("value");
        bais = new ByteArrayInputStream(objectByte);
        ObjectInputStream ois = new ObjectInputStream(bais);
        serializableClass readSC = (serializableClass)ois.readObject();
        System.out.println(readSC);        
      }

    }
    catch (SQLException ex) {
      System.out.println("SQLException: " + ex.getMessage());
      System.out.println("SQLState: " + ex.getSQLState());
      System.out.println("VendorError: " + ex.getErrorCode());
    }
    catch (Exception e) {
      System.out.println(e.toString());
    }
  }

  public static void main (String[] args) {
    blobHandling bH = new blobHandling("localhost", "java", "user", "password");
  }
}
codice:
import java.util.*;
import java.io.*;

public class serializableClass implements Serializable {

  private Vector[] v;
  
  static final long serialVersionUID = -5947843555384378582L;
  
  public String toString() {
    String temp = "";
    for (int i = 0; i < v.length; i++) {
      for (int j = 0; j < v[i].size(); j++) {
        temp += ((String)v[i].elementAt(j))+" -- ";
      }
      temp += "\n";
    }
    return temp;
  }

  public serializableClass() {
    v = new Vector[2];
    v[0] = new Vector();
    v[1] = new Vector();
    String[] s1 = {"Paperino", "Qui Quo Qua", "Minnie", "Pippo", "Pluto"};
    String[] s2 = {"Walt Disney", "Hannah & Barbera"};
    for (int i = 0; i < s1.length; i++) {
      v[0].add(s1[i]);
    }
    for (int i = 0; i < s2.length; i++) {
      v[1].add(s2[i]);
    }
  }
  
  public static void main (String[] args) {
    System.out.println("Test Class");
    serializableClass sc = new serializableClass();
  }
}
In cui lo UID che ho messo è quello che mi usciva dall'errore nello stream. Non so se è onesta come cosa, però così funziona.