如何使用ANT自动进行数据库的相关操作
赵才文([email protected])版权所有
如今的系统,无论是基于CS的还是基于BS的架构,如果与数据库打交道,那么程序员在开发系统的时候,或者在进行单元测试的时候,经常要对数据库进行一些重复的操作,例如初始化,建库,删除表格,插入测试数据等等。每次要做测试的时候,因为要求环境为最基本、最初始的环境,所以程序员必须手动的重复的执行某些sql语句,使得我们程序员的工作效率十分的低下。
ANT,是apache组织推出的基于java的构建工具,非常象C世界里面的MAKE工具,只要你写好构建程序的教本,就好比是戏剧的剧本一样,它会自动的按照你的要求去编译,运行、发布等等。
ANT的下载地址是:http://ant.apache.org
ANT基本上是由一个一个的TARGET(任务)构成的,你可以在一个Project内部建立N个TARGET,并且每个TARGET可以独立也可以依存于(depends)其他的任务,也就是说,只有其他的任务完成的时候,这个任务才有可能执行。
ANT里面有许多内置的task,这些task可以用来构建target,比如,你要完成一个编译的任务,那么你就可以引用这个task(javac),看上去象是java内部的命令,其实ant对他进行了封装。例如:
<javac srcdir="${src}"
destdir="${build}"
classpath="xyz.jar"
debug="on"
/>
这个任务将会编译src里面所有的源代码到目标文件夹build,使用的classpath是xyz.jar,并且是debug模式的。
ANT里面还有一个非常有用的task就是与数据库操作相关的一个task(sql),它的原理如下:
通过JDBC执行一系列的sql语句,语句可以从文本文件中读取,也可以通过包含的方式放在任务中。语句之间的间隔使用的是“;”或者自己定义的分割符号。注释的语句使用的是REM或者“――”。可以使用autocommit属性来控制语句是否真的被提交,还可以使用onerror属性来控制当执行的过程中遇到错误的时候应该怎么办?(abort,continue,stop)。
它有下列属性:
Attribute
Description
Required
driver
Class name of the jdbc driver
Yes
url
Database connection url
Yes
userid
Database user name
Yes
password
Database password
Yes
src
File containing SQL statements
Yes, unless statements enclosed within tags
encoding
The encoding of the files containing SQL statements
No - defaults to default JVM encoding
delimiter
String that separates SQL statements
No, default ";"
autocommit
Auto commit flag for database connection (default false)
No, default "false"
Print result sets from the statements (default false)
No, default "false"
showheaders
Print headers for result sets from the statements (default true)
No, default "true"
output
Output file for result sets (defaults to System.out)
No (print to System.out by default)
append
whether output should be appended to or overwrite an existing file. Defaults to false.
No
classpath
Classpath used to load driver
No (use system classpath)
classpathref
The classpath to use, given as a reference to a path defined elsewhere.
No (use system classpath)
onerror
Action to perform when statement fails: continue, stop, abort
No, default "abort"
rdbms
Execute task only if this rdbms
No (no restriction)
version
Execute task only if rdbms version match
No (no restriction)
caching
Should the task cache loaders and the driver?
No (default=true)
例子:
假如,我们有一个任务,就是每次程序运行的时候我们都要初始化整个数据库。要执行的sql语句如下:
drop table CHILD;
drop table TOY;
create table CHILD (id number,name varchar(200));
create table TOY(t_id number, c_id number,description varchar(200));
insert into child values(1,”tom”);
insert into toy values(1,1,”a baby”);
我们把上述语句存为一个文件叫ddl.sql,然后建立ant教本如下:
<project name=”test” basedir=”.”>
<target name=”dbinit”>
<echo message="create database schema...If error occurs,let it be" />
<sql
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:test"
userid="test"
password="test"
classpathref="classes12.jar"
src="${ddl.sql}"
onerror="continue"
/>
</target>
</project>
这样,我们已经建立好了ant的教本,把它另外存储为build.xml,在命令行方式下面,运行下面的命令:
ant dbinit
结果如下:
dbinit:
[echo] create database schema...If error occurs,let it be
[sql] Executing file: D:\jbproject\test\db\ddl.sql
[sql] 6 of 6 SQL statements executed successfully
BUILD SUCCESSFUL
这样我们每次的工作就减少了很多了。
本文地址:http://com.8s8s.com/it/it17571.htm