當前位置:首頁 » 安卓系統 » androidapk資料庫

androidapk資料庫

發布時間: 2022-08-07 11:43:59

① android有哪幾種方式進行資料庫訪問

Android為數據存儲提供了多種方式,分別有如下幾種:
文件
SharedPreferences
sqlite資料庫
內容提供者(Content provider)
網路

使用文件進行數據存儲
首先給大家介紹使用文件如何對數據進行存儲,Activity提供了openFileOutput()方法可以用於把數據輸出到文件中,具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。
復制代碼 代碼如下:

public class FileActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
...
FileOutputStream outStream = this.openFileOutput("csdnt.txt", Context.MODE_PRIVATE);
outStream.write("CSDN".getBytes());
outStream.close();
}
}

openFileOutput()方法的第一參數用於指定文件名稱,不能包含路徑分隔符「/」 ,如果文件不存在,Android 會自動創建它。創建的文件保存在/data/data/<package name>/files目錄,如: /data/data/cn.csdn.action/files/csdn.txt ,通過點擊Eclipse菜單「Window」-「Show View」-「Other」,在對話窗口中展開android文件夾,選擇下面的File Explorer視圖,然後在File Explorer視圖中展開/data/data/<package name>/files目錄就可以看到該文件。
openFileOutput()方法的第二參數用於指定操作模式,有四種模式,分別為: Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2

Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該文件。
MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
如果希望文件被其他應用讀和寫,可以傳入:
openFileOutput("csdn.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

android有一套自己的安全模型,當應用程序(.apk)在安裝時系統就會分配給他一個userid,當該應用要去訪問其他資源比如文件的時候,就需要userid匹配。默認情況下,任何應用創建的文件,sharedpreferences,資料庫都應該是私有的(位於/data/data/<package name>/files),其他程序無法訪問。除非在創建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問。

讀取文件內容
如果要打開存放在/data/data/<package name>/files目錄應用私有的文件,可以使用Activity提供openFileInput()方法。
FileInputStream inStream = this.getContext().openFileInput("csdn.txt");
Log.i("FileTest", readInStream(inStream));
readInStream()的方法請看本頁下面備注。

或者直接使用文件的絕對路徑:
File file = new File("/data/data/cn.csdn.action/files/csdn.txt");
FileInputStream inStream = new FileInputStream(file);
Log.i("FileTest", readInStream(inStream));
注意:上面文件路徑中的「cn.csdn.action」為應用所在包,當你在編寫代碼時應替換為你自己應用使用的包。
對於私有文件只能被創建該文件的應用訪問,如果希望文件能被其他應用讀和寫,可以在創建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE許可權。

Activity還提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用於獲取/data/data/<package name>/cache目錄
getFilesDir()方法用於獲取/data/data/<package name>/files目錄

② Android 資料庫文件怎樣跟apk一起發布

可以將XX.db文件復制到Eclipse Android工程中的res\raw目錄中。所有在res\raw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件。

使用openDatabase方法來打開資料庫文件,如果該文件不存在,系統會自動創建/sdcard/dictionary目錄,並將res\raw目錄中的 XX.db文件復制到/sdcard/dictionary目錄中。openDatabase方法的實現代碼如下:這里以dictionary.db為例

[java] view plainprint?
01.private SQLiteDatabase openDatabase()
02. {
03. try
04. {
05. // 獲得dictionary.db文件的絕對路徑
06. String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
07. File dir = new File(DATABASE_PATH);
08. // 如果/sdcard/dictionary目錄中存在,創建這個目錄
09. if (!dir.exists())
10. dir.mkdir();
11. // 如果在/sdcard/dictionary目錄中不存在
12. // dictionary.db文件,則從res\raw目錄中復制這個文件到
13. // SD卡的目錄(/sdcard/dictionary)
14. if (!(new File(databaseFilename)).exists())
15. {
16. // 獲得封裝dictionary.db文件的InputStream對象
17. InputStream is = getResources().openRawResource(R.raw.dictionary);
18. FileOutputStream fos = new FileOutputStream(databaseFilename);
19. byte[] buffer = new byte[8192];
20. int count = 0;
21. // 開始復制dictionary.db文件
22. while ((count = is.read(buffer)) > 0)
23. {
24. fos.write(buffer, 0, count);
25. }
26.
27. fos.close();
28. is.close();
29. }
30. // 打開/sdcard/dictionary目錄中的dictionary.db文件
31. SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
32. databaseFilename, null);
33. return database;
34. }
35. catch (Exception e)
36. {
37. }
38. return null;
39. }
private SQLiteDatabase openDatabase()
{
try
{
// 獲得dictionary.db文件的絕對路徑
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
// 如果/sdcard/dictionary目錄中存在,創建這個目錄
if (!dir.exists())
dir.mkdir();
// 如果在/sdcard/dictionary目錄中不存在
// dictionary.db文件,則從res\raw目錄中復制這個文件到
// SD卡的目錄(/sdcard/dictionary)
if (!(new File(databaseFilename)).exists())
{
// 獲得封裝dictionary.db文件的InputStream對象
InputStream is = getResources().openRawResource(R.raw.dictionary);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
// 開始復制dictionary.db文件
while ((count = is.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}

fos.close();
is.close();
}
// 打開/sdcard/dictionary目錄中的dictionary.db文件
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
databaseFilename, null);
return database;
}
catch (Exception e)
{
}
return null;
}

