黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

通過JDBC連接Oracle數(shù)據(jù)庫(kù)中的十大技巧

系統(tǒng) 2296 0
?
??
1 、在客 開發(fā) 中使用 Thin 驅(qū)動(dòng) 程序

  在 開發(fā) Java 件方面, Oracle 的數(shù)據(jù) 庫(kù) 提供了四 種類 型的 驅(qū)動(dòng) 程序,二 用于 應(yīng) 件、 applets servlets 等客 件,另外二 用于數(shù)據(jù) 庫(kù) 中的 Java 儲(chǔ)過 程等服 務(wù) 器端 件。在客 機(jī)端 件的 開發(fā) 中,我 可以 選擇 OCI 驅(qū)動(dòng) 程序或 Thin 驅(qū)動(dòng) 程序。 OCI 驅(qū)動(dòng) 程序利用 Java 本地化接口( JNI ),通 Oracle 件與數(shù)據(jù) 庫(kù)進(jìn) 行通 Thin 驅(qū)動(dòng) 程序是 Java 驅(qū)動(dòng) 程序,它直接與數(shù)據(jù) 庫(kù)進(jìn) 行通 得最高的性能, Oracle 在客 件的 開發(fā) 中使用 OCI 驅(qū)動(dòng) 程序, 似乎是正確的。但我建 使用 Thin 驅(qū)動(dòng) 程序,因 多次 測(cè)試發(fā)現(xiàn) ,在通常情況下, Thin 驅(qū)動(dòng) 程序的性能都超 OCI 驅(qū)動(dòng) 程序。

2
關(guān)閉 動(dòng) 提交功能,提高系 統(tǒng) 性能

  在第一次建立與數(shù)據(jù) 庫(kù) 時(shí) ,在缺省情況下, 接是在自 動(dòng) 提交模式下的。 得更好的性能,可以通 過調(diào) false 參數(shù)的 Connection setAutoCommit() 方法 關(guān)閉 動(dòng) 提交功能,如下所示:

conn.setAutoCommit(false);

得注意的是,一旦 關(guān)閉 了自 動(dòng) 提交功能,我 就需要通 過調(diào) Connection commit() rollback() 方法來(lái)人工的方式 對(duì) 務(wù)進(jìn) 行管理。

3 、在 動(dòng)態(tài) SQL 或有 時(shí)間 限制的命令中使用 Statement 對(duì)

  在 執(zhí) SQL 命令 時(shí) ,我 有二 種選擇 :可以使用 PreparedStatement 對(duì) 象,也可以使用 Statement 對(duì) 象。無(wú) 多少次地使用同一個(gè) SQL 命令, PreparedStatement 都只 對(duì) 它解析和 編譯 一次。當(dāng)使用 Statement 對(duì) 時(shí) 執(zhí) 行一個(gè) SQL 命令 時(shí) ,都會(huì) 對(duì) 進(jìn) 行解析和 編譯 可能會(huì)使你 認(rèn)為 ,使用 PreparedStatement 對(duì) 象比使用 Statement 對(duì) 象的速度更快。然而,我 進(jìn) 行的 測(cè)試 表明,在客 件中,情況并非如此。 因此,在有 時(shí)間 限制的 SQL 操作中,除非成批地 SQL 命令,我 們應(yīng) 當(dāng)考 使用 Statement 對(duì) 象。

  此外,使用 Statement 對(duì) 象也使得 動(dòng)態(tài) SQL 命令更加 簡(jiǎn)單 ,因 可以將字符串 接在一起,建立一個(gè)有效的 SQL 命令。因此,我 認(rèn)為 Statement 對(duì) 象可以使 動(dòng)態(tài) SQL 命令的 創(chuàng) 建和 執(zhí) 得更加 簡(jiǎn)單

4
、利用 helper 函數(shù) 對(duì)動(dòng)態(tài) SQL 命令 進(jìn) 行格式化

  在 創(chuàng) 建使用 Statement 對(duì) 執(zhí) 行的 動(dòng)態(tài) SQL 命令 時(shí) ,我 需要 理一些格式化方面的 問題 。例如,如果我 創(chuàng) 建一個(gè)將名字 O'Reilly 插入表中的 SQL 命令, 使用二個(gè)相 “''” 號(hào)替 O'Reilly 中的 “'” 號(hào)。完成 些工作的最好的方法是 創(chuàng) 建一個(gè)完成替 操作的 helper 方法,然后在 接字符串心服用公式表達(dá)一個(gè) SQL 命令 時(shí) ,使用 創(chuàng) 建的 helper 方法。 與此 似的是,我 可以 helper 方法接受一個(gè) Date 型的 ,然后 出基于 Oracle to_date() 函數(shù)的字符串表達(dá)式。

5
、利用 PreparedStatement 對(duì) 象提高數(shù)據(jù) 庫(kù) 體效率

  在使用 PreparedStatement 對(duì) 執(zhí) SQL 命令 時(shí) ,命令被數(shù)據(jù) 庫(kù)進(jìn) 行解析和 編譯 ,然后被放到命令 沖區(qū)。然后, 當(dāng) 執(zhí) 行同一個(gè) PreparedStatement 對(duì) 時(shí) ,它就會(huì)被再解析一次,但不會(huì)被再次 編譯 。在 沖區(qū)中可以 發(fā)現(xiàn)預(yù)編譯 的命令,并且可以重新使用。在有大量用 的企 業(yè)級(jí)應(yīng) 件中, 經(jīng) 常會(huì)重 復(fù)執(zhí) 行相同的 SQL 命令,使用 PreparedStatement 對(duì) 來(lái)的 編譯 次數(shù)的減少能 提高數(shù)據(jù) 庫(kù) 體性能。如果不是在客 創(chuàng) 建、 預(yù)備 執(zhí) PreparedStatement 務(wù) 需要的 時(shí)間長(zhǎng) Statement 務(wù) ,我會(huì)建 在除 動(dòng)態(tài) SQL 命令之外的所有情況下使用 PreparedStatement 對(duì) 象。

