Java 执行 SQL 脚本文件 收藏
是拷贝的别人的,以备学习
view plaincopy to clipboardprint?
01.package com.unmi.db;
02.
03.import java.io.FileInputStream;
04.import java.io.InputStream;
05.import java.sql.Connection;
06.import java.sql.Statement;
07.import java.util.ArrayList;
08.import java.util.Arrays;
09.import java.util.List;
10.
11./**
12. * 读取 SQL 脚本并执行
13. * @author Unmi
14. */
15.public class SqlFileExecutor {
16.
17. /**
18. * 读取 SQL 文件,获取 SQL 语句
19. * @param sqlFile SQL 脚本文件
20. * @return List<sql> 返回所有 SQL 语句的 List
21. * @throws Exception
22. */
23. private List<String> loadSql(String sqlFile) throws Exception {
24. List<String> sqlList = new ArrayList<String>();
25.
26. try {
27. InputStream sqlFileIn = new FileInputStream(sqlFile);
28.
29. StringBuffer sqlSb = new StringBuffer();
30. byte[] buff = new byte[1024];
31. int byteRead = 0;
32. while ((byteRead = sqlFileIn.read(buff)) != -1) {
33. sqlSb.append(new String(buff, 0, byteRead));
34. }
35.
36. // Windows 下换行是 \r\n, Linux 下是 \n
37. String[] sqlArr = sqlSb.toString().split("(;\\s*\\r\\n)|(;\\s*\\n)");
38. for (int i = 0; i < sqlArr.length; i++) {
39. String sql = sqlArr[i].replaceAll("--.*", "").trim();
40. if (!sql.equals("")) {
41. sqlList.add(sql);
42. }
43. }
44. return sqlList;
45. } catch (Exception ex) {
46. throw new Exception(ex.getMessage());
47. }
48. }
49.
50. /**
51. * 传入连接来执行 SQL 脚本文件,这样可与其外的数据库操作同处一个事物中
52. * @param conn 传入数据库连接
53. * @param sqlFile SQL 脚本文件
54. * @throws Exception
55. */
56. public void execute(Connection conn, String sqlFile) throws Exception {
57. Statement stmt = null;
58. List<String> sqlList = loadSql(sqlFile);
59. stmt = conn.createStatement();
60. for (String sql : sqlList) {
61. stmt.addBatch(sql);
62. }
63. int[] rows = stmt.executeBatch();
64. System.out.println("Row count:" + Arrays.toString(rows));
65. }
66.
67. /**
68. * 自建连接,独立事物中执行 SQL 文件
69. * @param sqlFile SQL 脚本文件
70. * @throws Exception
71. */
72. public void execute(String sqlFile) throws Exception {
73. Connection conn = DBCenter.getConnection();
74. Statement stmt = null;
75. List<String> sqlList = loadSql(sqlFile);
76. try {
77. conn.setAutoCommit(false);
78. stmt = conn.createStatement();
79. for (String sql : sqlList) {
80. stmt.addBatch(sql);
81. }
82. int[] rows = stmt.executeBatch();
83. System.out.println("Row count:" + Arrays.toString(rows));
84. DBCenter.commit(conn);
85. } catch (Exception ex) {
86. DBCenter.rollback(conn);
87. throw ex;
88. } finally {
89. DBCenter.close(null, stmt, conn);
90. }
91. }
92.
93. public static void main(String[] args) throws Exception {
94. List<String> sqlList = new SqlFileExecutor().loadSql(args[0]);
95. System.out.println("size:" + sqlList.size());
96. for (String sql : sqlList) {
97. System.out.println(sql);
98. }
99. }
100.}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hongmin118/archive/2009/09/24/4588941.aspx
分享到:
相关推荐
主要为大家详细介绍了Java执行SQL脚本文件到数据库的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
批量执行sql脚本的web工程,通过myeclipse导入工程即可,经过测试可以批量导入oracle与sql server2005的脚本,而且是web页面的向导式执行*.sql脚本文件 支持事务,任何执行过程出现异常,均会提示并且回滚操作,页面...
使用jfinal编写的本地应用,压缩文件里包括了eclipse本程序的源代码和可执行的jar文件。 通过配置数据库连接信息和要执行的sql语句,可实现定时执行多个sql语句。 所要执行的语句只能是写死的,可支持sqlserver ...
java写的sql生成器,可以自动生成sql语句。
执行Flink SQL 文件的客户端 Flink 版本:flink 1.11.0 其他版本待测试 是在的基础上修改而来 使用简单方便 需要指定FLINK_HOME 下载上面code中的jar包 修改 sql-submit.sh 脚本中jar包的路径 和指定 FLINK_HOME jar...
【毕业设计】基于SSH(Struts2+...注意:打开根目录里面的sql文件,在数据库软件中建一个lostfound数据库,然后运行sql文件。还有数据库默认用户名root和密码123456,如果需要修改请到src下面修改db.properties文件
通过Excel文件中的数据,进行转化生成为insert 执行文件 目前开发只是简单应用. 默认 只实现第一个sheet工作表进行生成文件.第一行为表列名,数据由第二行开始. sheet工作表名为表名处理. 技术交流可以QQ:332795521
运行环境 Linux/Windows 毕业设计基于SSM/Springboot的商城项目,一个简单的商城,界面友好,但是不是很漂亮。实现了商城所有基本功能。 作为改写的基础模板,可以增加或者改写的功能: [已实现] 增加word和excel...
SQLSERVER(可修改IP和端口port)和ORACLE生成批量执行...sql版本把控制台的内容复制出来,粘贴到bat文件中,单击执行就ok oracle版本把控制台生成的脚本在,plsql中用新建个“命令窗口”,把控制台的脚本粘贴执行就ok
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
宾馆管理系统,这是我数据库课程的课程设计,数据库使用的是SQL Server,界面用JAVA ...内含SQL脚本文件、Java源代码、可执行文件和使用说明文档等。 同做课设有需求的可以参考下。完成得比较粗糙,求轻喷( *⊙~⊙)。
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
人才中心简历系统,主要是针对人才中心的简历管理开发的比较简单的建立管理系统。 主要是应聘者进行简历填写,工作人员进行简历的管理 可运行的war文件,还有sql脚本文件。
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
航班预订系统 软件开发课程设计 png为项目运行的截图 开发环境 Java --> SSM + Jsp + MySql SQL文件 航班表 flight.sql 用户表 user.sql 订单表 orders.sql 功能如下 登录 and 注册 查询 and 预订 订单显示
2、在你的数据库中运行t_exam.sql脚本文件,并修改mybatis.xml中的数据库信息 管理员账号、密码: 1000 admin 普通用户账号、密码: 1026 123456 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
2、在MySQL中创建数据库,使用MySQL Control Center执行database目录下的dbscript.sql数据库脚本文件创建数据库SQL语句创建数据库和表及数据; 3、设置数据库连接配置,修改WebRoot\WEB-INF的jdbc.properties文件,...