<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 36,comments - 31,trackbacks - 0
    ??????企業數據庫連接性的恰當構建是非常重要的,并且在為有限連接設備配置(Connection Limited Device Configuration(CLDC))構建應用程序和編寫特定于 MIDP(移動接口)的接口之間,哪一種是最佳選擇取決于 J2ME 和 Java 技術。

      方式
      介紹在把企業數據橋接到無線移動設備時建立 JDBC 連接的一條簡單原則,這可以幫助您使解決方案具有更好的可擴展性和更高效的性能。

      連接池
      任何應用程序都必須先訪問活動的數據庫連接,然后才能訪問數據庫。數據庫連接是一個很占資源且 I/O 開銷很大的操作,并且如果每次想使用數據庫連接時都必須創建它,那么它將會成為您的性能瓶頸。

      例如,如果您使用 Java servlet(Java servlet 通過 init() 方法創建并在其生命周期結束時被銷毀(通過 destroy() 方法))的方式,您是雖然避免了每次 servlet 被實例化時重新建立連接。這樣一種方式會明顯地降低應用程序的性能。完成相同功能的更好的途徑是使用“連接池(Connection Pool)”,您可以在連接池中初始化多個連接(并且參數可以從 XML 配置文件中讀取)。

      連接本身由一組集合對象和一個在整個請求過程中使連接保持打開的用戶請求組成。創建連接池的關鍵是在數據庫訪問代碼中使用如下一些塊:try{}.. catch{}... finally{}..。然后您使用 close() 方法來確認連接確實被返回到了連接池而不是被徹底關閉了。在“finally{}”塊中指定 close() 方法使得執行過程中發生的異常會被捕獲到,并且該語句仍被執行 — 連接返回到連接池,這就防止了應用程序中“連接泄漏(connection leak)”的發生。

      以下是構建一個 JDBC 連接的示例:

    Connection con = null;
    try {? ds = (DataSource)myContext.lookup("<specify JDBC driver>");
    ??pooledCon = ds.getConnection("scott", "tiger");
    ?// Processing Code goes here
    } catch (Exception ignored) {
    ?// catch JNDI or JDBC exceptions here
    } finally {
    ?if(pooledCon != null)
    ? ?pooledCon.close();
    }

      使用 PreparedStatement
      人們認為 PreparedStatement 對象的效率比多個 Statement 對象更高,尤其是如果您必須多次執行同一條語句而差別僅在于參數不同時更是如此。PreparedStatement 允許您將 SQL 語句“編譯”一次(盡管這種編譯第一次要消耗較多的時間),然后將它保存在高速緩存中,從而實現有效的重用。同時它也提供了可讀性更好的代碼。

      另一個額外的優勢是由驅動程序完成的對用戶傳遞給語句的字符串的自動轉義。舉例來說,這意味著當您試圖將字符串“D'Marco”插入到一個基于字符的數據域(它可能是 VARCHAR, VARCHAR2, CHAR 等)中時,SQL 語句不會在遇到第一個撇號時就產生災難性的失敗。

      使用 PreparedStatement 對象時的另一個良好習慣是調用對象自身的 close() 方法來“關閉對象”,這個方法將被用來運行 SQL 語句。這會關閉任何與正在執行的 SQL 語句相關聯的游標,這樣就能防止打開的游標把數據庫弄得十分凌亂。

      以下是一個創建 PreparedSatement 的示例:

    PreparedStatement sqlstmt = dbCon.prepareStatement("select *
    from table1 where field_1=?");
    sqlstmt.setInt(1, 12);
    ResultSet rs = sqlstmt.executeQuery();
    // close the resultset statement to avoid hanging cursors in database
    sqlstmt.close();
    // processing of new statement
    sqlstmt = dbCon.prepareStatement("select * from table2 where field_2 = ?");
    // repeat creating the result set

      恰當地利用事務
      在更新動態數據庫表和數據時常常會遺忘的一個方面,就是在向超過一個表示一個邏輯事務的表更新或插入數據時,這個事務應該反映到所有的表中,或者在碰到事務失敗時,通過“回滾”該事務而在每一個表中都沒有反映。

      一些核心的 JDBC 包支持了四種事務隔離模式(transaction isolation mode),這些模式允許程序指定它們想事務表現出怎樣的行為。大多數程序都至少支持兩種模式:“讀取提交(read committed)”(缺省值)和“可序列化的(serializable)”。當不可重復讀取應該允許在多個查詢之間由一個事務作出的修改對于另一個事務可見時,請使用“讀取提交”;要使由另一個事務作出的修改在一個查詢運行時成為可見的,請使用幻象讀取(phantom read)。當您需要一個跨多個操作前后完全一致的數據庫視圖時,就應該使用更為嚴格的“可序列化的”設置。把連接的自動提交設置為“假”(autocommit = "false"),記住這一點是很有用的。

      以下是構建一個連接并設置其各個屬性參數的示例:

    Connection con = null;
    try {
    ?dtsr = (DataSource <the JDBC driver you use>");
    ?pConn = dtsr.getConnection("<specify login>", "<specify password>");
    ?pConn.setAutoCommit(false); // transaction are not committed uponm execution

    ?pConn.setTransactionIsolation(
    ?Connection.TRANSACTION_SERIALIZABLE);
    ?// pConn is pooled connection
    ?pConn.commit();
    } catch (Exception ignored) {
    ?try { pConnn.rollback(); } catch (SQLException esgl) {}
    } finally {
    ?if(pConn != null) {
    ??? pConn.setAutoCommit(true); //reset autocommit
    ?? pConn.close();
    ?}
    }

      您也可以利用一個可選的 JDBC 包 — JTA(Java Transaction API),它允許容易地和完全獨立的事務服務器進行集成。

    posted on 2006-07-25 23:53 心隨我動 閱讀(296) 評論(0)  編輯  收藏 所屬分類: Java
    網站流量統計:
    澳大利亞 ABC 在線英語廣播電臺
    主站蜘蛛池模板: 91av免费观看| 99久久免费国产精品热| 91嫩草私人成人亚洲影院| 一个人看的免费观看日本视频www| 在线免费观看污网站| 亚洲AV综合色区无码二区偷拍 | 亚洲人xxx日本人18| 免费看片在线观看| 亚洲一区二区三区在线观看蜜桃| 天天影院成人免费观看| 亚洲日本人成中文字幕| 成年女人色毛片免费看| 久久久久亚洲AV成人网| 一本一道dvd在线观看免费视频| 亚洲日韩VA无码中文字幕 | 久久精品国产亚洲AV天海翼| 日本无卡码免费一区二区三区| 国产成人人综合亚洲欧美丁香花 | 亚洲AV无一区二区三区久久| 中文字幕无码日韩专区免费| 亚洲综合在线视频| 免费大片黄在线观看yw| 久久亚洲精品无码av| 亚洲精品综合久久| 亚洲欧洲日本在线观看| a毛片全部播放免费视频完整18| 亚洲精品自在在线观看| 日韩在线不卡免费视频一区| 亚洲日韩涩涩成人午夜私人影院| 中文字幕免费在线看线人动作大片| 亚洲成A∨人片在线观看不卡| 美女18毛片免费视频| 亚洲中文字幕久久精品无码喷水| 亚洲精品一卡2卡3卡四卡乱码| 免费一级国产生活片| 亚洲精品无码不卡在线播放| 亚洲精品第一国产综合精品99| 久久国产精品免费专区| 亚洲日韩精品无码专区| 亚洲熟妇丰满多毛XXXX| 一级女人18毛片免费|