posts - 40,  comments - 7,  trackbacks - 0
          批量處理JDBC語句提高處理速度

          作者:佚名????來自:未知

            有時候JDBC運行得不夠快,這使得有些程序員使用數據庫相關的存儲過程。作為一個替代方案,可以試試使用Statement 的批量處理特性看看能否同時執行所有的SQL以提高速度。

            存儲過程的最簡單的形式就是包含一系列SQL語句的過程,將這些語句放在一起便于在同一個地方管理也可以提高速度。Statement 類可以包含一系列SQL語句,因此允許在同一個數據庫事務執行所有的那些語句而不是執行對數據庫的一系列調用。

            使用批量處理功能涉及下面的兩個方法:
            · addBatch(String) 方法
            · executeBatch方法

            如果你正在使用Statement 那么addBatch 方法可以接受一個通常的SQL語句,或者如果你在使用PreparedStatement ,那么也可以什么都不向它增加。executeBatch 方法執行那些SQL語句并返回一個int值的數組,這個數組包含每個語句影響的數據的行數。如果將一個SELECT語句或者其他返回一個ResultSet的SQL語句放入批量處理中就會導致一個SQLException異常。

            關于java.sql.Statement 的簡單范例可以是:

            Statement stmt = conn.createStatement();
            stmt.insert("DELETE FROM Users");
            stmt.insert("INSERT INTO Users VALUES("rod", 37, "circle")");
            stmt.insert("INSERT INTO Users VALUES("jane", 33, "triangle")");
            stmt.insert("INSERT INTO Users VALUES("freddy", 29, "square")");
            int[] counts = stmt.executeBatch();

            PreparedStatement 有些不同,它只能處理一部分SQL語法,但是可以有很多參數,因此重寫上面的范例的一部分就可以得到下面的結果:

            // 注意這里沒有DELETE語句
            PreparedStatement stmt = conn.prepareStatement("INSERT INTO Users VALUES(?,?,?)");

            User[ ] users = ...;
            for(int i=0; i<users.length; i++) {
             stmt.setInt(1, users[i].getName());
             stmt.setInt(2, users[i].getAge());
             stmt.setInt(3, users[i].getShape());
             stmt.addBatch( );
            }
            int[ ] counts = stmt.executeBatch();

            如果你不知道你的語句要運行多少次,那么這是一個很好的處理SQL代碼的方法。在不使用批量處理的情況下,如果添加50個用戶,那么性能就有影響,如果某個人寫了一個腳本添加一萬個用戶,程序可能變得很糟糕。添加批處理功能就可以幫助提高性能,而且在后面的那種情況下代碼的可讀性也更好。

          posted on 2006-08-22 09:24 Lansing 閱讀(429) 評論(0)  編輯  收藏 所屬分類: SQLJava
          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          歡迎探討,努力學習Java哈

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Lansing's Download

          Lansing's Link

          我的博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 香河县| 甘南县| 邵阳县| 饶平县| 鄯善县| 黄山市| 福建省| 牡丹江市| 河南省| 栾川县| 海阳市| 手游| 大名县| 高陵县| 清远市| 潍坊市| 石林| 壤塘县| 江源县| 灌阳县| 武义县| 盈江县| 丰台区| 内黄县| 太保市| 句容市| 襄樊市| 通州区| 二连浩特市| 井研县| 理塘县| 容城县| 柞水县| 固原市| 余江县| 任丘市| 兴海县| 钦州市| 南平市| 焉耆| 鹤壁市|