当前位置: 首页 > 知识库问答 >
问题:

无法使用Postgres、JDBCTemboard、Spring保存大文件

寇涵容
2023-03-14

在我们公司,我们使用Spring Core(4.0.4),JDBCTemplate和Postgres 9.3。

当我尝试这个例子时:

我对大文件有一些问题(

public void addToDB(final long documentId, final File file) throws IOException {
    String sql = "insert into filetest (id, content) values (?,?)";
    final InputStream blobIs = new FileInputStream(file);
    DefaultLobHandler defaultLobHandler = new DefaultLobHandler();
    jdbcTemplate
            .execute(sql, new AbstractLobCreatingPreparedStatementCallback(defaultLobHandler) {

                @Override
                protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException {
                    ps.setLong(1, documentId);
                    lobCreator
                            .setBlobAsBinaryStream(ps, 2, blobIs, (int) file
                                    .length());
                }
            });
    blobIs.close();
}

在Postgres上,我创建了表:

 CREATE TABLE filetest
 (
      id bigint,
      content bytea
 )
 WITH (
  OIDS=FALSE
  );
 ALTER TABLE filetest
 OWNER TO postgres;
 ALTER TABLE filetest ALTER COLUMN content SET STORAGE EXTERNAL;

我有我的测试,使用上述方法调用存储库。对于小文件,代码有效(使用 pgAdmin 客户端,我可以连接并看到两条记录)。

当我尝试加载大文件(超过 200 MB )时,我可以保存文件(实现没有给我错误)。但是,当我尝试从 pgAdmin 读入时,它会中止操作。只有当我选择 id 记录时,我才没有问题看到它(只有内容记录中止搜索)。我认为这可能是为什么记录已损坏(我如何检查?)或为什么 GUI-Client 无法加载记录(我从控制台尝试过,而且我也有奇怪的行为)

现在的问题是:

>

  • Postgres是否有任何参数可以限制大小?(字节可以处理1GB)

    我可以检查数据是否被写入数据库吗?

    因为当我尝试(以编程方式)从记录中读取时,我得到一个Java堆空间异常。

  • 共有1个答案

    柯英奕
    2023-03-14

    因为当我尝试(以编程方式)从记录中读取时,我得到一个Java堆空间异常。

    可能的解决方案是设置< code>-Xmx2048m和< code >-xms 256m < code > JVM 参数来增加堆大小。比如:

    java -Xmx1024m -Xms256m REST_OF_ARGUMENTS
    

    还可以以多种大小指定该标志,例如 KB、MB 等。

    -Xmx2048k
    -Xmx1024m
    -Xmx2g
    
     类似资料:
    • 我在openpyxl中保存Excel文件时遇到问题。我正在尝试创建一个处理脚本,该脚本将从一个excel文件中获取数据,并将其转储到一个转储excel文件中,在excel中使用公式进行一些调整后,我将在转储excel文件中保存所有处理过的数据。我目前的代码也是如此。 自从两三周前我刚开始使用Python以来,我知道我的很多代码都很混乱。我还有几个悬而未决的问题,我可以在以后处理。似乎没有很多人为了

    • 我最近开始使用Spring Boot(我主要来自Python/flask和node背景)和JPA和thymeleaf,并且我正在尝试在我的数据库中创建一个项目。一切都很顺利,我可以添加,删除等。项目。 我的控制器看起来是这样的:

    • 问题内容: 我知道获取网址非常简单,我可以获取原始响应正文并将其保存到文件中,但是对于大型文件,是否可以直接流式传输到文件?就像我要下载电影或类似的东西吗? 问题答案: 奇怪的是,请求没有什么简单的方法。您必须遍历响应并将这些块写入文件: 我通常只是使用。它可以工作,但是如果您需要使用会话或某种身份验证,那么上面的代码也可以工作。

    • 我使用的是由java.sql引起的相同代码:na]。SQLSyntaxErrorException:ORA-00942:表或视图不存在-Spring批处理,无法将记录保存到数据库中。 我已经创建了表 LifeCycleStatusWriter.java 作家 错误: 配置详细信息 数据库配置

    • 我尝试用以下代码保存从internet下载的文件 但在运行时,我得到的错误如下 03-04 20:42:51.080 8972-8972/com.example.me.demo2 E/BitmapFactory:无法解码流:java.io.FileNotFoundExcoop: /storage/emulated/0/.tanks/4a100abb-0e55-4062-8c37-f11f4189e