在openDatabase方法中使用了幾個常量,這些常量是在程序的主類(Main)中定義的,代碼如下:

[java] view plainprint?
01.public class Main extends Activity implements OnClickListener, TextWatcher
02.{
03. private final String DATABASE_PATH = android.os.Environment
04. .getExternalStorageDirectory().getAbsolutePath()
05. + "/dictionary";
06. private final String DATABASE_FILENAME = "dictionary.db";
07.}

③ Android手機怎樣導出資料庫文件

1. 已root的手機導出資料庫文件

在手機上安裝Root Explorer(R.E.管理器)後,點擊app的圖標,打開程序的主界面。

找到data文件夾,點擊進入。在這個文件夾下存放著系統運行的數據文件。沒有root許可權是打不開的,一般也不建議隨便修改或刪除該文件夾下的信息。

在data文件夾下,再次找到data文件夾,也就是說兩個data,點擊打開。在裡面的這個data文件夾下存放的則是各個app的資料庫文件,系統中所有app的資料庫文件都保存在這個文件夾下。

在第二個data文件夾下找到你想要導出資料庫文件的app的包名,這個包名就是開發程序時代碼的根目錄。也可以通過解壓apk文件後在manifest文件中找到。

5
在報名下找到databases目錄,這個目錄下存放的就是程序的資料庫文件。資料庫文件都是以db結尾的,一個程序可能擁有多個資料庫文件,找到你想要導出的資料庫文件後再進行後續的操作。

④ android 開發 怎樣使用apk讀取資料庫db裡面的內容

final SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.mainlayout, new String[] { "text", "time", "image" }, new int[] { R.id.PL_TextView01, R.id.PL_TextView02, R.id.PL_ImageView01 }); lv.setAdapter(adapter);...

⑤ 如何Android資料庫緩存進行管理

