欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
中國java開(kāi)發(fā)網(wǎng) - 提示和技巧:jdbc 提示
提示和技巧:JDBC 提示
改進(jìn)您的動(dòng)態(tài)的移動(dòng)應用程序

Roman Vichr(rvichr@ddlabs.com)
高級設計師,DDLabs
2003 年 1 月

我們己經(jīng)討論了如何使您的應用程序接口更健壯并具有更好的動(dòng)態(tài)性,還討論了如何為移動(dòng)應用程序過(guò)濾內容?,F在我們需要重點(diǎn)討論的是:當通過(guò) HTTP 將企業(yè)數據推到移動(dòng)設備應用程序時(shí),怎樣對數據庫連接進(jìn)行優(yōu)化以獲得最佳結果(請參閱參考資料鏈接到最近的 developerWorks 文章,該篇文章提供了更多信息。)

企業(yè)數據庫連接性的恰當構建是非常重要的,并且在為有限連接設備配置(Connection Limited Device Configuration(CLDC))構建應用程序和編寫(xiě)特定于 MIDP(移動(dòng)接口)的接口之間,哪一種是最佳選擇取決于 J2ME 和 Java 技術(shù)。

方式
介紹在把企業(yè)數據橋接到無(wú)線(xiàn)移動(dòng)設備時(shí)建立 JDBC 連接的一條簡(jiǎn)單原則,這可以幫助您使解決方案具有更好的可擴展性和更高效的性能。

連接池
任何應用程序都必須先訪(fǎng)問(wèn)活動(dòng)的數據庫連接,然后才能訪(fǎng)問(wèn)數據庫。數據庫連接是一個(gè)很占資源且 I/O 開(kāi)銷(xiāo)很大的操作,并且如果每次想使用數據庫連接時(shí)都必須創(chuàng )建它,那么它將會(huì )成為您的性能瓶頸。

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

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

以下是構建一個(gè) 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 對象的效率比多個(gè) Statement 對象更高,尤其是如果您必須多次執行同一條語(yǔ)句而差別僅在于參數不同時(shí)更是如此。PreparedStatement 允許您將 SQL 語(yǔ)句“編譯”一次(盡管這種編譯第一次要消耗較多的時(shí)間),然后將它保存在高速緩存中,從而實(shí)現有效的重用。同時(shí)它也提供了可讀性更好的代碼。

另一個(gè)額外的優(yōu)勢是由驅動(dòng)程序完成的對用戶(hù)傳遞給語(yǔ)句的字符串的自動(dòng)轉義。舉例來(lái)說(shuō),這意味著(zhù)當您試圖將字符串“D‘Marco”插入到一個(gè)基于字符的數據域(它可能是 VARCHAR, VARCHAR2, CHAR 等)中時(shí),SQL 語(yǔ)句不會(huì )在遇到第一個(gè)撇號時(shí)就產(chǎn)生災難性的失敗。

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

以下是一個(gè)創(chuàng )建 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



恰當地利用事務(wù)
在更新動(dòng)態(tài)數據庫表和數據時(shí)常常會(huì )遺忘的一個(gè)方面,就是在向超過(guò)一個(gè)表示一個(gè)邏輯事務(wù)的表更新或插入數據時(shí),這個(gè)事務(wù)應該反映到所有的表中,或者在碰到事務(wù)失敗時(shí),通過(guò)“回滾”該事務(wù)而在每一個(gè)表中都沒(méi)有反映。

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

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

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();
  }
}



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

結束語(yǔ)
本提示的目的是為了幫助您使您的顯示企業(yè)數據的移動(dòng)應用程序能更可靠更有效地工作。但是,對于不正確的編碼或部署,本提示于事無(wú)補。請始終確保您正在編寫(xiě)正確的代碼并一而再、再而三地測試!

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JDBC常見(jiàn)面試題集錦
java面試④數據庫部分
概述 java 數據庫連接 3.0 規范的新功能和改進(jìn)之處
Java開(kāi)發(fā)之JDBC學(xué)習分享
JDBC常見(jiàn)面試題(修訂版)
JR 精品文章 - 全面解析JDBC<一>
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久