6
、在成批 理重 復(fù) 的插入或更新操作中使用 PreparedStatement 對(duì)

  如果成批地 理插入和更新操作,就能 夠顯 著地減少它 所需要的 時(shí)間 Oracle 提供的 Statement CallableStatement 并不真正地支持批 理,只有 PreparedStatement 對(duì) 象才真正地支持批 理。我 可以使用 addBatch() executeBatch() 方法 選擇標(biāo) 準(zhǔn)的 JDBC 理,或者通 利用 PreparedStatement 對(duì) 象的 setExecuteBatch() 方法和 標(biāo) 準(zhǔn)的 executeUpdate() 方法 選擇 速度更快的 Oracle 有的方法。要使用 Oracle 有的批 理機(jī)制,可以以如下所示的方式 調(diào) setExecuteBatch()


PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}


調(diào) setExecuteBatch() 時(shí) 指定的 是一個(gè)上限,當(dāng)達(dá)到 該值時(shí) ,就會(huì)自 動(dòng) 地引 發(fā) SQL 命令 執(zhí) 行, 標(biāo) 準(zhǔn)的 executeUpdate() 方法就會(huì)被作 理送到數(shù)據(jù) 庫(kù) 中。我 可以通 過調(diào) PreparedStatement sendBatch() 方法隨 時(shí)傳輸 理任 務(wù)

7
、使用 Oracle locator 方法插入、更新大 對(duì) 象( LOB

Oracle PreparedStatement 不完全支持 BLOB CLOB 等大 對(duì) 象的 理,尤其是 Thin 驅(qū)動(dòng) 程序不支持利 PreparedStatement 對(duì) 象的 setObject() setBinaryStream() 方法 設(shè) BLOB ,也不支持利用 setCharacterStream() 方法 設(shè) CLOB 。只有 locator 本身中的方法才能 從數(shù)據(jù) 庫(kù) LOB 型的 。可以使用 PreparedStatement 對(duì) 象插入或更新 LOB ,但需要使用 locator 才能 LOB 。由于存在 二個(gè) 問題 ,因此,我建 使用 locator 的方法來(lái)插入、更新或 LOB

8
、使用 SQL92 語(yǔ) 調(diào) 用存 儲(chǔ)過

  在 調(diào) 儲(chǔ)過 時(shí) ,我 可以使用 SQL92 Oracle PL/SQL ,由于使用 Oracle PL/SQL 并沒有什 么實(shí)際 的好 ,而且會(huì) 以后 維護(hù) 你的 應(yīng) 用程序的 開發(fā) 員帶 來(lái)麻 ,因此,我建 調(diào) 用存 儲(chǔ)過 時(shí) 使用 SQL92

9
、使用 Object SQL 對(duì) 象模式 轉(zhuǎn) 移到數(shù)據(jù) 庫(kù)

  既然可以將 Oracle 的數(shù)據(jù) 庫(kù) 面向 對(duì) 象的數(shù)據(jù) 庫(kù) 來(lái)使用,就可以考 應(yīng) 用程序中的面向 對(duì) 象模式 轉(zhuǎn) 到數(shù)據(jù) 庫(kù) 中。目前的方法是 創(chuàng) Java bean 為偽 裝的數(shù)據(jù) 庫(kù)對(duì) 象,將它 的屬性映射到 關(guān) 系表中,然后在 bean 中添加方法。盡管 這樣 作在 Java 中沒有什 么問題 ,但由于操作都是在數(shù)據(jù) 庫(kù) 之外 進(jìn) 行的,因此其他 訪問 數(shù)據(jù) 庫(kù) 應(yīng) 件無(wú)法利用 對(duì) 象模式。如果利用 Oracle 的面向 對(duì) 象的技 術(shù) ,可以通 過創(chuàng) 建一個(gè)新的數(shù)據(jù) 庫(kù)對(duì) 型在數(shù)據(jù) 庫(kù) 中模仿其數(shù)據(jù)和操作,然后使用 JPublisher 等工具生成自己的 Java bean 。如果使用 這種 方式,不但 Java 應(yīng) 用程序可以使用 應(yīng) 件的 對(duì) 象模式,其他需要共享你的 應(yīng) 用中的數(shù)據(jù)和操作的 應(yīng) 件也可以使用 應(yīng) 件中的 對(duì) 象模式。

10
、利用 SQL 完成數(shù)據(jù) 庫(kù) 內(nèi)的操作

  我要向大家介 的最重要的 經(jīng)驗(yàn) 是充分利用 SQL 的面向集合的方法來(lái)解決數(shù)據(jù) 庫(kù)處 理需求,而不是使用 Java 程化的 語(yǔ) 言。

  如果 程人 要在一個(gè)表中 多行, 結(jié) 果中的 個(gè)行都會(huì) 找其他表中的數(shù)據(jù),最后, 程人 員創(chuàng) 建了獨(dú)立的 UPDATE 命令來(lái)成批地更新第一個(gè)表中的數(shù)據(jù)。與此 似的任 務(wù) 可以通 set 子句中使用多列子 查詢 而在一個(gè) UPDATE 命令中完成。當(dāng)能 一的 SQL 命令中完成任 務(wù) ,何必要 數(shù)據(jù)在網(wǎng)上流來(lái)流去的?我建 戶認(rèn) 真學(xué) 習(xí) 如何最大限度地 發(fā)揮 SQL 的功能 ?

通過JDBC連接Oracle數(shù)據(jù)庫(kù)中的十大技巧


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論