無論大型或小型應用,靈活的緩存可以說不僅大大減輕了伺服器的壓力,而且因為更快速的用戶體驗而方便了用戶。
Android的apk可以說是作為小型應用,其中99%的應用並不是需要實時更新的,而且詬病於蝸牛般的移動網速,與伺服器的數據交互是能少則少,這樣用戶體驗才更好,這也是我們有時舍棄webview而採用json傳輸數據的原因之一。
採用緩存,可以進一步大大緩解數據交互的壓力,特此,我們簡略列舉一下緩存管理的適用環境:
1. 提供網路服務的應用
2. 數據更新不需要實時更新,但是哪怕是3-5分鍾的延遲也是可以採用緩存機制。
3. 緩存的過期時間是可以接受的(不會因為緩存帶來的好處,導致某些數據因為更新不及時而影響產品的形象等)
帶來的好處:
1. 伺服器的壓力大大減小
2. 客戶端的響應速度大大變快(用戶體驗)
3. 客戶端的數據載入出錯情況大大較少,大大提高了應有的穩定性(用戶體驗)
4. 一定程度上可以支持離線瀏覽(或者說為離線瀏覽提供了技術支持)
一、緩存管理的方法
這里的緩存管理的原理很簡:通過時間的設置來判斷是否讀取緩存還是重新下載。
裡面會有一些細節的處理,後面會詳細闡述。
基於這個原理,目前鄙人見過的兩種比較常見的緩存管理方法是:資料庫法和文件法。
二、資料庫法緩存管理
這種方法是在下載完數據文件後,把文件的相關信息如url,路經,下載時間,過期時間等存放到資料庫,下次下載的時候根據url先從資料庫中查詢,如果查詢到當前時間並未過期,就根據路徑讀取本地文件,從而實現緩存的效果。
從實現上我們可以看到這種方法可以靈活存放文件的屬性,進而提供了很大的擴展性,可以為其它的功能提供一定的支持;
從操作上需要創建資料庫,每次查詢資料庫,如果過期還需要更新資料庫,清理緩存的時候還需要刪除資料庫數據,稍顯麻煩,而資料庫操作不當又容易出現一系列的性能,ANR問題,實現的時候要謹慎,具體作的話,但也只是增加一個工具類或方法的事情。
還有一個問題,緩存的資料庫是存放在/data/data/<package>/databases/目錄下,是佔用內存空間的,如果緩存累計,容易浪費內存,需要及時清理緩存。
當然這種方法從目前一些應用的實用上看,我沒有發現什麼問題。
本文我側重強調第二種方法,第一種方法的實現,就此掠過。
三、文件法緩存管理
這種方法,使用File.lastModified()方法得到文件的最後修改時間,與當前時間判斷是否過期,從而實現緩存效果。
實現上只能使用這一個屬性,沒有為其它的功能提供技術支持的可能。
操作上倒是簡單,比較時間即可。本身處理也不容易帶來其它問題,代價低廉。
四、文件法緩存管理的兩點說明
1. 不同類型的文件的緩存時間不一樣。
籠統的說,不變文件的緩存時間是永久,變化文件的緩存時間是最大忍受不變時間。
說白點,圖片文件內容是不變的,直到清理,我們是可以永遠讀取緩存的。
配置文件內容是可能更新的,需要設置一個可接受的緩存時間。
2. 不同環境下的緩存時間標准不一樣。
無網路環境下,我們只能讀取緩存文件,哪怕緩存早就過期。
WiFi網路環境下,緩存時間可以設置短一點,一是網速較快,而是流量不要錢。
移動數據流量環境下,緩存時間可以設置長一點,節省流量,就是節省金錢,而且用戶體驗也更好。
舉個例子吧,最近本人在做的一個應用在wifi環境下的緩存時間設置為5分鍾,移動數據流量下的緩存時間設置為1小時。
這個時間根據自己的實際情況來設置:數據的更新頻率,數據的重要性等。
五、何時刷新
開發者一方面希望盡量讀取緩存,用戶一方面希望實時刷新,但是成都網站製作響應速度越快越好,流量消耗越少越好,是一個矛盾。
其實何時刷新我也不知道,這里我提供兩點建議:
1. 數據的最長多長時間不變,對應用無大的影響。
比如,你的數據更新時間為1天,則緩存時間設置為4~8小時比較合適,一天他總會看到更新,如果你覺得你是資訊類應用,再減少,2~4小時,如果你覺得數據比較重要或者比較受歡迎,用戶會經常把玩,再減少,1~2小時,依次類推。
為了保險起見,你可能需要毫無理由的再次縮減一下。
2. 提供刷新按鈕。
上面說的保險起見不一定保險,最保險的方法使在相關界面提供一個刷新按鈕,為緩存,為載入失敗提供一次重新來過的機會,有了這個刷新按鈕,我們的心也才真的放下來。

⑥ Android 的apk在覆蓋安裝的時如何重新讀取sqlite資料庫

覆蓋安裝貌似不會刪掉資料庫吧

⑦ android 如何把資料庫打包進apk

資料庫 放到res 的raw 中就自動打包進去啦。

⑧ android模擬器可以連接資料庫,打包成APK裝入手機,就沒辦法保存數據了

搜一下:android模擬器可以連接資料庫,打包成APK裝入手機,就沒辦法保存數據了

⑨ 如何將Android的資料庫打包到APK里

sdk不能直接打開res\raw目錄中的資料庫文件,不過我們可以通過將這個文件復制到手機內存或sd卡上來訪問。復制的方法也很簡單,就是在程序第一次啟動時判斷要復制的目標路徑是否存在該資料庫文件,如果不存在該資料庫文件,那先復制這個文件,然後再打開資料庫文件。
復制資料庫文件可以通過getresources().openrawresource方法獲得res\raw目錄中資源的inputstream對象,然後將該inputstream對象中的數據寫入其他的目錄中相應文件中。打開資料庫可以使用sqlitedatabase.openorcreatedatabase方法來打開sqlite資料庫文件。openorcreatedatabase方法可以打開任意目錄下的資料庫文件。

熱點內容
拱度計演算法 發布:2024-04-24 08:53:09 瀏覽:289
windowsefs加密 發布:2024-04-24 08:51:30 瀏覽:878
英雄聯盟和飢荒哪個配置要求更高 發布:2024-04-24 07:55:09 瀏覽:604
linuxcpu佔用進程 發布:2024-04-24 07:37:05 瀏覽:120
河南移動鶴壁dns伺服器地址 發布:2024-04-24 07:36:58 瀏覽:594
百度賬號密碼怎麼設置密碼 發布:2024-04-24 07:27:37 瀏覽:759
cf窗口化源碼 發布:2024-04-24 07:04:33 瀏覽:738
linuxi2c設備 發布:2024-04-24 06:53:50 瀏覽:346
寶馬x5買什麼配置性價比高 發布:2024-04-24 06:45:22 瀏覽:850
最小的編程語言 發布:2024-04-24 06:44:16 瀏覽:818