使用java以及jdbc不使用第三方库执行sql文件脚本

2017年02月15日 15:51:45

阅读数:660

使用java执行sql脚本的方法 
解析sql脚本,删除不必要的注释和空行 
将语句按分号拆开

并将最终的语句放入batch里面 最后进行执行

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; /*
* 使用java以及jdbc执行sql脚本的工具示例代码
*/ public class SqlHelper {
public static void main(String[] args){
String path = "文件地址字符串";
String sql = getText(path);
List<String> sqlarr = getSql(sql);
for(int i=0; i<10; i++){
System.out.println(i+":"+sqlarr.get(i));
}
try{
SqlHelper.execute(getConn(),sqlarr);
}catch(Exception e){
e.printStackTrace();
}
} private static Connection getConn() {
String driver = "com.mysql.jdbc.Driver";
String url = "数据库连接";
String username = "账号";
String password = "密码";
Connection conn = null;
try {
Class.forName(driver); //classLoader,加载对应驱动
conn = (Connection) DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void execute(Connection conn, List<String> sqlFile) throws Exception {
Statement stmt = null;
stmt = conn.createStatement();
for (String sql : sqlFile) {
sql = sql.trim();
if(sql!=null&&!sql.equals(""))
stmt.addBatch(sql);
}
int[] rows = stmt.executeBatch();
System.out.println("Row count:" + Arrays.toString(rows));
conn.close();
} /*
* getText方法吧path路径里面的文件按行读数来放入一个大的String里面去
* 并在换行的时候加入\r\n
*/
public static String getText(String path){
File file = new File(path);
if(!file.exists()||file.isDirectory()){
return null;
}
StringBuilder sb = new StringBuilder();
try{
FileInputStream fis = new FileInputStream(path);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String temp = null;
temp = br.readLine();
while(temp!=null){
if(temp.length()>=2){
String str1 = temp.substring(0, 1);
String str2 = temp.substring(0, 2);
if(str1.equals("#")||str2.equals("--")||str2.equals("/*")||str2.equals("//")){
temp = br.readLine();
continue;
}
sb.append(temp+"\r\n");
} temp = br.readLine();
}
br.close(); }catch(Exception e){
e.printStackTrace();
}
return sb.toString();
}
/*
* getSqlArray方法
* 从文件的sql字符串中分析出能够独立执行的sql语句并返回
*/
public static List<String> getSql(String sql){
String s = sql;
s = s.replaceAll("\r\n", "\r");
s = s.replaceAll("\r", "\n");
List<String> ret = new ArrayList<String>();
String[] sqlarry = s.split(";"); //用;把所有的语句都分开成一个个单独的句子
sqlarry = filter(sqlarry);
ret = Arrays.asList(sqlarry);
return ret;
} public static String[] filter(String[] ss){
List<String> strs = new ArrayList<String>();
for(String s : ss){
if(s!=null&&!s.equals("")){
strs.add(s);
}
}
String[] result = new String[strs.size()];
for(int i=0; i<strs.size(); i++){
result[i] = strs.get(i).toString();
}
return result;
} }

使用java以及jdbc不使用第三方库执行sql文件脚本的更多相关文章

  1. 去掉utf-8的Bom头:使用java以及jdbc不使用第三方库执行sql文件脚本

    package com.xxx.xxx.dao; import java.io.BufferedReader; import java.io.File; import java.io.FileInpu ...

  2. C#和Java中执行SQL文件脚本的代码(非常有用)

    原文:C#和Java中执行SQL文件脚本的代码(非常有用) 我们在做程序的时候有事后会涉及到利用sql文件 直接执行,可是在sql文件中有很多注释,我们要一句一句的执行首先必须的得把sql文件解析 去 ...

  3. 一点一点学写Makefile(3)-增加第三方库和头文件

    我们在写代码的时候不一定都是有自己来完成,一个工程中会大量使用一些比较优秀的动态库.静态库等,我们在使用这些库完成所有的代码后,需要在编译的时候将这些库使用的头文件添加到我们的工程上,将他的库文件也添 ...

  4. PCB MS SQL跨库执行SQL 获取返回值

    一.SQL跨库执行SQL 获取返回值 ) DECLARE @sql nvarchar(MAX) DECLARE @layer INT SET @Dblink = 'P2.fp_db.dbo.' sel ...

  5. 10.1(java学习笔记)JDBC基本操作(连接,执行SQL语句,获取结果集)

    一.JDBC JDBC的全称是java database connection java数据库连接. 在java中需要对数据库进行一系列的操作,这时就需要使用JDBC. sun公司制定了关于数据库操作 ...

  6. import第三方库的头文件找不到的错误

    问题描述:使用cocoapods导入了第三方库,import该第三方库的某个头文件,然后编译报错找不到这个头文件内所import的头文件. 产生原因:我们需要配置头文件的搜索路径,告诉系统头文件的路径 ...

  7. UE4使用第三方库读写xml文件

    原文链接:http://gad.qq.com/article/detail/7181031 本文首发腾讯GAD开发者平台,未经允许,不得转载 在游戏开发过程中,读写xml几乎已经成为不可或缺的功能,但 ...

  8. [疯狂Java]JDBC:PreparedStatement预编译执行SQL语句

    1. SQL语句的执行过程——Statement直接执行的弊病: 1) SQL语句和编程语言一样,仅仅就会普通的文本字符串,首先数据库引擎无法识别这种文本字符串,而底层的CPU更不理解这些文本字符串( ...

  9. java 执行sql文件

    # 背景 用例执行完毕,期望回滚数据,因此希望执行sql来回滚数据 # 步骤 直接show代码,借助的是mybatis的ScriptRunner /** * 执行xx库下的表备份脚本 * * @par ...

随机推荐

  1. 2017.12.15 python资料,转存一下。

    最近GD项目三个型号都是用Python做批量烧录和测试的.marking一下,,虽然自己不会写. 1.入门阶段 The Python Tutorial(https://docs.python.org/ ...

  2. hdu4771 Stealing Harry Potter's Precious(DFS,BFS)

    练习dfs和bfs的好题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...

  3. C++ 静态常量

    #include<iostream> #include<stdexcept> #include <map> using namespace std; class n ...

  4. 基于RTP协议的H.264传输

    1.  引言        随 着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性.但人们又面临着另外一种不可避免 的尴尬,就是在网络上看 ...

  5. 使用python实现两个文件夹里文件的对比(包含内容的对比)

    #-*-coding:utf-8-*- #=============================================================================== ...

  6. 图片的base64编码通过javascript生成图片--当前URL地址的二维码应用

    前面的话 在电脑端发现一篇好的博文,想在手机上访问.这时,就必须打开手机浏览器输入长长的URL地址才行,非常不方便.如果在博客标题的后面跟一张小的图片,点击该图片后,出现一张二维码的大图,然后再通过手 ...

  7. [转]理解$watch ,$apply 和 $digest --- 理解数据绑定过程

    原文地址:http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ 注 这篇博文主要是写给新手的,是给那些刚刚开始 ...

  8. 洛谷【P2024】[NOI2001]食物链

    浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://www.luogu.org/problemnew/show/P202 ...

  9. BMP格式转JPEG格式

    int Bmp2Jpg(const char *bmp_data, const char *jeg_file, const int width, const int height) { int ret ...

  10. Day3(1)linux文件系统及文件类型

    Linux的文件系统 根文件系统(rootfs) root filesystem LSB,FHS:(FileSystem Heirache Standard) /etc,/usr,/var,/root ...