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

执行COPY..TO语句时,无法确定参数$1的数据类型

杜炫明
2023-03-14

我想使用JDBC prepared语句将一个表的内容从数据库写入CSV文件。我正在使用的PSQL查询是:

COPY(select * from file where uploaded_at > ?) TO '/tmp/file_info.csv' With DELIMITER ',' CSV HEADER ";

我的代码如下:

private void copyData(Connection conn, Date date){
String sql = "COPY (select * from file where uploaded_at< ?) TO '/tmp/file_info.csv' With DELIMITER ',' CSV HEADER ";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setTimestamp(1, new Timestamp(date.getTime()));
stmt.execute();
}
org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:381)
    at tests.com.paramatrix.pace.archival.file.TestFileArchival.main(TestFileArchival.java:63)
select * from file where uploaded_at > ?

它不能与copy..to语句一起工作的原因是什么?

共有1个答案

戚同
2023-03-14

不能参数化copy语句。您必须使用字符串插值或PGJDBC的copymanager

 类似资料:
  • 这个问题在几年前就有了答案(标题类似),但我正在努力解决这个问题。似乎无论我在then()谓词中放了什么表达式,我都会得到一个Hibernate错误: 无法确定搜索case语句的数据类型

  • 问题内容: 给定具有以下结构的类。我试图确定由泛型方法的调用者分配的参数T的类型。 在C#中,我将使用“ default(T)”或“ typeof(T)”,但我试图在Java中执行此操作。谁知道/如何做?我真的不需要实例,我只需要Class定义。 问题答案: 你不能那样做。您可以做的是使方法签名如下: 然后,您可以使用给定的类检查类型。

  • 问题内容: 我在Hibernate尝试了简单的程序,并发现了一堆异常。 我不知道到底是什么问题。 我有三个课程-书籍,阅读器和使用。最后一个是将前两个绑定为一对多。 这是我的: 这是异常消息: 的摘要: DB上的所有表均已创建,但为空。一切都还好。有什么建议么? 如何解决这个麻烦? 问题答案: 在MySQL中, USING 是保留字。 因此,只需使用实体上的注释来重命名表即可。就像是 我假设您有一

  • 我得到以下错误,当我尝试添加一个应用程序和应用程序设置。以下是详细的错误消息: 下面是junit测试 这是保存应用程序和设置的方法 这些是DAO类。 这是应用刀 为什么我会得到上面的错误?如果你们需要更多的信息,请告诉我。 更新

  • 这是列表类 下面是执行类 以下是控制器删除列表的方法 当我执行上述代码时,我得到以下错误 详细信息:键(id)=(1)仍然从表“执行”中引用。 在删除具有特定id的列表表之前,如何删除具有列表id的执行表? 任何帮助都将不胜感激。非常感谢。

  • 本文向大家介绍SQL Server 2005 定时执行SQL语句的方法,包括了SQL Server 2005 定时执行SQL语句的方法的使用技巧和注意事项,需要的朋友参考一下 SQL SERVER 2005有定时任务,你可以启动一下。不过要想更加直观的控制,直接写一个程序,定时执行你的存储过程。 1、设置“SQL Server 代理”(SQL Server Agent)服务随系统启动 --我的电脑