У меня есть этот код, который преобразует Treemap в байты и сохраняет их в базе данных (Oracle 11g). Теперь это хранилище работает нормально. Я хочу получить карту сейчас, но она находится в байтах в поле BLOB-объектов. Как я могу получить и восстановить карту?
Код для хранения карты:
public void StoreMapDB(TreeMap<DateTime, Integer> map) throws
IOException, FileNotFoundException{
try {
Connection con = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection(
"jdbc:oracle:thin:@dsds",
"dsdsd",
"XXdsdsX");
con.setAutoCommit(false);
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
ObjectOutputStream out = new ObjectOutputStream(bos);
out = new ObjectOutputStream(bos) ;
out.writeObject(map);
out.close();
byte[] buf = bos.toByteArray();
PreparedStatement prepareStatement = con.prepareStatement("INSERT INTO
SMD_DATESTREEMAP VALUES(?,?)");
prepareStatement.setLong(1, 2);
prepareStatement.setBinaryStream(2, new ByteArrayInputStream(buf),
buf.length);
prepareStatement.executeUpdate();
// insertMap.executeUpdate();
con.commit();
} catch(Exception e){
System.err.print(e);
}
}
P.S. Я отредактировал этот код, но не думаю, что он работает, потому что он отображает размер найденной карты как 0, где он должен быть 366.
public TreeMap<DateTime, Integer> retrieveMapDB()throws IOException,
SQLException{
try {
Connection con = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection(
"jdbc:oracle:thin:@oradbfdfdt05:f:fdfd",
"cxcx",
"hpdbcxcxsmb");
con.setAutoCommit(false);
ResultSet rs = null;
PreparedStatement pstmt = null;
String query = "SELECT TREEMAP FROM SMD_DATESTREEMAP WHERE id = ?";
try {
pstmt = con.prepareStatement(query);
int id = 1;
pstmt.setInt(1, id);
rs = pstmt.executeQuery();
while(rs.next()){
ByteArrayInputStream bos = new
ByteArrayInputStream(rs.getBytes("TREEMAP")) ;
ObjectInputStream out = new ObjectInputStream(bos);
retrievedmap=(TreeMap<DateTime, Integer>)out.readObject();
}
}catch(IOException ioe){
System.err.print(ioe);
}
}catch(ClassNotFoundException cnfe){
System.err.print(cnfe);
}
return retrievedmap;
}