我有以下代码:
public void StoreMapInDB(TreeMap<DateTime, Integer> map) throws
IOException, FileNotFoundException{
try {
PreparedStatement insertMap = null;
String insertString = "INSERT INTO TESTMAP(ID, NAME) VALUES (1, ?)";
Connection con=null;
con.setAutoCommit(false);
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection(
"jdbc:oracle:thin:@XXXXX",
"XXX",
"XXX");
//This line is incorrect for sure
//insertMap.setBlob(1, map.);
} catch(Exception e){e.printStackTrace();}
}
连接有效,所有数据库都有。这次我试图将地图,即我创建的树形图插入到表格中具有BLOB类型的列中。我怎样才能做到这一点?还有其他更好的数据类型我应该研究一下吗?
谢谢,
答案 0 :(得分:5)
如果要将对象放入BLOB数据类型,可以执行以下操作:
// Serialize to a byte array
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
out = new ObjectOutputStream(bos) ;
out.writeObject(object);
out.close();
// Get the bytes of the serialized object
byte[] buf = bos.toByteArray();
PreparedStatement prepareStatement = connection.prepareStatement("insert into tableName values(?,?)");
prepareStatement.setLong(1, id);
prepareStatement.setBinaryStream(2, new ByteArrayInputStream(buf), buf.length);
答案 1 :(得分:1)
有两种方法可以解决这个问题......
您可以利用集合可序列化的事实,并将它们输出到字节数组,如this question的答案所示。
您可以更改表的类型,以便不是使用二进制字段来存储TreeMap的特定实现,而是将键和值存储为单独的行,然后可以将这些行提取并用于重建地图以后。此选项更具有前瞻性,因为您永远不会依赖TreeMap
及其序列化格式。您可以使用(id, data)
,而不是使用列(id, key, value)
。要保存到数据库,请迭代地图entrySet()
并使用相同的行ID插入每个键/值对。