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

Java 字节[]长度在插入mysql数据库时发生变化,只发送第一个字节,java,mysql,serialization,Java,Mysql,Serialization,我的小测试程序正在将一个序列化对象写入mysql数据库,然后再次检索它,将其转换为一个对象,然后运行它的toString()。我试图了解数据库上的blob的全部概念。(对象是一只山羊,有名字、年龄和性别)我的问题是,当我将它插入数据库时,它只发送第一个字节,而不发送其余的字节 首先,我写下对象: String query = "INSERT INTO goats(goat) VALUES (goat = ?)"; PreparedStatement pstmt = con.pre

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

好像不见了


答案似乎是,
goat=?
是一个布尔比较,结果是0或1;打字错误


值(goat=?)
应该是
值(?)

山羊。山羊实际上是一个
BLOB
?第一个片段中的“山羊”是什么?2) 你在哪里检查长度是1?@Dan是的,山羊。山羊是一团。:)
blob.length()
返回什么?如果你用数据库浏览器而不是代码来查看数据,你会看到多少数据?@Martin:好吧,听起来好像是存储部分出了故障。当你存储数据时,
dataAsByteArray
的长度是多少<代码>值(goat=?)
是否正确?我总是做
值(?)
。这不是插入真1还是假0吗?这就解决了问题D非常感谢!你能把它写下来作为我的答案吗?:)
out.close();