<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 簡介 從JDBC2.0開始增加了一些功能:可滾動的結果集,可以利用結果集執行增加,更新,刪除,批處理操作 所謂的批處理就是一次性向數據庫發出多條操作指令,一起執行.如果要想操作批處理, 主要還是在Statement和PreparedStatement接口上定義的 第一種方式:Statement.addBatch(sql) ~~~ statement接口定義方法 | |---增加批處理語句 |---public void addBatch(String sql) throws SQLException | |---執行批處理語句 |---public int[] executeBatch() throws SQLException |---返回的數據是包含了所有批處理語句的執行結果;(幾個批處理就是幾個元素,每個語句的執行結果 ) ~~~ 第二種方式:PreparedStatement.addBatch() ~~~ PreparedStatement接口定義的方法 | |---增加批處理語句 |---public void addBatch() throws SQLException ~~~ 在批處理操作中,由于JDBC具有自動事務提交,所以一旦中間的語句由錯誤,錯誤之前的語句正常執行,錯誤后的語句就不執行了 # Statement完成批處理 1. 使用Statement對象添加要批量執行的SQL語句,如下: ~~~ Statement.addBatch(sql1); Statement.addBatch(sql2); Statement.addBatch(sql3); ~~~ 2. 執行批處理SQL語句 ~~~ Statement.executeBatch(); ~~~ 3. 清除批處理命令 ~~~ Statement.clearBatch(); ~~~ ## 范例 1. 編寫測試的SQL腳本創建表。 ~~~ create table testbatch ( id varchar(40) primary key, name varchar(40) ); ~~~ 2. 編寫測試代碼,如下所示: ~~~ public class Demo3 { /* create table testbatch ( id varchar(40) primary key, name varchar(40) ); */ // 實現批處理的第一種方式 @Test public void test1() throws SQLException { Connection conn = null; Statement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); String sql1 = "insert into testbatch(id,name) values('1','李阿云')"; // 1.可以發送不同的sql語句 2.發送的sql語句沒有預編譯 String sql2 = "update testbatch set name='李阿昀' where id='1'"; st = conn.createStatement(); // Statement內部維護了一個List集合,addBatch()方法加入的sql語句都加入到該List集合內了。 st.addBatch(sql1); st.addBatch(sql2); st.executeBatch(); // 返回int[] [3,4]——即第一條sql語句執行影響數據庫表幾行,第二條sql語句執行影響數據庫表幾行,... st.clearBatch(); // 清除清除批處理命令 } finally { JdbcUtils.release(conn, st, rs); } } } ~~~ ## 優缺點 采用Statement.addBatch(sql)方式實現批處理: * 優點:可以向數據庫發送多條不同的SQL語句。 * 缺點: * SQL語句沒有預編譯。 * 當向數據庫發送多條語句相同,但僅參數不同的SQL語句時,需重復寫上很多條SQL語句。 例如: ~~~ Insert into user(name,password) values(‘aa’,’111’); Insert into user(name,password) values(‘bb’,’222’); Insert into user(name,password) values(‘cc’,’333’); Insert into user(name,password) values(‘dd’,’444’); ~~~ # PreparedStatement完成批處理 ## 范例 ~~~ public class Demo3 { /* create table testbatch ( id varchar(40) primary key, name varchar(40) ); */ // 實現批處理的第二種方式 @Test public void test2() throws SQLException { long starttime = System.currentTimeMillis(); Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); String sql1 = "insert into testbatch(id,name) values(?,?)"; // 1.適合做批量插入和批量更新 2.發送的sql語句都預編譯過,性能會好一點。實際開發里,此種方式用到的多一點。 st = conn.prepareStatement(sql1); /* st.setString(1, "1"); st.setString(2, "李阿云"); st.addBatch(); // 把PreparedStatement對象內部封裝的sql語句加入到PreparedStatement對象內部的List集合中 st.setString(1, "2"); st.setString(2, "葉一"); st.addBatch(); // 此時PreparedStatement對象內部的List集合中有兩條sql語句 */ // 批處理一千萬條sql語句,會出現OutOfMemoryError:Java heap space——內存溢出 /* for (int i = 1; i <= 10000000; i++) { st.setString(1, i+""); st.setString(2, "葉一"+i); st.addBatch(); } st.executeBatch(); */ for (int i = 1; i <= 10000006; i++) { st.setString(1, i+""); st.setString(2, "葉一"+i); st.addBatch(); if (i%1000==0) { st.executeBatch(); st.clearBatch(); } st.executeBatch(); // 剩下不到1000條sql語句也需要執行 } } finally { JdbcUtils.release(conn, st, rs); } long endtime = System.currentTimeMillis(); System.out.println("共花了:"+(endtime-starttime)/1000+"秒"); // 向MySQL數據庫批插入1000萬條記錄,大概需要3個多小時。而Oracle數據庫測試大概需要380秒 } } ~~~ ## 優缺點 采用 PreparedStatement.addBatch() 實現批處理 * 優點:發送的是預編譯后的 SQL 語句,執行效率高。 * 缺點:只能應用在 SQL 語句相同,但參數不同的批處理中。因此此種形式的批處理經常用于在同一個表中批量插入數據,或批量更新表的數據。
                  <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>

                              哎呀哎呀视频在线观看