我有一个使用 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
您可以从以下位置获取 APIPGConnection
的接口java.sql.Connection
由 PgJDBC 返回。
不幸的是,你不能从混合的纯 SQL 文件中使用它COPY
与其他命令的操作。
就我个人而言,我会花钱去psql
to run .sql
使用 Ant 的文件<exec>
任务。这样你就可以包括COPY
SQL 文件中的内联数据。
最好启用 PgJDBC 来处理COPY
,但这并不容易。它实际上是 PostgreSQL 中的一种不同的协议模式,使用带有准备好的语句、执行等的常用 JDBC 接口没有多大意义。我们可以提供一个execSQLScript
就习俗而言PGconnection
但这对你没有多大帮助,因为像 Ant 这样的东西<sql>
任务不会使用它。您必须编写一个自定义任务。
相反,PgJDBC 必须对客户端撒谎——当它进入时COPY
模式后COPY
命令,它必须忽略 JDBC 规范,并且不会真正执行它应该执行的操作来响应 JDBC 语句的执行。这可能会破坏各种各样的东西。
所以 - 目前为止,最简单的选择就是执行psql
命令做你想做的事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)