byte []长度在插入mysql数据库时发生变化,只发送第一个字节

时间:2012-01-02 17:55:24

标签: java mysql serialization

我的小测试程序是将序列化对象写入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);

由于

1 个答案:

答案 0 :(得分:2)

out.close();

似乎不见了。


答案似乎是goat=?是一个布尔比较,产生0或1;一个错字。

VALUES(goat = ?)应为VALUES(?)