SQL把一个对象序列化存入一个字段中。

J2EE 码拜 10年前 (2015-04-18) 1953次浏览 0个评论

初衷是想把一个对象存到数据库的一个字段中
(sqlserver 2008)

先把一个对象转换
byte[] but = null;
ByteArrayOutputStream stream=new ByteArrayOutputStream(); 
ObjectOutputStream out=new ObjectOutputStream(stream); 
out.writeObject(object); //object是一个对象
out.flush(); 
but=out.toByteArray();

然后 怎么把but存到一个字段中,字段类型是啥,怎么再拿出这个对象?

求大神帮助,3Q~

SQL把一个对象序列化存入一个字段中。
varbinary, 读出后就反序列化object
SQL把一个对象序列化存入一个字段中。
引用 1 楼 whos2002110 的回复:

varbinary, 读出后就反序列化object

怎么存到数据库呢  写insert 行么
存进去以后就看不懂了 
写了个select   查询这个字段  直接报错了 

SQL把一个对象序列化存入一个字段中。
100分
这是插入:

public static void main(String[] args) {
		String readSql = "insert into objects(id, object_bytes) values(1,?)";
		try {
			byte[] obs = getBytes();
			PreparedStatement ps = conn.prepareStatement(readSql);
			ps.setBytes(1, obs);
			ps.execute();
			ps.close();
			conn.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private static byte[] getBytes() throws IOException {
		ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
		ObjectOutputStream out = new ObjectOutputStream(stream); 
		A a = new A();
		a.age = 10;
		a.name = "a10";
		out.writeObject(a); //object是一个对象
		out.flush(); 
		out.close();
		return stream.toByteArray();
	}

这是查询反序列化

public static void main(String[] args) {
		String readSql = "select * from objects";
		try {
			PreparedStatement ps = conn.prepareStatement(readSql);

			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				byte[] obs = rs.getBytes(2);
				ByteArrayInputStream bis = new ByteArrayInputStream(obs);
	            ObjectInputStream ois = new ObjectInputStream(bis);
	            A a = (A) ois.readObject();
	            System.out.println(a.name);
			}
			ps.close();
			conn.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

测试通过。 你对照下


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明SQL把一个对象序列化存入一个字段中。
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!