我执行一个查询,该查询应该将结果作为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结果?
提前致谢!
答案 0 :(得分:1)
PostgreSQL JDBC驱动程序(最后在COPY
上测试)不支持AFAIK,postgresql-9.4.1208.jre7
。因此,Hibernate无法运行命令。
如果您确实需要使用COPY
,则应考虑CopyManager
:how 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()方法处理所有事情。结果集由例程自动关闭。