Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ant的JDBC复制_Java_Hibernate_Postgresql_Jdbc_Ant - Fatal编程技术网

Java 使用ant的JDBC复制

Java 使用ant的JDBC复制,java,hibernate,postgresql,jdbc,ant,Java,Hibernate,Postgresql,Jdbc,Ant,我有一个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"

我有一个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.
C:\Users\\\\antdb.xml:22:org.postgresql.util.PSQLException:错误:从stdin复制失败:JDBC驱动程序当前不支持复制操作。

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

PgJDBC不支持直接
COPY
,但它通过
CopyManager
API提供支持,您可以从PgJDBC返回的
java.sql.Connection
接口的
PGConnection
获取该API

不幸的是,您不能从普通SQL文件中使用它,在该文件中,您可以将
COPY
操作与其他命令混合使用

就我个人而言,我会使用Ant
任务运行
.sql
文件。这样,您就可以在SQL文件中包含
COPY
数据

启用PgJDBC来处理
复制
会很好,但这并不容易。在PostgreSQL中,它实际上是一种不同的协议模式,对于它来说,使用带有准备语句、执行等的普通JDBC接口没有多大意义。我们可以在定制的
PGconnection
上提供一个
execSQLScript
,但这对您没有多大帮助,因为像Ant的
任务这样的东西不会使用它。您必须编写一个自定义任务

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


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

PgJDBC不支持直接
COPY
,但它通过
CopyManager
API来实现,你可以从PgJDBC返回的
java.sql.Connection
接口获得

不幸的是,您不能从普通SQL文件中使用它,在该文件中,您可以将
COPY
操作与其他命令混合使用

就我个人而言,我会使用Ant
任务运行
.sql
文件。这样,您就可以在SQL文件中包含
COPY
数据

启用PgJDBC来处理
复制
会很好,但这并不容易。在PostgreSQL中,它实际上是一种不同的协议模式,对于它来说,使用带有准备语句、执行等的普通JDBC接口没有多大意义。我们可以在定制的
PGconnection
上提供一个
execSQLScript
,但这对您没有多大帮助,因为像Ant的
任务这样的东西不会使用它。您必须编写一个自定义任务

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


因此,目前为止,最简单的选择是只执行
psql
命令来执行您想要的操作。

PgJDBC不支持直接
COPY
,但它通过
CopyManager
API执行,您可以从
PGConnection
获得该命令。问题是,您不能从普通的
SQL
文件中使用它。就我个人而言,我会使用
psql
来运行
.sql
文件。我可以使用
psql
但如何将其用于ant?ant支持通过exec任务运行shell命令。也许你可以帮我一点忙。但是我做了
exec
像这样
“>
什么也没发生..找到答案了!-PgJDBC不支持直接复制,但它通过
CopyManager
API提供,您可以从
PGConnection
获取该API。问题是,您不能从普通的
SQL
文件中使用它。就我个人而言,我会使用
psql
来运行
.sql
文件。我可以使用
psql
但如何将其用于ant?ant支持通过exec任务运行shell命令。也许你可以帮我一点忙。但是我做了
exec
像这样
“>
什么都没发生..得到了答案!-我不知道详细的驱动程序,但我认为
从stdin复制的
可以集成在一个“JDBC兼容”中“通过一份事先准备好的声明。类似于
copy from stdin?
,其中
标记数据。然后通过
PreparedStatement.setCharacterStream()
提供数据本身。在后台,司机会把所有的东西都交给文案经理。非常有趣的一点。这是否适用于Ant的
任务和其他工具之类的代码,这些工具只会看到一个SQL块,其中包含内联的复制数据。。。不确定。我同意使用Ant任务和交互式SQL可能无法(很好地)工作-主要是因为它们需要处理标记数据结尾的(非标准)分隔符。我不知道详细的驱动程序,但我认为可以通过PreparedStatement以“JDBC兼容”的方式集成
copy from stdin
。类似于
copy from stdin?
,其中
标记数据。然后通过
PreparedStatement.setCharacterStream()
提供数据本身。在后台,司机会把所有的东西都交给文案经理。非常有趣的一点。这是否适用于Ant的
任务和其他工具之类的代码,这些工具只会看到一个SQL块,其中包含内联的复制数据。。。不确定。我同意Ant任务和交互式SQL可能无法正常工作——主要是因为它们需要处理标记t结束的(非标准)分隔符