我的小测试程序是将序列化对象写入mysql数据库,然后再次检索它,将其转换为对象,然后运行它toString()
。我试图在数据库上获得有关Blob的全部想法。 (对象是山羊,有名字,年龄和性别)我的问题是,当我将其插入数据库时,它只发送第一个字节,而不是其余的。
首先我写对象:
String query = "INSERT INTO goats(goat) VALUES (goat = ?)";
PreparedStatement pstmt = con.prepareStatement(query);
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(b);
out.writeObject(goat);
byte[] dataAsByteArray = b.toByteArray();
pstmt.setBinaryStream(1 , new ByteArrayInputStream(dataAsByteArray), dataAsByteArray.length);
然后我再次检索它:
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT goat FROM goats");
rs.next();
Blob blob = rs.getBlob(1);
byte[] bytes = blob.getBytes(1, (int) blob.length());
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream (bis);
由于
答案 0 :(得分:2)
out.close();
似乎不见了。
答案似乎是goat=?
是一个布尔比较,产生0或1;一个错字。
VALUES(goat = ?)
应为VALUES(?)
。