zoukankan      html  css  js  c++  java
  • 使用java以及jdbc不使用第三方库执行sql文件脚本

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

    使用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里面去
         * 并在换行的时候加入
    
         */
        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+"
    ");
                    }
    
                    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("
    ", "
    ");
            s = s.replaceAll("
    ", "
    ");
            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;
        }
    
    
    }
  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/9310779.html
Copyright © 2011-2022 走看看