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