繁体   English   中英

Java Oracle:将TreeMap存储为BLOB吗?

[英]Java Oracle: Storing a TreeMap as BLOB?

我有以下代码:

  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的表的列中。 我怎样才能做到这一点? 我还有其他更好的数据类型吗?

谢谢,

如果要将对象放入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);

有两种方法可以解决此问题...

  • 您可以利用集合可序列化的事实,并将它们输出到字节数组,如对此问题的答案所示。

  • 您可以更改表的类型,以便将键和值存储为单独的行,而不是使用二进制字段存储TreeMap的特定实现,然后将其提取并用于以后重新构建地图。 此选项更具前瞻性,因为您将不会永远依赖TreeMap及其序列化格式。 而不是使用列(id, data) ,而是使用(id, key, value) 要保存到数据库,请遍历Map的entrySet()并使用相同的行ID插入每个键/值对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM