【发布时间】:2014-04-08 10:53:06
【问题描述】:
我不知道在数据库中保存 HashMap 的最佳方法是什么(HashMap 可能非常大)所以我的第一个想法是将 HashMap 保存为 blob(在一列中),另一个想法是保存 HashMap 中与键对应的每个值,但我认为这会使它变大。
我的示例类:
public class MyObject {
private int id;
private HashMap<Integer, CustomHash> hashes;
// getters and setters
}
我还听说过序列化类并将其保存在数据库中。有什么建议吗?
也没有使用ORM,只有普通的JDBC
编辑:如何将 hashmap 保存到 clob 中?
CREATE TABLE IF NOT EXISTS myobjects (
id int GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY,
hashes clob NOT NULL
);
我的声明:
PreparedStatement ps = null;
try {
ps = this.connection.prepareStatement("INSERT INTO myobjects (hashes) VALUES (?)");
ps.setClob(1, (Clob) myObject.getHashes());
ps.executeUpdate();
} catch(SQLException sqlEx) {
sqlEx.printStackTrace();
} finally {
DAOUtility.close(this.connection, ps);
}
错误:HashMap 无法转换为 Clob
【问题讨论】:
-
你看过 JPA 吗?
-
您想要一个包含三列的表 -
id字段的整数,地图键的整数和地图的 varchar(或者可能是某种 CLOB/文本列)值。 -
我宁愿不单独存储地图的键和值。
-
将它们放在数据库表同一行的不同列中很难“分开”。做任何其他事情只是意味着您以后必须以某种方式将它们分开。