【问题标题】:Get results as CSV from postgresql using hibernate使用 hibernate 从 postgresql 获取 CSV 格式的结果
【发布时间】:2023-03-09 15:28:01
【问题描述】:

我执行了一个查询,它应该将结果以 CSV 格式返回到 STDOUT。

当我在 pgAdmin 中执行查询时,我成功获得了结果。

但是,当我使用 hibernate 执行相同的查询时,出现以下异常:

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: 无法提取结果集

我不能显示表结构,但我知道 sql 很好(我已经复制了“sql”的全部内容,然后我在 pgAdmin 中执行它);查询如下:

String sql = "COPY (" + sqlQuery + ") TO STDOUT WITH CSV";

然后我执行如下:

Query query = getEntityManager().createNativeQuery(sql);

Object result = query.getSingleResult(); // I also tried the other get results method...(`getFirstresult()` has returned 0)

在我发现的任何相关问题中,我看到 OP 将 csv 放入文件而不是 stdout。

是否可以使用休眠返回 csv 结果?

提前致谢!

【问题讨论】:

  • 为什么在这里使用 Hibernate?一个简单的 JDBC 查询(或加上一个 CSV 库)应该会容易得多。
  • @AdrianShum 这就是我要解决这个问题的方式......我只是想确保使用 Hibernate 是不可能的......谢谢! :)

标签: java postgresql hibernate csv


【解决方案1】:

AFAIK,COPY 本身不支持 PostgreSQL JDBC 驱动程序(最后在 postgresql-9.4.1208.jre7 上测试)。因此,Hibernate 无法运行该命令。

如果你真的需要使用COPY,你应该考虑使用CopyManagerhow to copy a data from file to PostgreSQL using JDBC?

但就个人而言,我建议您改变方法。使用COPY 加载数据对我来说似乎是一种黑客攻击。

【讨论】:

  • 非常感谢您的精彩回答! :) 除了接受,我会投票,但我没有足够的声誉......
【解决方案2】:

您可以使用两行代码通过univocity-parsers 完成此操作。您只需要从查询中获取结果集并执行以下操作:

CsvRoutines routines = new CsvRoutines();
routines.write(resultset, new File("/path/to/output.csv"), "UTF-8");

write() 方法处理所有事情。结果集由例程自动关闭。

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2017-05-17
    • 2020-05-10
    • 2017-09-08
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多