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.