Ant工具与MySQL数据库
为了实现Ant与MySQL数据库的整合,在开始项目之前必须先掌握必要的技术基础
一、备份及还原数据库
需要导出数据的原因繁多,在其中一项重要的用途是为了进行数据库备份,在另一项用途则是为了使导出的数据得以共享
1.1 mysqldump程序
我们可以轻松地使用mysqldump程序来进行导入和导出操作。安装于mysql实用工具包中的mysql binaries目录中有一个叫做mysqldump的程序。该程序能够将整个数据库加载到一个独立的文件文本中。该文件包含了构建和提取所需的所有SQL语句。
我在Windows控制台进行过一次测试得出了结论:运行命令时请确保最后一个不带分号;在登录过程中与MySQL登录类似地,请提供用户名和密码。例如使用以下两种常见的方法:mysqldump -uroot -p ~ 或 mysqldump -uroot -proot ~。
<1>将数据库保存到文件中
mysqldump -u账户 -p密码 [数据库] > [导出文件名称]
<2>将特定表保存到文件中
mysqldump -u账户 -p密码 [数据库] [数据表] > [导出文件名称]
注意:导出多个表的时候,在数据表之间用空格。
<3>使用查询语句
mysqldump -u账户 -p密码 -where="" [数据库] [数据表] > [导出文件名称]
下面会对-where参数进行详解。
mysqldump工具的选项
有关选项的具体说明,请参阅:mysqldump参数详细说明
下文中介绍的选项一定要注意大小写。
- --complete-insert或-c:每一个产生INSERT语句加上具体字段(列)的名称。
- --delayed-insert:在INSERT命令中加入DELAY选项。
- -F或者-flush-logs:在执行导出之前将会刷新MySQL服务器的日志。
- -f或者-force:在发生错误的情况下,仍继续导出。
- --full:将附加信息也加到CREATE TABLE的语句中。
- -l或者--lock-tables:导出数据表时服务期将会给表加锁。
- -t或者-no-create-info:该选项使得mysqldump命令不创建CREATE TABLE语句,在用户只需要数据而不需要DDL(数据库定义语句)时很方便。
- -d或者-no-data:该选项使得mysqldump命令不创建INSERT语句,在用户只需要DDL语句时,可以使用这个选项。
- --opt:此选项将打开所有会提高文件导出速度和创建一个可以更快导入的文件的选项。
- -q或者-quick:这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到时就写入文件中。
- -T path或者-tab=path:这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt。路径名是存放这两个文件的目录。(目录必须已经存在,并且命令的使用者有对文件的特权)
- -w “Where Clause”或者-where="Where Clause":筛选将要放到导出文件的数据。
1.2 Select into outfile功能
导出或导入数据的内容,不包括表的结构。
简单的应用:
SELECT * INTO OUTFILE 'D:\ tablae.sql' FIELDS TERMINATED BY ',' FROM account;
作用:从account表中提取所需数据并将其目标位置设为'D:\ tablae.sql'字段,并按照逗号分隔各字段值
1.3 mysqlimport程序
可以把一个文本文件(text file)导入到指定的数据库和表中。
mysqlimport [数据库名称] [文本文件]
注意事项:文件标识符应与目标数据库表中的表名保持一致,并确保数据类型匹配;文档结构应当遵循现有数据表的标准格式。
常用选项:
- -d或delete:在新增新数据之前清空数据表的内容
- -f或force:即使遇到错误也会继续插入新数据
- -i或--ignore:跳过具有相同唯一键的数据行
- -l或lock-tables:在插入新数据前锁定表格
- -r或replace:与--i相反的作用;将相同唯一键的数据行替换掉
- --fields-enclosed-by=char:指定文本文件中记录用什么符号包裹
- --lines-terminated-by=str:指定文本文件中行与行之间的分隔字符串
二、Ant SQL任务
2.1 Ant SQL任务属性及功能
- driver属性:用于指定JDBC的驱动类名称(必须的)
- url属性:用于指定数据库连接串(必须的)
- userid属性:用于指定访问数据库的用户名称(必须的)
- password属性:用于指定数据库访问的密码(必须的)
- src属性:用于指定要执行的包含SQL语句的文件,文件中的所有SQL语句将会被执行
- encoding属性:用于指定SQL语句的文件的编码方式
- delimiter属性:用于指定SQL语句的分隔符,默认为“;”
- autocommit属性:用于设定数据库连接是否自动提交相当于JDBC中的conntection.setAutoCommit(false),默认为false
- print属性:用于指定是否从SQL语句中打印结果集,默认为false
- showheaders属性:用于指定执行SQL语句时是否打印结果集的头,默认为true
- output属性:用于指定结果集的输出文件,默认为输出到System.out中
- append属性:用于指定输出信息是否附加到或覆盖已存在的文件,默认为false
- classpath属性:用于指定JDBC驱动的位置,默认时使用系统的classpath
- classpathref属性:用于指定引用的path类型,path类型指定classpath的位置
- onerror属性:用于指定当系统出错时的处理方式。可取值continue(继续执行),stop(停止运行),abort(忽略)。默认为abort
- rdbms属性:用于指定具体的关系数据库,只有对这种数据库操作时才能运行这个任务。默认时为忽略,不需要指定具体的数据库
- version属性:用于指定关系数据库的版本,只有在指定的版本下才会执行这个任务。默认时忽略这个属性,不需要指定具体的数据库版本
- caching属性:用于指定进行加载驱动时是否使用缓存。默认为true,代表使用
- delimitertype属性:用于指定分隔符的类型是否每行只有一个分隔符。可取值为normal,代表每行分隔符可为任意多个和在任意位置,取值为rows代表该行只有一个分隔符
- keepformat属性:用于指定是否保持SQL语句的格式,当对包或存储过程操作时有用,默认为false
- escapeprocessing属性:用于指定使用Java statement对象而不替换,默认为true
在进行多组SQL语句执行时,在数据库环境中通常会遇到事务管理的需求。Ant通过提供
2.2 执行单个SQL文件中语句的例子
<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/数据库"
userid="root"
password="root"
src="data.sql
>
</sql>
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/数据库"
userid="root"
password="root"
src="data.sql
>
</sql>
2.3 不通过文件直接执行SQL命令的例子
<sql
.....
>
sql语句
</sql>
2.4 执行包含特殊字符的SQL命令
<sql
.....
><![CDATA[
SQL语句
]]>
</sql>
.....
><![CDATA[
SQL语句
]]>
</sql>
2.5 对多个SQL文件的操作进行事务处理的例子
<sql
.....
>
<transaction src="data1.sql"/>
<transaction src="data2.sql"/>
</sql>
2.6 把操作的输出信息定向到外部文件中的例子
<sql
.....
print="yes"
output="outputfile.txt"
<classpath>
<pathelement location="/some/jdbc.jar"/>
</classpath>
>
三、使用Ant工具对MySQL进行CRUD操作
通过Ant对antbook_user表进行CRUD操作。
<?xml version="1.0"?>
<project name="sqlSample" default="execute" basedir=".">
<!-- 定义全局类库位置,包括JDBC的jar文件 -->
<path id="classpath">
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- 执行插入和更新操作 -->
<target name="execute" >
<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/antbook"
userid="antbook"
password="antbook"
classpathref="classpath"
>
insert into antbook_user (name,password,gender,email,createtime)
values('greentomato','gt',1,'abcd@antbook.com',now());
update antbook_user set email='abcd_update@antbook.com' where name='greentomato';
</sql>
</target>
<!-- 执行查询语句 -->
<target name="query" >
<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/antbook"
userid="antbook"
password="antbook"
classpathref="classpath"
print="true"
>
select id,name,password,gender,email from antbook_user;
</sql>
</target>
<!-- 执行删除操作 -->
<target name="delete">
<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/antbook"
userid="antbook"
password="antbook"
classpathref="classpath"
print="true"
>
delete from antbook_user where name='greentomato';
select id,name,password,gender from antbook_user;
</sql>
</target>
</project>
四、使用Ant工具导出数据到MySQL数据库
<?xml version="1.0"?>
<project name="exportDataSample" default="exportData" basedir=".">
<path id="classpath">
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
</path>
<!-- 执行导出数据库到文件的操作 -->
<target name="exportData">
<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/firpro"
userid="root"
password="root"
classpathref="classpath"
print="true"
>
<![CDATA[
SELECT * INTO OUTFILE 'E:\ Workspace\ ceshi\ outfile.txt' FIELDS TERMINATED BY ',' FROM account;
]]>
</sql>
</target>
</project>
五、使用Ant工具导入数据到MySQL数据库
<?xml version="1.0"?>
<project name="exportDataSample" default="execute" basedir=".">
<path id="classpath">
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
</path>
<!-- 执行SQL命令 -->
<target name="execute">
<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306"
userid="root"
password="root"
classpathref="classpath"
print="true"
>
<transaction src="data.sql"/>
</sql>
</target>
</project>
参考资料:
《Ant开发及整合应用详解》

