ANTのSQL Taskで独自のJavaでSQLスクリプトファイルを実行する機能を実現
AD:
前にJava実行SQLスクリプトファイルを記載しましたが、この中には完全に自分でコードを書いてスクリプトのSQL文ごとに分離されており、多くの欠陥があります.当時、ANT自体がSQL文やスクリプトを強力に実行するSQL Taskが利用できることはよくわかりませんでした.以下ではbuildについて簡単に説明します.xmlでSQL文またはスクリプトを実行します.Javaコードの中でどのようにANTのSQLExecクラスを呼び出してSQLスクリプトを実行して、最後にantを考慮します.jarの頭は大きいと言っても小さくなく、1 Mが多く、SQLスクリプトの実行にのみ使用する場合、ほとんどのコードはゴミであるため、同じ抽出に必要な2つのクラスJDBCTAskとSQLExecから、対antを完全に除去する.JArパッケージの依存.
1、build.xmlでsqlスクリプトを実行する
autocommit="true" url="jdbc:oracle:thin:@10.128.x.x:1521:xxsid"src="data.sql"print="yes"output=
"sql_out.txt">
autocommit="true"url="jdbc:oracle:thin:@10.128.x.x:1521:xxsid"src="data.sql"print="yes"output=
"sql_out.txt">
でも...には、1つ以上のsql文が直接含まれ、デフォルトのセミコロンで区切られます.スクリプトファイルdata.sqlには複数の文を書くことができ、デフォルトのセミコロン区切りでもあり、--コメントを含めることができます.はっきり言って、基本的にPL/SQL Developerでどのように書くことができて、あなたのスクリプトファイルの中でもどのように書くことができて、しかもMySQL//のような注釈符をサポートすることができます.
以下のようなSQLスクリプトの内容(data.sql)
--
insert into test_table values(1,'Unmi');
select *
from test_table
where id>0;
--and name like '%Unmi' ;
-- ID 1
delete from test_table where id=1;
--
insert into test_table values(1,'Unmi');
select *
from test_table
where id>0;
--and name like '%Unmi' ;
-- ID 1
delete from test_table where id=1;
ant :
sql:
[sql] Executing resource: E:\Workspace\Eclipse\TestAnt\src\data.sql
[sql] 3 of 3 SQL statements executed successfully
sql_out.text :
1 rows affected
ID,NAME
1,Unmi
0 rows affected
1 rows affected
ただし、ANTが実行するSQL文では、行末のコメント"--"はサポートされていません.これは改善されます.
2、Javaコード呼び出しANTのSQLExec実行スクリプトファイル
package com.unmi;
import java.io.*;
import org.apache.tools.ant.*;
import org.apache.tools.ant.taskdefs.*;
import org.apache.tools.ant.types.*;
/**
* ant.jar SQLExec SQL
* @author Unmi
*/
public class AntExecSql {
/**
* @param args
*/
public static void main(String[] args) {
SQLExec sqlExec = new SQLExec();
//
sqlExec.setDriver("oracle.jdbc.driver.OracleDriver");
sqlExec.setUrl("jdbc:oracle:thin:@10.128.x.x:1521:xxsid");
sqlExec.setUserid("xxuser");
sqlExec.setPassword("xxpass");
//
sqlExec.setSrc(new File("src/data.sql"));
//
sqlExec.setOnerror((SQLExec.OnError)(EnumeratedAttribute.getInstance(
SQLExec.OnError.class, "abort")));
sqlExec.setPrint(true); //
// sql.out ; ,
sqlExec.setOutput(new File("src/sql.out"));
sqlExec.setProject(new Project()); // ,
sqlExec.execute();
}
}
package com.unmi;
import java.io.*;
import org.apache.tools.ant.*;
import org.apache.tools.ant.taskdefs.*;
import org.apache.tools.ant.types.*;
/**
* ant.jar SQLExec SQL
* @author Unmi
*/
public class AntExecSql {
/**
* @param args
*/
public static void main(String[] args) {
SQLExec sqlExec = new SQLExec();
//
sqlExec.setDriver("oracle.jdbc.driver.OracleDriver");
sqlExec.setUrl("jdbc:oracle:thin:@10.128.x.x:1521:xxsid");
sqlExec.setUserid("xxuser");
sqlExec.setPassword("xxpass");
//
sqlExec.setSrc(new File("src/data.sql"));
//
sqlExec.setOnerror((SQLExec.OnError)(EnumeratedAttribute.getInstance(
SQLExec.OnError.class, "abort")));
sqlExec.setPrint(true); //
// sql.out ; ,
sqlExec.setOutput(new File("src/sql.out"));
sqlExec.setProject(new Project()); // ,
sqlExec.execute();
}
}
プロジェクトにantを導入する必要がある.JArは、コードにおいてsqlExecを実行する必要がある.setProject(new Project()); 無意味な操作.その他の使い方や効果は前と似ています.
3、ant.JArから必要なクラスSQLExecとJDBCTAskを抽出
使用コードは次のとおりです(AntSqlExec.java):
package com.unmi.sql;
import java.io.*;
/**
* Java Sql
* @author Unmi
*/
public class AntSqlExec {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
SQLExec sqlExec = new SQLExec();
//
sqlExec.setDriver("oracle.jdbc.driver.OracleDriver");
sqlExec.setUrl("jdbc:oracle:thin:@10.128.x.x:1521:xsid");
sqlExec.setUserid("xxuser");
sqlExec.setPassword("xxpass");
//
sqlExec.setSrc(new File("src/data.sql"));
//
sqlExec.setOnerror(SQLExec.ON_ERROR_ABORT); //abort/conitue/stop
sqlExec.setPrint(true); //
// sql.out ; ,
sqlExec.setOutput(new File("src/sql.out"));
sqlExec.execute();
}
}
package com.unmi.sql;
import java.io.*;
/**
* Java Sql
* @author Unmi
*/
public class AntSqlExec {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
SQLExec sqlExec = new SQLExec();
//
sqlExec.setDriver("oracle.jdbc.driver.OracleDriver");
sqlExec.setUrl("jdbc:oracle:thin:@10.128.x.x:1521:xsid");
sqlExec.setUserid("xxuser");
sqlExec.setPassword("xxpass");
//
sqlExec.setSrc(new File("src/data.sql"));
//
sqlExec.setOnerror(SQLExec.ON_ERROR_ABORT); //abort/conitue/stop
sqlExec.setPrint(true); //
// sql.out ; ,
sqlExec.setOutput(new File("src/sql.out"));
sqlExec.execute();
}
}
SQLExecのため.JAvaとJDBCTAsk.JAvaコード行が多く、リストするのが不便で、SQLExec(FromAnt)をダウンロードすることができる.rarを解いてみる.抽出されたクラスは、ANTのJarパッケージに依存せず(org.apache.*パッケージを導入する必要はなくなりました)、コードを簡略化し、非リレーショナル・データベースの設定、データベース・バージョンの設定、拡張属性の設定、カスタム・クラス・ローダによるclasspath属性のロード・ドライバの設定など、不要な機能を削除しました.前述したように、行末のコメント「--」や「//」はサポートされていないのが残念なので、現在使用されています.
前述したのはSQLスクリプトを実行する機能がほとんどですが、SQLExecでは物事制御の機能も提供されています.例えばautoCommit属性の設定は、複数のSQLスクリプトファイルを同時に呼び出すことができ、複数のSQLスクリプトを同じものにすることができます.より細かい使い方は、修正後のSQLExecで発掘する必要があります.JAvaとJDBCTAsk.JAvaユーティリティはすべて保持されています.