使用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; } }
原文地址:https://www.cnblogs.com/LiuYanYGZ/p/9310779.html
时间: 2024-10-11 08:39:14