Mih*_* L. 1 java ant postgresql hibernate jdbc
我有一个包含 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>
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
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.
Run Code Online (Sandbox Code Playgroud)
不知道我们是否可以在这里使用 postgresql.copy 类?
PgJDBC 不COPY直接支持,但它通过CopyManagerAPI支持,您可以从PgJDBC 返回的PGConnection接口中java.sql.Connection获取。
不幸的是,您不能在将COPY操作与其他命令混合的普通 SQL 文件中使用它。
就个人而言,我会使用 Ant任务psql来运行.sql文件<exec>。这样您就可以COPY在 SQL 文件中内嵌数据。
启用 PgJDBC 来处理 会很好COPY,但这并不容易。它实际上是 PostgreSQL 中的一种不同的协议模式,对于它使用带有准备好的语句、执行等的常用 JDBC 接口没有多大意义。我们可以提供一个execSQLScript关于自定义的,PGconnection但这对你没有多大帮助,因为像 Ant 的<sql>任务这样的东西不会使用它。您必须编写自定义任务。
相反,PgJDBC 不得不对客户端撒谎——当它COPY在一个COPY命令之后进入模式时,它必须忽略 JDBC 规范,而不是真正做它应该做的来响应 JDBC 语句的执行。这很可能会破坏各种事情。
所以 - 现在,到目前为止,最简单的选择是执行psql命令来做你想做的事。
| 归档时间: |
|
| 查看次数: |
7115 次 |
| 最近记录: |