透過 JDBC 執行一系列 SQL 陳述式至資料庫。陳述式可以透過 src 屬性從文字檔讀取,或從 SQL 標籤之間讀取。
可以提供多個陳述式,並以分號 (或定義的 delimiter) 分隔。陳述式內的個別行可以在行首使用 --
、//
或 REM
註解。
autocommit 屬性指定在執行陳述式時是否開啟自動提交。如果自動提交開啟 on
,每個陳述式都會執行並提交。如果關閉 off
,所有陳述式都會作為一個交易執行。
onerror 屬性指定在執行其中一個陳述式時發生錯誤時如何進行。可能的數值有:continue
執行,只顯示錯誤;stop
執行,記錄錯誤但不要讓任務失敗;abort
執行和交易,並讓任務失敗。
代理。某些 JDBC 驅動程式 (包括 Oracle thin 驅動程式) 使用 JVM 的代理設定將其 JDBC 作業路由至資料庫。自 Apache Ant 1.7 起,在 Java 5 或更新版本上執行的 Ant 預設為 使用作業系統的代理設定。因此,作業系統代理設定必須有效,或使用 -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 陳述式物件是否應執行跳脫字元替換。 請參閱 陳述式的 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>
下列指令會使用 org.database.jdbcDriver
連線到 url 中指定的資料庫,並使用 sa
使用者身分執行 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>
下列指令會使用 org.database.jdbcDriver
連線到 url 中指定的資料庫,並使用 sa
使用者身分執行 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>