使用hibernate从postgresql以CSV格式获取结果

时间:2016-10-19 13:06:30

标签: java postgresql hibernate csv

我执行一个查询,该查询应该将结果作为CSV返回给STDOUT。

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

然而,当我使用hibernate执行相同的查询时,我得到以下异常:

  

javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法提取ResultSet

我不能显示表格结构,但我知道sql很好(我已经复制了" sql&#34的整个内容;然后我在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。

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

如果您确实需要使用COPY,则应考虑CopyManagerhow to copy a data from file to PostgreSQL using JDBC?

但就个人而言,我会主张你改变你的做法。使用COPY加载数据对我来说就像是一种黑客攻击。

答案 1 :(得分:0)

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

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

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