gpt4 book ai didi

java - JDBC COPY 与 Ant

转载 作者:行者123 更新时间:2023-11-29 12:37:46 24 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 返回。

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

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

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

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

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

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

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