ORACLE中的事務管理


因為工作需求,需要向ORACLE數據插入大量的數據,進而選擇了開啟事務的手動管理,進行大量的數據插入,然而在此就遇到了一個坑,以前經開啟mysql的事務管理進行插入數據,照搬mysql的方法有點行不通,每次插入數據只有299條能插入進去,一開始以為代碼有問題,仔細檢查發現代碼沒有問題,從網上查找原因,使用以下方法能夠在JDBC中開啟ORACLE事務管理,進行批量的插入數據。親測可用:

//向***插入組織數據
    public void insertZZ(JSONArray ja) throws SQLException {
        //連接中間庫
        String user = "****";
        String password = "*****";
        String url = "jdbc:oracle:thin:@ip:port/SID";
        String driver = "oracle.jdbc.driver.OracleDriver";
        Connection con = null; //一個封裝了TCP長連接 的 數據庫長連接對象
//        Statement stmt = null; //一個封裝和管理SQL語句的java對象

        PreparedStatement preparedStatement = null;

        //插入數據
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url, user, password);

            //將事務模式設置為手動提交事務:
//            con.setAutoCommit(false);
            //設置事務的隔離級別。
//            con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);

            //運行插入操作
            int j = 2;
            String sql = "INSERT INTO IUFO_UNIT_INFO(DR,LEVEL_CODE,TS,UNIT_CODE,UNIT_ID,UNIT_NAME,UNIT_TYPE) \n" +
                    "values(?,?,?,?,?,?,?)";
            preparedStatement = con.prepareStatement(sql);
            for (int i = 0; i < ja.size(); i++) {
          con.setAutoCommit(false)//開啟事務手動提交 JSONObject jo
= ja.getJSONObject(i); String dr = (String) jo.get("dr"); String level_code = (String) jo.get("level_code"); String ts = (String) jo.get("ts"); String unit_code = (String) jo.get("code"); String unit_id = (String) jo.get("unit_id"); String unit_name = (String) jo.get("name"); String unit_type = (String) jo.get("unit_type"); // String sql = "INSERT INTO IUFO_UNIT_INFO(DR,LEVEL_CODE,TS,UNIT_CODE,UNIT_ID,UNIT_NAME,UNIT_TYPE) \n" + // "values('"+dr+"','"+level_code+"','"+ts+"','"+unit_code+"','"+unit_id+"','"+unit_name+"','"+unit_type+"')"; preparedStatement.setString(1,dr); preparedStatement.setString(2,level_code); preparedStatement.setString(3,ts); preparedStatement.setString(4,unit_code); preparedStatement.setString(5,unit_id); preparedStatement.setString(6,unit_name); preparedStatement.setString(7,unit_type); preparedStatement.addBatch(); // int resultSet = preparedStatement.executeUpdate(); // System.out.println(j); } preparedStatement.executeBatch(); //提交事務 con.commit(); } catch (Exception e) { // 若事務發生異常,回滾事務 con.rollback(); }finally {
      //開啟事務自動提交 con.setAutoCommit(
true); try { if (preparedStatement != null) { preparedStatement.close(); } if (con != null) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM