其他分享
首页 > 其他分享> > Statement 执行多条语句,使用批量执行

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