0
我有一個FootballPlayer
實體類,它實現了Serializable
接口。我正在使用longblob
類型將此類中的對象保存到數據庫表中。錯誤「java.io.StreamCorruptedException:invalid stream header:5B424037」
這工作正常,但從數據庫檢索對象時,我得到StreamCorruptedException
。
這裏是我的代碼:
public FootballPlayer searchFBPlayer(String id){
try {
String sql = "SELECT * FROM player";
ResultSet rs = DBConnection.getData(sql);
// search for player
while (rs.next()) {
ByteArrayInputStream bais = new ByteArrayInputStream(rs.getBytes("fbPlayer"));
//test
if(bais==null) System.out.println("Null BAIS");
else System.out.println("No Null BAIS");
//test
FootballPlayer fbp = (FootballPlayer) toObject(bais);
if(fbp.getPlayerID().equals(id))
return fbp;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
private Object toObject(ByteArrayInputStream arr){
ObjectInputStream ins;
try{
ins = new ObjectInputStream(arr);
return ins.readObject();
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
代碼保存:
public int addFootballPlayer(FootballPlayer player){
byte[] data=toByte(player);
String sql="INSERT INTO footballplayer(footballPlayer) VALUES('"+data+"')";
return DBConnection.setData(sql);
}
private byte[] toByte(Object obj){
try{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
byte[] data = bos.toByteArray();
return data;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
這裏是我的堆棧跟蹤:
java.io.StreamCorruptedException: invalid stream header: 5B424037
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at com.league.database.DBAccess.toObject(DBAccess.java:67)
at com.league.database.DBAccess.searchPlayer(DBAccess.java:34)
at com.league.main.Test.main(Test.java:20)
我沒有任何聯網的我的代碼,如套接字。我做錯了什麼,我該如何解決這個問題?
可能的重複http://stackoverflow.com/questions/20773657/java-io-streamcorruptedexception-invalid-stream-header-00000001 – Tetramputechture 2014-11-01 20:26:21
你是如何把你的對象數據庫?您是否在PreperedStatement上使用了'setObject(varID,objectToSerialize)'?考慮使用這裏描述的方式http://javapapers.com/core-java/serialize-de-serialize-java-object-from-database/ – Pshemo 2014-11-01 20:42:12
@Pshemo我已經把代碼保存 – user3112250 2014-11-01 20:59:28