Statement 执行多条语句,使用批量执行
作者:互联网
public static void main(String[] args) throws SQLException { Connection connection = null; Statement stmt = null; String tableName = null; try { //1. 导入驱动,加载具体的驱动类 Class.forName("oracle.jdbc.OracleDriver"); //2. 与数据库建立连接 connection = DriverManager.getConnection(URL, USERNAME, PWD); //3.执行sql语句 stmt = connection.createStatement(); //创建sql语句执行对象 String sqlFile = "E:\\sql\\load_data.sql"; //创建sql语句 // String sqlFile = args[0]; connection.setAutoCommit(false); String fileContent = readFileByLines(sqlFile); if (fileContent.startsWith("select") || fileContent.startsWith("SELECT")) { if (fileContent.contains("/")) { int index = fileContent.indexOf("/"); fileContent = fileContent.substring(0, index); } System.out.println("执行select语句" + fileContent); ResultSet resultSet = stmt.executeQuery(fileContent); int row = resultSet.getRow(); } else if (fileContent.trim().startsWith("insert") || fileContent.startsWith("INSERT")) { //sql用/拼接表名 if (fileContent.contains("/")) { int index = fileContent.indexOf("/"); //获取表名 tableName = fileContent.substring(index, fileContent.length()).replace("/", ""); //执行清空语句 String cleanSqlScript = "DELETE TABLE " + tableName; int deleteTableData = stmt.executeUpdate(cleanSqlScript); System.out.println("执行清空表数据语句:" + "DELETE TABLE " + tableName); String subStringSql = fileContent.substring(0, index); //根据;分割语句批量执行 String[] split = subStringSql.split("-|\\||;|\\*|\\+|\\?|\\{|\\}|\\$|\\^"); for (int i = 0; i < split.length; i++) { System.out.println("执行insert语句" + split[i]); stmt.addBatch(split[i]); } stmt.executeBatch(); String selectSql = "select count(*) from " + tableName; System.out.println("查询的sql为=" + selectSql); ResultSet rs = stmt.executeQuery(selectSql); while (rs.next()) { System.out.print("写入数据总量:" + rs.getString(1)); } } else { System.out.println("执行insert语句" + fileContent); //根据;分割语句批量执行 String[] split = fileContent.split("-|\\||;|\\*|\\+|\\?|\\{|\\}|\\$|\\^"); for (int i = 0; i < split.length; i++) { System.out.println("执行insert语句" + split[i]); stmt.addBatch(split[i]); } stmt.executeBatch(); String selectSql = "select count(*) from " + tableName; System.out.println("查询的sql为=" + selectSql); ResultSet rs = stmt.executeQuery(selectSql); while (rs.next()) { System.out.print("写入数据总量:" + rs.getString(1)+" "); } } connection.commit(); } else { //建表语句走这里 System.out.println("执行SQL语句" + fileContent); int updateResult = stmt.executeUpdate(fileContent); connection.commit(); } } catch (Exception e) { connection.rollback(); e.printStackTrace(); System.exit(1); } finally { try { //释放数据库资源 if (stmt != null) { stmt.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); System.exit(1); } } } public static String readFileByLines(String fileName) { File file = new File(fileName); BufferedReader reader = null; StringBuilder sb = new StringBuilder(); try { System.out.println("以行为单位读取文件内容,一次读一整行:"); reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1; // 一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null) { // 显示行号 System.out.println("line " + line + ": " + tempString); sb.append(tempString); line++; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } return sb.toString(); }
标签:语句,String,Statement,System,stmt,fileContent,执行,out 来源: https://www.cnblogs.com/xxcbz/p/15771263.html