gpt4 book ai didi

java - 使用 Ant 进行 JDBC COPY

转载 作者:行者123 更新时间:2023-12-04 13:59:44 26 4
gpt4 key购买 nike

我有一个包含 Spring、Hibernate 和 PostgreSQL 的项目,并且必须使用 ANT 来创建包含数据的模式:

        <sql driver="org.postgresql.Driver"
classpath="src/main/webapp/WEB-INF/lib/postgresql-9.1-901.jdbc4.jar"
url="jdbc:postgresql://localhost:5433/postgres"
userid="postgres"
password="pw123"
autocommit="true"
src="src/main/sql/dbbackup.sql">
</sql>

但我收到此错误:
C:\Users\<user>\<workspace>\<Project>\antdb.xml:22: org.postgresql.util.PSQLException: ERROR: COPY from stdin failed: The JDBC driver currently does not support COPY operations.

不知道我们是否可以在这里使用 postgresql.copy 类?

最佳答案

PgJDBC 不支持 COPY直接,但它是通过 CopyManager您可以从 PGConnection 获取 API java.sql.Connection的界面由 PgJDBC 返回。

不幸的是,您不能从混合使用的普通 SQL 文件中使用它 COPY与其他命令一起操作。

就个人而言,我会支付给 psql运行 .sql文件使用 Ant <exec>任务。这样你就可以包含 COPY SQL 文件中的内嵌数据。

启用 PgJDBC 来处理会很好 COPY ,但这并不容易。它实际上是 PostgreSQL 中的一种不同的协议(protocol)模式,对于它使用带有准备好的语句、执行等的常用 JDBC 接口(interface)没有多大意义。我们可以提供 execSQLScript关于定制 PGconnection但这对你没有多大帮助,因为像 Ant 的 <sql>任务不会使用它。您必须编写自定义任务。

相反,当 PgJDBC 进入 COPY 时,它不得不对客户撒谎。 COPY 之后的模式命令,它必须忽略 JDBC 规范,而不是真正做它应该做的来响应 JDBC 语句的执行。这很可能会破坏各种事情。

所以 - 目前,到目前为止,最简单的选择是执行 psql命令做你想做的事。

关于java - 使用 Ant 进行 JDBC COPY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52230619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com