JDBC与CMD方式执行MySQL文件

来源:互联网 发布:如何看待网络暴力现象 编辑:程序博客网 时间:2024/06/08 19:08


//执行SQL语句private boolean batchExecuteSql(String url, String user, String password, String driver, String path ,String[] sqlfiles){try {String splitStr="";if (url.contains("jdbc:sqlserver://")){splitStr = "go --------------------------";} else {splitStr = "-- --------------------------";}Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);Statement statement = conn.createStatement();//循环执行sqlfor(int i=0;i<sqlfiles.length;i++){StringBuffer sql = new StringBuffer();readSqlFileAsStream(path + sqlfiles[i], sql);String [] sqls = sql.toString().split(splitStr);for (int j = 0; j < sqls.length; j++) {statement.execute(sqls[j]);}}if(statement != null){statement.close() ;    }    if(conn != null){conn.close() ;    }return true;} catch (Exception e) { logger.error("Execute SQL Error",e);return false;}}

来看读取一个模块的操作

//按照流的方式读取sql文件private void readSqlFileAsStream(String filePath, StringBuffer sql){try {InputStream is = NMS.class.getResourceAsStream(filePath);InputStreamReader read = new InputStreamReader (is,"UTF-8");BufferedReader reader = new BufferedReader(read);String str;while ((str = reader.readLine()) != null) {byte [] strByte = str.getBytes();String newStr = new String(strByte);sql.append(newStr);}reader.close();} catch (Exception e) {logger.error("Read SQL File Error",e);}}

使用JDBC的方式并不支持delimiter声明等方式。


在使用CMD执行MySQL还原的命令时,遇到 一个问题,最后排查是由于MyEclipse缓存导致启动的是另外一个CMD,如下测试:

Process proc2 = Runtime.getRuntime().exec("cmd /c echo %PATH%");
可以看到与PATH环境变量的配置不一致,导致报错。









0 0
原创粉丝点击