<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                使用JDBC操作數據庫的時候,經常會執行一些批量操作。 例如,一次性給會員增加可用優惠券若干,我們可以執行以下SQL代碼: ~~~ INSERT INTO coupons (user_id, type, expires) VALUES (123, 'DISCOUNT', '2030-12-31'); INSERT INTO coupons (user_id, type, expires) VALUES (234, 'DISCOUNT', '2030-12-31'); INSERT INTO coupons (user_id, type, expires) VALUES (345, 'DISCOUNT', '2030-12-31'); INSERT INTO coupons (user_id, type, expires) VALUES (456, 'DISCOUNT', '2030-12-31'); ... ~~~ 實際上執行JDBC時,因為只有占位符參數不同,所以SQL實際上是一樣的: <br> ~~~ for (var params : paramsList) { PreparedStatement ps = conn.preparedStatement("INSERT INTO coupons (user_id, type, expires) VALUES (?,?,?)"); ps.setLong(params.get(0)); ps.setString(params.get(1)); ps.setString(params.get(2)); ps.executeUpdate(); } ~~~ 類似的還有,給每個員工薪水增加10%~30%: ~~~ UPDATE employees SET salary = salary * ? WHERE id = ? ~~~ <br> <br> 通過一個循環來執行每個`PreparedStatement`雖然可行,但是性能很低。SQL數據庫對SQL語句相同,但只有參數不同的若干語句可以作為batch執行,即批量執行,這種操作有特別優化,速度遠遠快于循環執行每個SQL。 在JDBC代碼中,我們可以利用SQL數據庫的這一特性,把同一個SQL但參數不同的若干次操作合并為一個batch執行。我們以批量插入為例,示例代碼如下: ``` try (PreparedStatement ps = conn.prepareStatement("INSERT INTO students (name, gender, grade, score) VALUES (?, ?, ?, ?)")) { // 對同一個PreparedStatement反復設置參數并調用addBatch(): for (Student s : students) { ps.setString(1, s.name); ps.setBoolean(2, s.gender); ps.setInt(3, s.grade); ps.setInt(4, s.score); ps.addBatch(); // 添加到batch } // 執行batch: int[] ns = ps.executeBatch(); for (int n : ns) { System.out.println(n + " inserted."); // batch中每個SQL執行的結果數量 } } ``` 執行batch和執行一個SQL不同點在于,需要對同一個`PreparedStatement`反復設置參數并調用`addBatch()`,這樣就相當于給一個SQL加上了多組參數,相當于變成了“多行”SQL。 第二個不同點是調用的不是`executeUpdate()`,而是`executeBatch()`,因為我們設置了多組參數,相應地,返回結果也是多個`int`值,因此返回類型是`int[]`,循環`int[]`數組即可獲取每組參數執行后影響的結果數量。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看