Android 數(shù)據(jù)庫(kù)打包隨APK發(fā)布的實(shí)例代碼
其實(shí)很簡(jiǎn)單,就是把我們的數(shù)據(jù)庫(kù)文件放到我們的手機(jī)里,所以不必局限在哪個(gè)地方寫這個(gè)代碼,在第一次創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候可以,我覺(jué)得在軟件起動(dòng)頁(yè)里效果更好一點(diǎn),首先我們應(yīng)該把事先寫好的數(shù)據(jù)庫(kù)文件比如 test.db放到res文件夾里的raw文件夾里,也可以放到assets里,因?yàn)檫@兩個(gè)文件夾不會(huì)在生成APK的時(shí)候不會(huì)被壓縮。
1,DataBaseUtil用于將raw中的db文件copy到手機(jī)中,代碼如下
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import com.ata.app.R;
/**
* copy數(shù)據(jù)庫(kù)到apk包
*
* @author NGJ
*
*/
public class DataBaseUtil {
private Context context;
public static String dbName = "Kao.db";// 數(shù)據(jù)庫(kù)的名字
private static String DATABASE_PATH;// 數(shù)據(jù)庫(kù)在手機(jī)里的路徑
public DataBaseUtil(Context context) {
this.context = context;
String packageName = context.getPackageName();
DATABASE_PATH="/data/data/"+packageName+"/databases/";
}
/**
* 判斷數(shù)據(jù)庫(kù)是否存在
*
* @return false or true
*/
public boolean checkDataBase() {
SQLiteDatabase db = null;
try {
String databaseFilename = DATABASE_PATH + dbName;
db = SQLiteDatabase.openDatabase(databaseFilename, null,SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
}
if (db != null) {
db.close();
}
return db != null ? true : false;
}
/**
* 復(fù)制數(shù)據(jù)庫(kù)到手機(jī)指定文件夾下
*
* @throws IOException
*/
public void copyDataBase() throws IOException {
String databaseFilenames = DATABASE_PATH + dbName;
File dir = new File(DATABASE_PATH);
if (!dir.exists())// 判斷文件夾是否存在,不存在就新建一個(gè)
dir.mkdir();
FileOutputStream os = new FileOutputStream(databaseFilenames);// 得到數(shù)據(jù)庫(kù)文件的寫入流
InputStream is = context.getResources().openRawResource(R.raw.kao);// 得到數(shù)據(jù)庫(kù)文件的數(shù)據(jù)流
byte[] buffer = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0) {
os.write(buffer, 0, count);
os.flush();
}
is.close();
os.close();
}
}
2,在需要的activity中加入如下方法用于具體的copy操作
Java代碼
privatevoid copyDataBaseToPhone() {
DataBaseUtil util = new DataBaseUtil(this);
// 判斷數(shù)據(jù)庫(kù)是否存在
boolean dbExist = util.checkDataBase();
if (dbExist) {
Log.i("tag", "The database is exist.");
} else {// 不存在就把raw里的數(shù)據(jù)庫(kù)寫入手機(jī)
try {
util.copyDataBase();
} catch (IOException e) {
thrownew Error("Error copying database");
}
}
}
3,檢測(cè)是否有SDCard,執(zhí)行copy。(個(gè)人感覺(jué)可以不檢測(cè)SD卡是否存在,但不檢測(cè)似乎有個(gè)問(wèn)題,程序原因?)
boolean hasSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if(hasSDCard){
copyDataBaseToPhone();
}else{
showToast("未檢測(cè)到SDCard");
}
- Android SQLite數(shù)據(jù)庫(kù)版本升級(jí)的管理實(shí)現(xiàn)
- Android實(shí)現(xiàn)創(chuàng)建或升級(jí)數(shù)據(jù)庫(kù)時(shí)執(zhí)行語(yǔ)句
- Android SQLite數(shù)據(jù)庫(kù)增刪改查操作的使用詳解
- Android使用SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例
- 條件數(shù)據(jù)庫(kù)Android:sqllite的簡(jiǎn)單使用
- Android中操作SQLite數(shù)據(jù)庫(kù)快速入門教程
- Android創(chuàng)建和使用數(shù)據(jù)庫(kù)SQLIte
- Android SQLite數(shù)據(jù)庫(kù)增刪改查操作的案例分析
- Android操作SQLite數(shù)據(jù)庫(kù)(增、刪、改、查、分頁(yè)等)及ListView顯示數(shù)據(jù)的方法詳解
- Android開(kāi)發(fā)中數(shù)據(jù)庫(kù)升級(jí)且表添加新列的方法
相關(guān)文章
Kotlin標(biāo)準(zhǔn)函數(shù)與靜態(tài)方法應(yīng)用詳解
Kotlin中的標(biāo)準(zhǔn)函數(shù)指的是Standard.kt文件中定義的函數(shù),任何Kotlin代碼都可以自由地調(diào)用所有的標(biāo)準(zhǔn)函數(shù)。例如let這個(gè)標(biāo)準(zhǔn)函數(shù),他的主要作用就是配合?.操作符來(lái)進(jìn)行輔助判空處理2022-12-12Android使用GRPC進(jìn)行通信過(guò)程解析
這篇文章主要給大家介紹了在Android上使用grpc的方法教程,文中通過(guò)示例代碼給大家詳細(xì)介紹了在android上使用grpc的方法以及可能遇到的種種問(wèn)題的解決方法,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2023-02-02安卓(Android) 監(jiān)聽(tīng)按鍵長(zhǎng)按事件
本文主要介紹Android 中監(jiān)聽(tīng)按鍵的長(zhǎng)按事件,對(duì)按鍵機(jī)制進(jìn)行詳解,并附有代碼實(shí)例,具有參考價(jià)值,希望能幫到有需要的小伙伴2016-07-07Android Socket服務(wù)端與客戶端用字符串的方式互相傳遞圖片的方法
這篇文章主要介紹了Android Socket服務(wù)端與客戶端用字符串的方式互相傳遞圖片的方法的相關(guān)資料,需要的朋友可以參考下2016-05-05Android 開(kāi)發(fā)實(shí)現(xiàn)EditText 光標(biāo)居右顯示
這篇文章主要介紹了Android 開(kāi)發(fā)實(shí)現(xiàn)EditText 光標(biāo)居右顯示的相關(guān)資料,需要的朋友可以參考下2017-02-02Android中WebChromeClient和WebViewClient的區(qū)別淺析
這篇文章主要介紹了Android中WebChromeClient和WebViewClient的區(qū)別淺析,需要的朋友可以參考下2015-04-04Android實(shí)現(xiàn)帶節(jié)點(diǎn)的進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶節(jié)點(diǎn)的進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03Android應(yīng)用APP自動(dòng)更新功能的代碼實(shí)現(xiàn)
本篇文章主要介紹了Android應(yīng)用APP自動(dòng)更新功能的代碼實(shí)現(xiàn),想要實(shí)現(xiàn)這個(gè)效果的同學(xué)可以了解一下。2016-11-11