国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種訪問數(shù)據(jù)庫的方法及裝置與流程

      文檔序號(hào):12120187閱讀:313來源:國知局
      一種訪問數(shù)據(jù)庫的方法及裝置與流程

      本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體而言,涉及一種訪問數(shù)據(jù)庫的方法及裝置。



      背景技術(shù):

      目前,安卓開發(fā)過程中通常使用數(shù)據(jù)庫管理數(shù)據(jù),安卓系統(tǒng)默認(rèn)自帶的數(shù)據(jù)庫是Sqlite(輕型數(shù)據(jù)庫),安卓開發(fā)了一個(gè)用于訪問數(shù)據(jù)庫的工具類SqliteOpenHelper(數(shù)據(jù)庫文件位置),用戶可通過SqliteOpenHelper類對(duì)數(shù)據(jù)庫進(jìn)行增、刪、改或差的操作。

      當(dāng)用戶使用SqliteOpenHelper訪問數(shù)據(jù)庫時(shí),接收用戶的訪問數(shù)據(jù)庫請(qǐng)求,創(chuàng)建一個(gè)線程,將該線程分配給用戶的訪問數(shù)據(jù)庫請(qǐng)求,通過該線程實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問。由于對(duì)每個(gè)訪問數(shù)據(jù)庫請(qǐng)求,都需要?jiǎng)?chuàng)建線程,線程會(huì)占用一定的系統(tǒng)資源,當(dāng)訪問數(shù)據(jù)庫請(qǐng)求數(shù)量很大時(shí),創(chuàng)建的線程數(shù)目過多,將占用大量的系統(tǒng)資源,降低系統(tǒng)運(yùn)行速度。



      技術(shù)實(shí)現(xiàn)要素:

      有鑒于此,本發(fā)明實(shí)施例的目的在于提供一種訪問數(shù)據(jù)庫的方法及裝置,通過AsyncTask來執(zhí)行查詢指令,通過線程池方式來執(zhí)行除查詢指令外的增、刪或改指令,不需要為每個(gè)訪問數(shù)據(jù)庫請(qǐng)求創(chuàng)建線程,節(jié)省了系統(tǒng)資源,不會(huì)降低系統(tǒng)運(yùn)行速度,且有效避免了訪問數(shù)據(jù)庫操作對(duì)主線程造成的阻塞。

      第一方面,本發(fā)明實(shí)施例提供了一種訪問數(shù)據(jù)庫的方法,所述方法包括:

      接收用戶的訪問數(shù)據(jù)庫請(qǐng)求,所述訪問數(shù)據(jù)庫請(qǐng)求攜帶操作指令;

      判斷所述操作指令是否為查詢指令;

      如果是,則通過異步類AsyncTask執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;

      如果否,則通過線程池方式執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      結(jié)合第一方面,本發(fā)明實(shí)施例提供了上述第一方面的第一種可能的實(shí)現(xiàn)方式,其中,所述通過線程池方式執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作,包括:

      查看線程池中是否存在空閑線程,所述線程池中包括預(yù)設(shè)數(shù)目個(gè)線程;

      如果是,則從所述線程池中獲取一個(gè)所述空閑線程,通過獲取的所述空閑線程執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;

      如果否,則將所述訪問數(shù)據(jù)庫請(qǐng)求插入等待隊(duì)列的隊(duì)尾進(jìn)行等待。

      結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,本發(fā)明實(shí)施例提供了上述第一方面的第二種可能的實(shí)現(xiàn)方式,其中,所述將所述訪問數(shù)據(jù)庫請(qǐng)求插入等待隊(duì)列的隊(duì)尾進(jìn)行等待之后,還包括:

      實(shí)時(shí)監(jiān)測(cè)線程池中每個(gè)線程的狀態(tài),當(dāng)監(jiān)測(cè)到狀態(tài)改變?yōu)榭臻e狀態(tài)的線程時(shí),從所述等待隊(duì)列的隊(duì)首出隊(duì)一個(gè)訪問數(shù)據(jù)庫請(qǐng)求,通過狀態(tài)改變的所述線程執(zhí)行出隊(duì)的所述訪問數(shù)據(jù)庫請(qǐng)求對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      結(jié)合第一方面,本發(fā)明實(shí)施例提供了上述第一方面的第三種可能的實(shí)現(xiàn)方式,其中,所述方法還包括:

      在執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作的過程中,通過反饋接口向所述用戶反饋執(zhí)行進(jìn)度及執(zhí)行結(jié)果。

      結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,本發(fā)明實(shí)施例提供了上述第一方面的第四種可能的實(shí)現(xiàn)方式,其中,所述方法還包括:

      對(duì)執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作的執(zhí)行過程進(jìn)行異常監(jiān)測(cè);

      當(dāng)監(jiān)測(cè)到執(zhí)行過程出現(xiàn)異常時(shí),捕獲執(zhí)行過程中的異常信息;

      通過所述反饋接口將所述異常信息反饋給所述用戶。

      第二方面,本發(fā)明實(shí)施例提供了一種訪問數(shù)據(jù)庫的裝置,所述裝置包括:

      接收模塊,用于接收用戶的訪問數(shù)據(jù)庫請(qǐng)求,所述訪問數(shù)據(jù)庫請(qǐng)求攜帶操作指令;

      判斷模塊,用于判斷所述操作指令是否為查詢指令;

      執(zhí)行模塊,用于當(dāng)所述判斷模塊判斷所述操作指令是查詢指令時(shí),通過異步類AsyncTask執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;當(dāng)所述判斷模塊判斷所述操作指令不是查詢指令時(shí),通過線程池方式執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      結(jié)合第二方面,本發(fā)明實(shí)施例提供了上述第二方面的第一種可能的實(shí)現(xiàn)方式,其中,所述執(zhí)行模塊包括:

      查看單元,用于查看線程池中是否存在空閑線程,所述線程池中包括預(yù)設(shè)數(shù)目個(gè)線程;

      執(zhí)行單元,用于當(dāng)所述查看單元查看出線程池中存在空閑線程時(shí),從所述線程池中獲取一個(gè)所述空閑線程,通過獲取的所述空閑線程執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;

      插入單元,用于當(dāng)所述查看單元查看出線程池中不存在空閑線程時(shí),將所述訪問數(shù)據(jù)庫請(qǐng)求插入等待隊(duì)列的隊(duì)尾進(jìn)行等待。

      結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,本發(fā)明實(shí)施例提供了上述第二方面的第二種可能的實(shí)現(xiàn)方式,其中,所述裝置還包括:

      監(jiān)測(cè)模塊,用于實(shí)時(shí)監(jiān)測(cè)線程池中每個(gè)線程的狀態(tài),當(dāng)監(jiān)測(cè)到狀態(tài)改變?yōu)榭臻e狀態(tài)的線程時(shí),從所述等待隊(duì)列的隊(duì)首出隊(duì)一個(gè)訪問數(shù)據(jù)庫請(qǐng)求,通過狀態(tài)改變的所述線程執(zhí)行出隊(duì)的所述訪問數(shù)據(jù)庫請(qǐng)求對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      結(jié)合第二方面,本發(fā)明實(shí)施例提供了上述第二方面的第三種可能的實(shí)現(xiàn)方式,其中,所述裝置還包括:

      反饋模塊,用于在執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作的過程中,通過反饋接口向所述用戶反饋執(zhí)行進(jìn)度及執(zhí)行結(jié)果。

      結(jié)合第二方面的第三種可能的實(shí)現(xiàn)方式,本發(fā)明實(shí)施例提供了上述第二方面的第四種可能的實(shí)現(xiàn)方式,其中,所述裝置還包括:

      異常捕獲模塊,用于對(duì)執(zhí)行所述操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作的執(zhí)行過程進(jìn)行異常監(jiān)測(cè);當(dāng)監(jiān)測(cè)到執(zhí)行過程出現(xiàn)異常時(shí),捕獲執(zhí)行過程中的異常信息;通過所述反饋接口將所述異常信息反饋給所述用戶。

      在本發(fā)明實(shí)施例提供的方法及裝置中,接收用戶的訪問數(shù)據(jù)庫請(qǐng)求,該訪問數(shù)據(jù)庫請(qǐng)求攜帶操作指令;判斷該操作指令是否為查詢指令;如果是,則通過異步類AsyncTask執(zhí)行該操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;如果否,則通過線程池方式執(zhí)行該操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。本發(fā)明通過AsyncTask來執(zhí)行查詢指令,通過線程池方式來執(zhí)行除查詢指令外的增、刪或改指令,如此不需要為每個(gè)訪問數(shù)據(jù)庫請(qǐng)求創(chuàng)建線程,節(jié)省了系統(tǒng)資源,不會(huì)降低系統(tǒng)運(yùn)行速度,且有效避免了訪問數(shù)據(jù)庫操作對(duì)主線程造成的阻塞。另外,還使用反饋接口對(duì)數(shù)據(jù)庫的執(zhí)行過程進(jìn)行了很好的暴露,能夠使外界實(shí)時(shí)獲知數(shù)據(jù)庫的執(zhí)行情況,且對(duì)數(shù)據(jù)庫操作出現(xiàn)異常時(shí),還捕獲異常信息,并通過反饋接口將異常信息傳遞給用戶。

      為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附附圖,作詳細(xì)說明如下。

      附圖說明

      為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實(shí)施例,因此不應(yīng)被看作是對(duì)范圍的限定,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。

      圖1示出了本發(fā)明實(shí)施例1所提供的一種訪問數(shù)據(jù)庫的方法流程圖;

      圖2示出了本發(fā)明實(shí)施例2所提供的一種訪問數(shù)據(jù)庫的第一裝置結(jié)構(gòu)示意圖;

      圖3示出了本發(fā)明實(shí)施例2所提供的一種訪問數(shù)據(jù)庫的第二裝置結(jié)構(gòu)示意圖;

      圖4示出了本發(fā)明實(shí)施例2所提供的一種訪問數(shù)據(jù)庫的第三裝置結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。通常在此處附圖中描述和示出的本發(fā)明實(shí)施例的組件可以以各種不同的配置來布置和設(shè)計(jì)。因此,以下對(duì)在附圖中提供的本發(fā)明的實(shí)施例的詳細(xì)描述并非旨在限制要求保護(hù)的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實(shí)施例。基于本發(fā)明的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。

      考慮到現(xiàn)有技術(shù)對(duì)每個(gè)訪問數(shù)據(jù)庫請(qǐng)求,都需要?jiǎng)?chuàng)建線程,線程會(huì)占用一定的系統(tǒng)資源,當(dāng)訪問數(shù)據(jù)庫請(qǐng)求數(shù)量很大時(shí),創(chuàng)建的線程數(shù)目過多,將占用大量的系統(tǒng)資源,降低系統(tǒng)運(yùn)行速度。基于此,本發(fā)明實(shí)施例提供了一種訪問數(shù)據(jù)庫的方法及裝置,下面通過實(shí)施例進(jìn)行描述。

      實(shí)施例1

      參見圖1,本發(fā)明實(shí)施例提供了一種訪問數(shù)據(jù)庫的方法,該方法具體包括以下步驟:

      步驟101:接收用戶的訪問數(shù)據(jù)庫請(qǐng)求,該訪問數(shù)據(jù)庫請(qǐng)求攜帶操作指令。

      本發(fā)明實(shí)施例的執(zhí)行主體可以為終端。用戶在程序開發(fā)過程中,為了更好的管理數(shù)據(jù),經(jīng)常需要訪問數(shù)據(jù)庫。當(dāng)用戶需要訪問數(shù)據(jù)庫時(shí),用戶編寫用于訪問數(shù)據(jù)庫的代碼,該代碼中包含用戶想要對(duì)數(shù)據(jù)庫進(jìn)行操作的操作指令。程序運(yùn)行該用于訪問數(shù)據(jù)庫的代碼時(shí),相當(dāng)于提交了用戶的訪問數(shù)據(jù)庫請(qǐng)求,此時(shí)終端接收用戶的訪問數(shù)據(jù)庫請(qǐng)求。

      上述訪問數(shù)據(jù)庫請(qǐng)求攜帶的操作指令可以為查詢指令、增加指令、刪除指令或修改指令。其中,增加指令、刪除指令和修改指令為寫入操作,查詢指令為讀取操作。寫入操作耗時(shí)比讀取操作耗時(shí)長很多,所以本發(fā)明實(shí)施例將訪問數(shù)據(jù)庫的操作劃分為寫入操作和讀取操作兩類,對(duì)這兩類操作進(jìn)行區(qū)分處理,因此在執(zhí)行訪問數(shù)據(jù)庫的操作指令之前,首先通過如下步驟102的操作來區(qū)分用戶的訪問數(shù)據(jù)庫請(qǐng)求屬于哪一類操作。

      步驟102:判斷該操作指令是否為查詢指令,如果是,則執(zhí)行步驟103,如果否,則執(zhí)行步驟104。

      在數(shù)據(jù)庫操作中增加指令的程序用語為insert,刪除指令的程序用語為delete,修改指令的程序用語為update,查詢指令的程序用語為select。接收到用戶的訪問數(shù)據(jù)庫請(qǐng)求后,從該訪問數(shù)據(jù)庫請(qǐng)求中獲取操作指令,識(shí)別該操作指令中的程序用語是否為select,如果是,則判斷出該操作指令為查詢指令,如果否,則判斷出該操作指令不是查詢指令。

      步驟103:通過AsyncTask(異步類)執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      AsyncTask是安卓系統(tǒng)提供的一個(gè)多線程處理工具類,AsyncTask使用起來比較簡單,占用系統(tǒng)資源少。由于查詢操作屬于數(shù)據(jù)庫讀取操作,讀取操作是輕量級(jí)的操作,所以本發(fā)明實(shí)施例使用輕量級(jí)的AsyncTask線程工具來執(zhí)行讀取操作。

      通過AsyncTask執(zhí)行訪問數(shù)據(jù)庫請(qǐng)求攜帶的查詢指令時(shí),需要重寫以下兩個(gè)函數(shù):

      (1)、后臺(tái)執(zhí)行函數(shù)doInBackground(),在執(zhí)行查詢指令時(shí)比較耗時(shí)的操作都可以放在該函數(shù)中進(jìn)行,該函數(shù)在后臺(tái)線程執(zhí)行,完成查詢操作任務(wù)的主要工作,通常需要較長的時(shí)間。在執(zhí)行過程中可以調(diào)用進(jìn)度展示函數(shù)publicProgress()來更新任務(wù)的進(jìn)度。

      (2)、后執(zhí)行函數(shù)onPostExecute(),在該函數(shù)里面可以使用函數(shù)doInBackground()的結(jié)果處理操作UI(User Interface,用戶界面)。函數(shù)onPostExecute()在主線程執(zhí)行,執(zhí)行查詢操作的結(jié)果作為此函數(shù)的參數(shù)返回。

      在通過AsyncTask執(zhí)行訪問數(shù)據(jù)庫請(qǐng)求攜帶的查詢指令時(shí),除需要重寫上述兩個(gè)函數(shù)外,需要時(shí)還可以重寫以下三個(gè)函數(shù):

      進(jìn)度更新函數(shù)onProgressUpdate(),通過進(jìn)度條增加用戶體驗(yàn)度。此函數(shù)在主線程執(zhí)行,用于顯示任務(wù)執(zhí)行的進(jìn)度;

      預(yù)執(zhí)行函數(shù)onPreExecute(),該函數(shù)是最終用戶調(diào)用執(zhí)行時(shí)的接口,當(dāng)任務(wù)執(zhí)行之前開始調(diào)用此函數(shù),可以在這里顯示進(jìn)度對(duì)話框;

      取消函數(shù)onCancelled(),在用戶取消對(duì)數(shù)據(jù)庫的訪問操作時(shí),調(diào)用該函數(shù)。

      在本步驟中通過AsyncTask執(zhí)行查詢數(shù)據(jù)庫的操作時(shí),為了能將數(shù)據(jù)庫的狀態(tài)反饋出來,使用戶能夠?qū)崟r(shí)獲知數(shù)據(jù)庫當(dāng)前所處的狀態(tài),本發(fā)明實(shí)施例提供了用于反饋數(shù)據(jù)庫狀態(tài)的反饋接口。在通過AsyncTask執(zhí)行訪問數(shù)據(jù)庫請(qǐng)求中的查詢指令過程中,還通過該反饋接口向用戶反饋執(zhí)行進(jìn)度及執(zhí)行結(jié)果。

      為了便于理解通過反饋接口向用戶反饋執(zhí)行進(jìn)度及執(zhí)行結(jié)果的操作,下面以向數(shù)據(jù)庫中增加數(shù)據(jù)過程中的狀態(tài)反饋為例進(jìn)行說明。在向數(shù)據(jù)庫插入新增數(shù)據(jù)時(shí)反饋接口的接口定義具體如下:

      其中,Void onStart(long startTime)是開始函數(shù),用于增加數(shù)據(jù)開始時(shí)候的回調(diào)信息,表明數(shù)據(jù)庫插入開始了。參數(shù)startTime表示插入的時(shí)間點(diǎn),該時(shí)間點(diǎn)可以通過獲取系統(tǒng)時(shí)間來得到。獲取系統(tǒng)時(shí)間的方法是調(diào)用JDK(Java Development Kit)中的一個(gè)函數(shù)獲取的。JDK匯總存在一個(gè)System(系統(tǒng))的類,該類中有當(dāng)前時(shí)間函數(shù)Currenttimemillis(),該函數(shù)用于獲取系統(tǒng)當(dāng)前的時(shí)間信息,并以毫秒的形式返回。參數(shù)startTime的值就是通過函數(shù)Currenttimemillis()獲取的,獲取后直接賦值給參數(shù)startTime,這樣反饋接口外就能夠拿到參數(shù)startTime的具體時(shí)間值了。

      Void onSuccess(long successTime)是插入成功時(shí)間函數(shù),如果數(shù)據(jù)庫插入成功了,會(huì)通過反饋接口回調(diào)函數(shù)onSuccess(long successTime),其中,參數(shù)successTime表示插入成功時(shí)的時(shí)間信息。該時(shí)間信息的獲取方式和函數(shù)onStart()中的時(shí)間信息獲取方式相同,在此不再贅述。

      Void onError(String errMsg)是錯(cuò)誤反饋函數(shù),主要用于回調(diào)當(dāng)前數(shù)據(jù)庫插入操作出現(xiàn)異常時(shí)的異常信息,并將具體的異常信息封裝到參數(shù)errMsg中。

      其中,在通過AsyncTask執(zhí)行查詢數(shù)據(jù)庫操作的過程中,可能會(huì)出現(xiàn)執(zhí)行邏輯出錯(cuò)的問題,因此本發(fā)明實(shí)施例中還對(duì)執(zhí)行過程中出現(xiàn)的異常進(jìn)行異常捕獲,并將捕獲到的異常信息賦給上述參數(shù)errMsg,通過反饋接口將捕獲的異常信息反饋給用戶。其中,對(duì)異常信息進(jìn)行捕獲的具體操作過程如下:

      對(duì)執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作的執(zhí)行過程進(jìn)行異常監(jiān)測(cè);當(dāng)監(jiān)測(cè)到執(zhí)行過程出現(xiàn)異常時(shí),捕獲執(zhí)行過程中的異常信息;通過反饋接口將異常信息反饋給用戶。

      本發(fā)明實(shí)施例中,捕獲異常信息是通過try-catch代碼塊來進(jìn)行捕獲的。try-catch代碼塊是JAVA(腳本)語言所特有的,JAVA虛擬機(jī)首先對(duì)異常信息進(jìn)行捕獲,當(dāng)JAVA虛擬機(jī)發(fā)現(xiàn)try-catch代碼塊內(nèi)部執(zhí)行邏輯出現(xiàn)異常時(shí),JAVA虛擬機(jī)捕獲異常信息,然后將該異常信息丟給try-catch代碼塊,這樣try-catch代碼塊就拿到JAVA虛擬機(jī)拋上來的異常信息,也就捕獲到執(zhí)行訪問數(shù)據(jù)庫時(shí)的異常信息了。

      本發(fā)明實(shí)施例提供的反饋接口中,函數(shù)onError()反饋的信息就是通過try-catch代碼塊捕獲到的異常信息,try-catch一旦捕獲到異常信息,就將異常信息通過反饋接口中的函數(shù)onError()傳遞給用戶。

      步驟104:通過線程池方式執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      線程池是一種多線程處理形式,是一個(gè)用于控制線程的工具。通過線程池能夠更好的對(duì)線程進(jìn)行管理,非常適合處理一些業(yè)務(wù)邏輯比較重,同時(shí)又不影響到UI界面的任務(wù)。

      線程池在使用的過程中有多種模式可以選擇,例如線程池的模式可以為以下4種中的任一種:

      1、newCachedThreadPool(可緩存線程池):創(chuàng)建一個(gè)可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無空閑線程可回收,則創(chuàng)建新的線程。

      2、newFixedThreadPool(定長線程池):創(chuàng)建一個(gè)定長線程池,該線程池可控制線程最大并發(fā)數(shù),超出最大并發(fā)數(shù)的線程會(huì)在隊(duì)列中等待。

      3、newScheduledThreadPool(定時(shí)線程池):該線程池支持定時(shí)及周期性任務(wù)的執(zhí)行。

      4、newSingleThreadExecutor(單線程化線程池):創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序執(zhí)行。

      由于對(duì)數(shù)據(jù)庫的增、刪和改過程在系統(tǒng)執(zhí)行期間是比較頻繁的過程,如果頻繁申請(qǐng)線程來處理增、刪和改操作,會(huì)對(duì)系統(tǒng)產(chǎn)生比較重的負(fù)擔(dān),所以對(duì)于這三種操作,為了復(fù)用相應(yīng)的線程資源,減少系統(tǒng)開支,本發(fā)明實(shí)施例采用的線程池的模式是newCachedThreadPool模式,該模式的線程池是具有緩存功能的。即對(duì)于數(shù)據(jù)庫的增、刪或改操作使用后的線程,線程池會(huì)將使用過的線程緩存起來,下次再使用的時(shí)候就可以直接使用線程池中緩存的線程,不需要再創(chuàng)建新的線程,避免了頻繁申請(qǐng)線程的問題,以及避免了線程太多而占用太多的系統(tǒng)資源,能夠有效減少數(shù)據(jù)庫增刪改過程對(duì)系統(tǒng)資源的開銷。

      本發(fā)明實(shí)施例中,線程池中包括預(yù)設(shè)數(shù)目個(gè)線程,這些線程都是后臺(tái)線程,每個(gè)線程都使用默認(rèn)的堆棧大小,以默認(rèn)的優(yōu)先級(jí)運(yùn)行,并處于多線程單元中。

      當(dāng)確定訪問數(shù)據(jù)庫請(qǐng)求攜帶的操作指令不是查詢指令時(shí),終端查看線程池中是否存在空閑線程。如果是,則從線程池中獲取一個(gè)空閑線程,通過獲取的空閑線程執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。如果否,則將訪問數(shù)據(jù)庫請(qǐng)求插入等待隊(duì)列的隊(duì)尾進(jìn)行等待。

      將訪問數(shù)據(jù)庫請(qǐng)求插入等待隊(duì)列的隊(duì)尾之后,還需要實(shí)時(shí)監(jiān)測(cè)線程池中每個(gè)線程的狀態(tài),當(dāng)監(jiān)測(cè)到狀態(tài)改變?yōu)榭臻e狀態(tài)的線程時(shí),從等待隊(duì)列的隊(duì)首出隊(duì)一個(gè)訪問數(shù)據(jù)庫請(qǐng)求,通過狀態(tài)改變的線程執(zhí)行出隊(duì)的訪問數(shù)據(jù)庫請(qǐng)求對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      通過線程池方式執(zhí)行訪問數(shù)據(jù)庫請(qǐng)求包括的操作指令后,還通過反饋接口向用戶反饋執(zhí)行進(jìn)度及執(zhí)行結(jié)果,使用用戶能夠?qū)崟r(shí)獲知數(shù)據(jù)庫當(dāng)前所處的狀態(tài)。

      在通過線程池方式執(zhí)行增、刪或改操作的過程中,也可能會(huì)出現(xiàn)邏輯錯(cuò)誤,因此本步驟中也需要在執(zhí)行過程中進(jìn)行異常監(jiān)測(cè),并在出現(xiàn)異常時(shí)進(jìn)行異常捕獲,本步驟中同樣是通過try-catch代碼塊來進(jìn)行異常捕獲的,try-catch代碼塊捕獲異常信息的操作與步驟103中相同,在此不再贅述。當(dāng)捕獲到異常信息時(shí),也通過反饋接口將捕獲的異常信息反饋給用戶。

      本發(fā)明實(shí)施例能實(shí)時(shí)的將數(shù)據(jù)庫正在處理的狀態(tài)通過反饋接口對(duì)外公開,調(diào)用者能夠非常清晰的知道當(dāng)前數(shù)據(jù)庫所處狀態(tài),對(duì)于需要結(jié)果返回的,也可通過反饋接口直接返回?cái)?shù)據(jù)。開發(fā)者可以直接在定義的接口中獲取數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行處理,很大程度上降低開發(fā)者的開發(fā)難度,同時(shí)借助反饋接口來實(shí)時(shí)反饋數(shù)據(jù)庫狀態(tài)和最終結(jié)果。并且在數(shù)據(jù)庫內(nèi)部也做了大量的異常捕獲操作,當(dāng)數(shù)據(jù)庫操作出現(xiàn)異常情況時(shí)會(huì)對(duì)異常信息進(jìn)行捕獲,然后通知外界異常信息,極大程度的暴露數(shù)據(jù)庫的狀態(tài),同時(shí)操作和使用簡單,讓開發(fā)者有更多的時(shí)間關(guān)注到具體的業(yè)務(wù)邏輯實(shí)現(xiàn)上。

      在本發(fā)明實(shí)施例中,接收用戶的訪問數(shù)據(jù)庫請(qǐng)求,該訪問數(shù)據(jù)庫請(qǐng)求攜帶操作指令;判斷該操作指令是否為查詢指令;如果是,則通過異步類AsyncTask執(zhí)行該操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;如果否,則通過線程池方式執(zhí)行該操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。本發(fā)明通過AsyncTask來執(zhí)行查詢指令,通過線程池方式來執(zhí)行除查詢指令外的增、刪或改指令,如此不需要為每個(gè)訪問數(shù)據(jù)庫請(qǐng)求創(chuàng)建線程,節(jié)省了系統(tǒng)資源,不會(huì)降低系統(tǒng)運(yùn)行速度,且有效避免了訪問數(shù)據(jù)庫操作對(duì)主線程造成的阻塞。另外,還使用反饋接口對(duì)數(shù)據(jù)庫的執(zhí)行過程進(jìn)行了很好的暴露,能夠使外界實(shí)時(shí)獲知數(shù)據(jù)庫的執(zhí)行情況,且對(duì)數(shù)據(jù)庫操作出現(xiàn)異常時(shí),還捕獲異常信息,并通過反饋接口將異常信息傳遞給用戶。

      實(shí)施例2

      參見圖2,本發(fā)明實(shí)施例提供了一種訪問數(shù)據(jù)庫的裝置,該裝置用于執(zhí)行上述實(shí)施例1所提供的訪問數(shù)據(jù)庫的方法。該裝置具體包括:

      接收模塊201,用于接收用戶的訪問數(shù)據(jù)庫請(qǐng)求,訪問數(shù)據(jù)庫請(qǐng)求攜帶操作指令;

      判斷模塊202,用于判斷操作指令是否為查詢指令;

      執(zhí)行模塊203,用于當(dāng)判斷模塊202判斷操作指令是查詢指令時(shí),通過異步類AsyncTask執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;當(dāng)判斷模塊202判斷操作指令不是查詢指令時(shí),通過線程池方式執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      如圖3所示,當(dāng)判斷模塊202判斷操作指令不是查詢指令,即當(dāng)操作指令為增加指令、刪除指令或修改指令時(shí),執(zhí)行模塊203通過如下查看單元2031、執(zhí)行單元2032和插入單元2033來執(zhí)行該操作指令。

      查看單元2031,用于查看線程池中是否存在空閑線程,該線程池中包括預(yù)設(shè)數(shù)目個(gè)線程;

      執(zhí)行單元2032,用于當(dāng)查看單元2031查看出線程池中存在空閑線程時(shí),從線程池中獲取一個(gè)空閑線程,通過獲取的空閑線程執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;

      插入單元2033,用于當(dāng)查看單元2031查看出線程池中不存在空閑線程時(shí),將訪問數(shù)據(jù)庫請(qǐng)求插入等待隊(duì)列的隊(duì)尾進(jìn)行等待。

      如圖4所示,上述插入單元將訪問數(shù)據(jù)庫請(qǐng)求插入等待隊(duì)列的隊(duì)尾后,該裝置還需要通過如下監(jiān)測(cè)模塊204對(duì)線程池進(jìn)行監(jiān)測(cè),并在線程池中出現(xiàn)空閑線程時(shí),通過空閑線程執(zhí)行等待隊(duì)列中的訪問數(shù)據(jù)庫請(qǐng)求。

      監(jiān)測(cè)模塊204,用于實(shí)時(shí)監(jiān)測(cè)線程池中每個(gè)線程的狀態(tài),當(dāng)監(jiān)測(cè)到狀態(tài)改變?yōu)榭臻e狀態(tài)的線程時(shí),從等待隊(duì)列的隊(duì)首出隊(duì)一個(gè)訪問數(shù)據(jù)庫請(qǐng)求,通過狀態(tài)改變的線程執(zhí)行出隊(duì)的訪問數(shù)據(jù)庫請(qǐng)求對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。

      本發(fā)明實(shí)施例中,該裝置還提供了反饋接口,通過該反饋接口實(shí)時(shí)向外界反饋數(shù)據(jù)庫的狀態(tài)。如圖4所示,在執(zhí)行模塊203執(zhí)行操作指令的過程中,還通過如下反饋模塊205從上述反饋接口向用戶反饋操作指令的執(zhí)行情況。

      反饋模塊205,用于在執(zhí)行模塊203執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作的過程中,通過反饋接口向用戶反饋執(zhí)行進(jìn)度及執(zhí)行結(jié)果。

      如圖4所示,執(zhí)行模塊203在執(zhí)行訪問數(shù)據(jù)庫請(qǐng)求攜帶的操作指令過程中,可能會(huì)出現(xiàn)邏輯錯(cuò)誤,因此在出現(xiàn)異常時(shí)本裝置還通過如下異常捕獲模塊206來捕獲異常信息。

      異常捕獲模塊206,用于對(duì)執(zhí)行模塊203執(zhí)行操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作的執(zhí)行過程進(jìn)行異常監(jiān)測(cè);當(dāng)監(jiān)測(cè)到執(zhí)行過程出現(xiàn)異常時(shí),捕獲執(zhí)行過程中的異常信息;通過反饋接口將異常信息反饋給用戶。

      在本發(fā)明實(shí)施例中,接收用戶的訪問數(shù)據(jù)庫請(qǐng)求,該訪問數(shù)據(jù)庫請(qǐng)求攜帶操作指令;判斷該操作指令是否為查詢指令;如果是,則通過異步類AsyncTask執(zhí)行該操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作;如果否,則通過線程池方式執(zhí)行該操作指令對(duì)應(yīng)的訪問數(shù)據(jù)庫操作。本發(fā)明通過AsyncTask來執(zhí)行查詢指令,通過線程池方式來執(zhí)行除查詢指令外的增、刪或改指令,如此不需要為每個(gè)訪問數(shù)據(jù)庫請(qǐng)求創(chuàng)建線程,節(jié)省了系統(tǒng)資源,不會(huì)降低系統(tǒng)運(yùn)行速度,且有效避免了訪問數(shù)據(jù)庫操作對(duì)主線程造成的阻塞。另外,還使用反饋接口對(duì)數(shù)據(jù)庫的執(zhí)行過程進(jìn)行了很好的暴露,能夠使外界實(shí)時(shí)獲知數(shù)據(jù)庫的執(zhí)行情況,且對(duì)數(shù)據(jù)庫操作出現(xiàn)異常時(shí),還捕獲異常信息,并通過反饋接口將異常信息傳遞給用戶。

      本發(fā)明實(shí)施例所提供的訪問數(shù)據(jù)庫的裝置可以為設(shè)備上的特定硬件或者安裝于設(shè)備上的軟件或固件等。本發(fā)明實(shí)施例所提供的裝置,其實(shí)現(xiàn)原理及產(chǎn)生的技術(shù)效果和前述方法實(shí)施例相同,為簡要描述,裝置實(shí)施例部分未提及之處,可參考前述方法實(shí)施例中相應(yīng)內(nèi)容。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,前述描述的系統(tǒng)、裝置和單元的具體工作過程,均可以參考上述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。

      在本發(fā)明所提供的實(shí)施例中,應(yīng)該理解到,所揭露裝置和方法,可以通過其它的方式實(shí)現(xiàn)。以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,又例如,多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。

      所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。

      另外,在本發(fā)明提供的實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。

      所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。

      應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋,此外,術(shù)語“第一”、“第二”、“第三”等僅用于區(qū)分描述,而不能理解為指示或暗示相對(duì)重要性。

      最后應(yīng)說明的是:以上所述實(shí)施例,僅為本發(fā)明的具體實(shí)施方式,用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制,本發(fā)明的保護(hù)范圍并不局限于此,盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),其依然可以對(duì)前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改或可輕易想到變化,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改、變化或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例技術(shù)方案的精神和范圍。都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1