SQLite是止前最流行的數(shù)據(jù)庫(kù)軟件,它支持SQL語(yǔ)言,可以非常好的提升軟件的性能,開(kāi)源性也極好,東坡這里附上安卓Android sqlite萬(wàn)能數(shù)據(jù)庫(kù),有需要的歡迎下載!
安卓Android sqlite萬(wàn)能數(shù)據(jù)庫(kù)特色介紹
安卓里常用的存儲(chǔ)有方法中少不了數(shù)據(jù)庫(kù)的使用,主要是對(duì)單表的操作,多表的操作此處不涉及。每次使用數(shù)據(jù)庫(kù)都會(huì)有繁瑣的代碼要寫(xiě),大致思路是繼承自SQLiteOpenHelper寫(xiě)一個(gè)數(shù)據(jù)庫(kù)操作子類,然后重寫(xiě)onCreate方法,寫(xiě)上數(shù)據(jù)庫(kù)的建表語(yǔ)句,重寫(xiě)onUpgrade方法,寫(xiě)上數(shù)據(jù)庫(kù)的升級(jí)執(zhí)行代碼,此外還有繁瑣的增、刪、改、查語(yǔ)句。每次建一張表都要做這些重復(fù)的工作,能不能用一種通用的方法,把這些繁瑣的事務(wù)交給程序自動(dòng)去完成呢?代碼里告訴你答案。
android操作sqlite數(shù)據(jù)庫(kù)操作心得
寫(xiě)一下android操作數(shù)據(jù)庫(kù)中的一些準(zhǔn)備。
首先,配一下adb的環(huán)境變量,因?yàn)槊看味家絘db的目錄下去啟動(dòng)實(shí)在太麻煩了,下面是具體步驟,當(dāng)然也可以該其他文件,我習(xí)慣改這個(gè),可以改完后可以source一下使它生效。
1、sudogedit/etc/profile
2、將下面的兩句加到上面打開(kāi)的文件里
exportANDROID_HOME=/home/sdk文件路徑
exportPATH=$PATH:$ANDROID_HOME/platform-tools
3、重啟電腦,大功告成。
adb配好以后,我們最好還要給手機(jī)里的數(shù)據(jù)庫(kù)訪問(wèn)的權(quán)限,一般在/data/data/包名/database里面,用adbshell進(jìn)入后su獲得手機(jī)root權(quán)限,然后給權(quán)限chmod。
要讀數(shù)據(jù)庫(kù)文件的話就用命令sqlite3數(shù)據(jù)庫(kù)文件,其中的數(shù)據(jù)庫(kù)可以直接在adbshell中運(yùn)行sqlite3,但我按照網(wǎng)上弄的就是不能在adbshell中打開(kāi)sqlite3數(shù)據(jù)庫(kù),說(shuō)命令沒(méi)有找到,我該傳的文件都傳了,沒(méi)辦法,只有在eclipse里的ddms的fileexplore里把數(shù)據(jù)庫(kù)文件到處然后在Linux終端里運(yùn)行sqlite3數(shù)據(jù)庫(kù)來(lái)看了。
還有要注意的是寫(xiě)sql語(yǔ)句時(shí)一定要注意"select*from"+TABLE_NAME中的from和引號(hào)要留有空格,不然的話就連在一起了。
下面的有一個(gè)知識(shí)要講一下,sqlite的增加,刪除等操作都挺簡(jiǎn)單的,麻煩的就是查詢操作,一般都借用Cursor來(lái)保存查詢數(shù)據(jù),一開(kāi)始我沒(méi)怎么注意這是一個(gè)指針類型,指向數(shù)據(jù)庫(kù)里的數(shù)據(jù),而我一開(kāi)始寫(xiě)的時(shí)候把數(shù)據(jù)庫(kù)的關(guān)閉操作寫(xiě)在了Cursor操作的前面,也就是說(shuō)先把數(shù)據(jù)庫(kù)關(guān)閉了再對(duì)Cursor對(duì)象進(jìn)行操作,這樣的話就造成了Cursor的空指針,也就注定杯具了好久。。。
常見(jiàn)問(wèn)題
1、為什么要把已存在數(shù)據(jù)庫(kù)文件放在res/raw文件夾下, 放在其它地方可以嗎?
如果放在res/raw文件夾下,數(shù)據(jù)庫(kù)文件在apk打包的時(shí)候就必須確定并且不可更改,否則每次都要重新編譯生成apk,在使用的時(shí)候會(huì)很麻煩,所以最好是將數(shù)據(jù)庫(kù)文件放置在sd卡的某個(gè)位置。
經(jīng)過(guò)驗(yàn)證得知,數(shù)據(jù)庫(kù)文件可以放置到其它位置,例如sd卡的某個(gè)位置,至于放在什么位置根據(jù)具體情景來(lái)覺(jué)得,上面的代碼只是一個(gè)例子而已,當(dāng)然放在不同的位置,訪問(wèn)文件的時(shí)候的方式也不一樣。當(dāng)然注意要訪問(wèn)sd卡的時(shí)候一定要在AndroidManifest.xml文件中添加訪問(wèn)sd卡的權(quán)限。
2、上面的代碼沒(méi)有判斷已存在的數(shù)據(jù)庫(kù)文件是否存在?一是為了代碼的嚴(yán)謹(jǐn)性考慮,二是因?yàn)樵谔厥獾臋C(jī)子上可能不需要之前已經(jīng)存在的數(shù)據(jù)庫(kù),希望自己配置并生成數(shù)據(jù)庫(kù),此時(shí)就不需要復(fù)制之前的數(shù)據(jù)庫(kù)。
這個(gè)問(wèn)題根據(jù)實(shí)際情景來(lái)決定是否需要判斷已存在的數(shù)據(jù)庫(kù)文件是否存在,判斷的時(shí)候根據(jù)數(shù)據(jù)庫(kù)文件放置的位置不同而不同,另外如果防止在res/raw文件夾下沒(méi)有辦法判斷數(shù)據(jù)庫(kù)文件是否存在,因?yàn)樵L問(wèn)res/raw文件夾下的文件使用的方法是R.raw.xxx,如果文件不存在,沒(méi)辦法得到數(shù)據(jù)庫(kù)文件的對(duì)象,所以也就沒(méi)辦法判斷,補(bǔ)充一個(gè)知識(shí)res/raw文件夾下的文件的絕對(duì)路徑是”android.resource://”+ getPackageName() + R.raw.xxx。
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版