java - 如何将所有数据分块插入数据库

标签 java hibernate postgresql out-of-memory gson

我正在尝试使用以下方法一次插入所有数据:

userModel.setServiceData(gson.toJson(sortedResponse).getBytes());

这是因为大量数据导致内存不足。

所以我尝试使用类似的方法将数据分块添加到 postgres 数据库中:

byte[] chunkedMessage = {};

for (Iterator<Message> iterator = sortedResponse.iterator();  iterator.hasNext();) {
    Message message = (Message) iterator.next();
    chunkedMessage = gson.toJson(message).getBytes();
    userModel.setServiceData(chunkedMessage);
}

显然,这将最终存储最后一个 block ,但不是所有 block 。

我正在使用 hibernate,所以想知道是否有任何简单的方法可以使用 hibernate 查询,或者可能像上面的代码一样简单。

最佳答案

不要使用数组(byte[]),因为它需要为要插入数据库的完整数据分配内存并切换到流。将 userModel.serviceData 的类型从 byte[] 更改为 java.sql.Blob,这允许从 InputStream 创建一个新的 Blob 实例或读者:

Blob blob = Hibernate.getLobCreator(session).createBlob(stream, size);

关于java - 如何将所有数据分块插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34433898/

相关文章:

java - 最后批量更新: connection. commit(),使用setAutoCommit(false),但数据没有回滚

java - 如果构造函数的参数非法,则阻止类的实例化?

hibernate : Where exactly do we need to close the SessionFactory Object

java - Hibernate 多对多关联 : left hand side collection contains elements, 但右侧集合为空

postgresql - 文本转换中丢失空间

linux - 如何在 postgres-8.4 触发器中调试 plperl 脚本

java - 为什么 Java 和 Scala 集合之间的自动转换失败?

java - 在 h :inputTextarea tag JSF(2. 0 中禁用复制粘贴功能)

java - 如何在 Struts 2 中处理表单上的索引属性按钮

java - 无法提取结果集,列不存在