利用Ant向数据库插入数据
一、 安装Ant
到ant的主页下载页面,下载最新版本(本文使用的版本为1.6.0)的Ant压缩包,解压缩后配置下ANT_HOME就行了,具体的配置步骤参考配置说明。下载地址如下:
http://ant.apache.org/bindownload.cgi
二、 Ant向数据库插入数据步骤
正如我们所知的,Ant有很多功能,比如拷贝文件、编译java文件、生成压缩包等。这里将简单说明如何利用Ant来执行指定的sql脚本文件,以向指定的SQL Server数据库中插入数据。
本文使用的所有文件都在下面地址可以下载到,下载地址如下:
http://download.csdn.net/detail/wgw335363240/3756593
文件的目录机构如下:
D:\Pirvate\Study
|
|______ant
|_____libs
|
|________jtds-1.2.jar
|
|_____SqlData
|
|________myData.sql
|
|_____my_build.xml
1. 下载Sql Server的驱动jar包
这里使用的驱动jar包是jtds-1.2.jar(SqlServer的驱动)。
2. 编写可以执行的sql脚本
这里编写了一个可以重复执行的脚本,具体的内容就不说明了。代码如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[STUDENT]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table STUDENT CREATE TABLE STUDENT ( STUDENTID INT PRIMARY KEY, NAME nvarchar(100), AGE int default(1), SEX int default(0) );insert into Student(StudentId,Name,Age,Sex) values(1,'张三',25,0); insert into Student(StudentId,Name,Age,Sex) values(2,'李四',20,1); insert into Student(StudentId,Name,Age,Sex) values(3,'王五',18,0); |
3. 编写buildfile文件
Buildfile文件是ant执行时默认会查找的文件,默认会在当前路径上查找名为build.xml的文件。这里我们把这个buildfile文件命名为“my_build.xml”。xml文件里的每个标签的说明可以参考下面的网址:
http://ant.apache.org/manual/index.html
4. 执行ant命令,导入数据
C:\Users\Administrator>ant -buildfile D:\Private\Study\ant\my_build.xml Buildfile: D:\Private\Study\ant\my_build.xml displayInfo:[echo] 根目录:D:\Private\Study\ant [echo] 开始向DB中插入数据 insertDataToDB:[sql] Executing file: D:\Private\Study\ant\SqlData\myData.sql [sql] 1 of 1 SQL statements executed successfully BUILD SUCCESSFUL Total time: 8 seconds C:\Users\Administrator> |
ant 命令后的“-buildfile”参数是表明当前ant要执行的builfile文件所在的路径。
5. 查看Sql Server数据库
STUDENTID | NAME | AGE | SEX |
1 | 张三 | 25 | 0 |
2 | 李四 | 20 | 1 |
3 | 王五 | 18 | 0 |
注意:
[1] 这里ant执行的sql Server数据库脚本,由于Sql Server数据库脚本中的分号是可有可无的,所以利用Ant执行时一般没什么问题
[2] 当我们利用ant来执行Oracle脚本的时候,在编写脚本的时候我们要注意,因为Oracle脚本中的sql语句是利用分号来分割的,而ant的buildfile的xml文件中对语句的默认分割也是分号,这时就会产生冲突。通常的解决办法可以修改build.xml中“sql”标签中的“delimiter”属性为“!”,同时在sql脚本中的语句块的结束位置添加“!”即可。下面是是一段可以在ant中正确执行的脚本(注意语句块中的红色感叹号):
declare v_count number(10); begin SELECT count(*) into v_count FROM xxxx WHERE CKey = 'KM_MAP_NEWDOC_PERCENT' ; if(v_count<=0 or v_count is null) then insert into xxxx (configid,ctype,ckey,cvalue,cdesc,encrypted,siteid) select max(configid)+1,21,'KM_MAP_NEWDOC_PERCENT','0.7','聚类地图中新知识点的规则定义,即新知识占所有知识的比例大于此处设置的阈值,默认值为0.7',0,0 from wcmconfig; update wcmid set nextid=0 where tablename='WCMCONFIG'; end if; end;! --增加是否允许创建子场景(即是否为叶子节点)的字段 2011.10.12 by liwei declare v_count number(10); begin SELECT count(*) into v_count FROM cols WHERE table_name = 'xxxx' and column_name='LEAFFLAG' ; if(v_count<=0 or v_count is null) then alter table xxxx add LeafFlag number default 0 not null; end if; end;! |
[3] Ant执行Oracle的其他相关原则
a) 去掉commit、“set serverout off”、“set serverout on”、“set escape on”,和包含有“exec”的语句
b) 去掉"/"
c) 语句分隔符最好使用“分隔符” + “换行”,如:
ALTER TABLE xxx ADD (temp_advtoolbar CLOB)! UPDATE xxx SETtemp_advtoolbar = advtoolbar! |