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

packagetest;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStreamReader;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;/** 使用java以及jdbc执行sql脚本的工具示例代码*/

public classSqlHelper {public static voidmain(String[] args){

String path= "文件地址字符串";

String sql=getText(path);

List 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 staticConnection 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();

}returnconn;

}public static void execute(Connection conn, List sqlFile) throwsException {

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 staticString getText(String path){

File file= newFile(path);if(!file.exists()||file.isDirectory()){return null;

}

StringBuilder sb= newStringBuilder();try{

FileInputStream fis= newFileInputStream(path);

InputStreamReader isr= new InputStreamReader(fis,"UTF-8");

BufferedReader br= newBufferedReader(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();

}returnsb.toString();

}/** getSqlArray方法

* 从文件的sql字符串中分析出能够独立执行的sql语句并返回*/

public static ListgetSql(String sql){

String s=sql;

s= s.replaceAll("\r\n", "\r");

s= s.replaceAll("\r", "\n");

List ret = new ArrayList();

String[] sqlarry= s.split(";"); //用;把所有的语句都分开成一个个单独的句子

sqlarry =filter(sqlarry);

ret=Arrays.asList(sqlarry);returnret;

}public staticString[] filter(String[] ss){

List strs = new ArrayList();for(String s : ss){if(s!=null&&!s.equals("")){

strs.add(s);

}

}

String[] result= newString[strs.size()];for(int i=0; i

result[i]=strs.get(i).toString();

}returnresult;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值