通过 JDBC 对数据库执行一系列 SQL 语句。语句可以从使用 src 属性的文本文件读取,也可以从包含 SQL 标签的语句之间读取。
可以提供多个语句,用分号(或定义的 delimiter)分隔。语句中的各个行可以使用 --
、//
或 REM
在行首进行注释。
autocommit 属性指定在执行语句时是否应打开或关闭自动提交。如果自动提交打开,则每个语句将被执行并提交。如果关闭,则所有语句将作为一个事务执行。
onerror 属性指定在执行其中一个语句时发生错误时如何继续。可能的值是:continue
执行,只显示错误;stop
执行,记录错误但不使任务失败;abort
执行和事务,并使任务失败。
代理。一些 JDBC 驱动程序(包括 Oracle thin 驱动程序)使用 JVM 的代理设置将它们的 JDBC 操作路由到数据库。自 Apache Ant 1.7 起,在 Java 5 或更高版本上运行的 Ant 默认使用 操作系统的代理设置。因此,OS 代理设置需要有效,或者使用 -noproxy 选项禁用 Ant 的代理支持。
属性 | 描述 | 必需 |
---|---|---|
driver | jdbc 驱动的类名 | 是 |
url | 数据库连接 URL | 是 |
userid | 数据库用户名 | 是 |
password | 数据库密码 | 是 |
src | 包含 SQL 语句的文件 | 是,除非语句包含在标签内 |
encoding | 包含 SQL 语句的文件的编码 | 否;默认为默认 JVM 字符编码 |
outputencoding | 保存结果的文件的编码。自 Ant 1.9.4 起 | 否;默认为默认 JVM 字符编码 |
delimiter | 分隔 SQL 语句的字符串 | 否;默认为 ;; |
autocommit | 数据库连接的自动提交标志 | 否;默认为 false |
打印语句的结果集 | 否;默认为 false |
|
showheaders | 打印语句结果集的标题 | 否;默认为 true |
showtrailers | 打印受影响行数的尾部 | 否;默认为 true |
output | 结果集的输出文件。自 Ant 1.8 起,可以指定任何支持输出的资源(参见 注释)。 | 否;默认打印到 System.out |
append | 输出是否应追加到现有文件或覆盖现有文件。 | 否;默认为 false,如果 output 未指定文件系统目标,则忽略。 |
classpath | 用于加载驱动的类路径 | 否;默认为系统类路径 |
classpathref | 要使用的类路径,作为对在其他地方定义的路径的 引用 给出。 | 否;默认为系统类路径 |
onerror | 语句失败时要执行的操作:continue、 stop、 abort |
否;默认为 abort |
rdbms | 仅当此 rdbms 时执行任务 | 否;默认情况下不受限制 |
version | 仅当 rdbms 版本匹配时执行任务 | 否;默认情况下不受限制 |
caching | 任务是否应缓存加载器和驱动程序? | 否;默认为 true |
delimitertype | 控制分隔符是否只在单独一行上识别。 可以是 normal- 在行中的任何位置,或者 row,表示它必须在单独一行上 |
否;默认为 normal |
keepformat | 控制是否保留 SQL 的格式。 在加载包和过程时很有用。 | 否;默认为 false |
escapeprocessing | 控制 Java 语句对象是否执行转义替换。 有关详细信息,请参见 Statement 的 API 文档。自 Ant 1.6 起。 | 否;默认为 true |
expandproperties | 设置为 true 以在嵌套 SQL 中、任务内联或嵌套事务中打开属性扩展。自 Ant 1.7 起。 | 否;默认为 true |
rawblobs | 如果为 true,则在打印 BLOB 结果时将写入原始流而不是十六进制编码。自 Ant 1.7.1 起。 |
否;默认为 false |
failOnConnectionError | 如果为 false,如果任务无法连接到数据库,则只会打印警告消息,不会执行任何语句。自 Ant 1.8.0 起。 |
否;默认为 true |
strictDelimiterMatching | 如果为 false,则将不区分大小写地搜索分隔符(即 delimiter= go匹配 GO),并将忽略周围的空格(delimiter= go匹配 GO)。自 Ant 1.8.0 起。 |
否;默认为 true |
showWarnings | 如果为 true,则 SQLWarnings 将在 warning级别记录。自 Ant 1.8.0 起。 注意:即使属性设置为 false,适用于连接的警告也会在 verbose级别记录。 |
否;默认为 false |
treatWarningsAsErrors | 如果为 true,则 SQLWarnings 将被视为错误 - 并且通过 onError 属性选择的逻辑适用。自 Ant 1.8.0 起。 |
否;默认为 false |
csvColumnSeparator | 打印结果时使用的列分隔符。自 Ant 1.8.0 起。 | 否;默认为 , |
csvQuoteCharacter | 用于引用列值的字符。 如果设置,包含列分隔符或引用字符本身的列将用引用字符包围。如果引用字符出现在列值内部,则引用字符本身将被加倍。 注意:BLOB 值永远不会被引用。自 Ant 1.8.0 起。 |
否;默认情况下未设置(即从不进行引用) |
forceCsvQuoteChar | 如果为 true,则始终进行引用 |
否;默认情况下未设置(即仅在需要时进行引用) |
errorproperty | 在发生错误时要设置的属性的名称。自 Ant 1.8.0 起 | 否 |
warningproperty | 在发生警告时要设置的属性的名称。自 Ant 1.8.0 起 | 否 |
rowcountproperty | 要设置为第一个实际返回行计数的语句/事务更新的行数的属性的名称。自 Ant 1.8.0 起 | 否 |
使用嵌套的 <transaction>
元素指定要执行的多个命令块,这些命令块在同一个连接中但不同的事务中执行。当同一个模式下有多个文件要执行时,这特别有用。
属性 | 描述 | 必需 |
---|---|---|
src | 包含 SQL 语句的文件 | 是,除非语句包含在标签内 |
<transaction>
元素支持任何作为嵌套元素指定的 资源 或单个元素资源集合,以指定包含 SQL 语句的资源。
您可以通过嵌套的资源集合元素指定多个源。集合中的每个资源将在它自己的事务中运行。在 Ant 1.7 之前,只支持文件集。使用排序资源集合以获得可预测的事务顺序。
Sql
的 classpath 属性是 路径状结构,也可以通过嵌套的 classpath 元素设置。它用于加载 JDBC 类。
自 Ant 1.8.0 起
使用嵌套的 <connectionProperty>
元素指定连接到数据库时需要设置的附加 JDBC 属性。
属性 | 描述 | 必需 |
---|---|---|
name | 属性的名称 | 是 |
value | 属性的值 | 是 |
使用 org.database.jdbcDriver
连接到 url 中给出的数据库,作为 sa
用户,并执行文件 data.sql 中包含的 SQL 语句
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass" src="data.sql"/>
使用 org.database.jdbcDriver
连接到 url 中给出的数据库,作为 sa
用户,并执行文件 data.sql 中包含的 SQL 语句。还将属性 internal_logon
设置为值 SYSDBA
。
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass" src="data.sql"> <connectionProperty name="internal_logon" value="SYSDBA"> </sql>
使用 org.database.jdbcDriver
连接到 url 中给出的数据库,作为 sa
用户,并执行两个 SQL 语句,将数据插入 some_table 并截断 some_other_table。嵌套文本中的 Ant 属性不会被扩展。
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass"> insert into table some_table values(1,2,3,4); truncate table some_other_table; </sql>
请注意,您可能希望将语句包含在 <![CDATA[
... ]]>
部分中,这样您就不需要转义 <
、>
、&
或其他特殊字符。例如
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass"><![CDATA[ update some_table set column1 = column1 + 1 where column2 < 42; ]]></sql>
以下命令打开嵌套文本中的属性扩展(它纯粹是为了向后兼容而关闭),然后使用 Ant 属性在 HSQLDB 数据库中创建一个新用户。
<sql driver="org.hsqldb.jdbcDriver"; url="jdbc:hsqldb:file:${database.dir}" userid="sa" password="" expandProperties="true"> <transaction> CREATE USER ${newuser} PASSWORD ${newpassword} </transaction> </sql>
以下连接到 url 中给出的数据库,作为 sa
用户,使用 org.database.jdbcDriver
并执行文件 data1.sql、data2.sql 和 data3.sql 中包含的 SQL 语句,然后对 some_other_table 执行截断操作。
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass"> <transaction src="data1.sql"/> <transaction src="data2.sql"/> <transaction src="data3.sql"/> <transaction> truncate table some_other_table; </transaction> </sql>
以下示例与(并且如果还有更多与模式 data*.sql 匹配的文件,则可能会执行其他 SQL 文件)相同,但不保证 data1.sql 会在 data2.sql 之前运行。
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass"> <path> <fileset dir="."> <include name="data*.sql"/> </fileset> </path> <transaction> truncate table some_other_table; </transaction> </sql>
以下连接到 url 中给出的数据库,作为 sa
用户,使用 org.database.jdbcDriver
并执行文件 data.sql 中包含的 SQL 语句,并将输出管道到 outputfile.txt,并在系统类路径中搜索 /some/jdbc.jar 以及驱动程序类。
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass" src="data.sql" print="yes" output="outputfile.txt"> <classpath> <pathelement location="/some/jdbc.jar"/> </classpath> </sql>
以下仅当 RDBMS 为 oracle
且版本以 8.1.
开头时执行。
<sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass" src="data.sql" rdbms="oracle" version="8.1."> insert into table some_table values(1,2,3,4); truncate table some_other_table; </sql>