前言
這篇文章主要介紹了sqlitedatabase如何擷取資料庫路徑
擷取資料庫檔案路徑
先來回顧下SQLiteDatabase學習(二)中建立資料庫類DBOpenHelper,然後稍作修改,将DBOpenHelper改為如下代碼
package com.example.pei.textdemo.sqlite;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBOpenHelper extends SQLiteOpenHelper{
private static final String DB_NAME = "test_demo.db";//資料庫檔案名
private static SQLiteDatabase INSTANCE;
private Context mContext;
public SQLiteDatabase getInstance() {
if (INSTANCE == null) {
INSTANCE = new DBOpenHelper(mContext).getWritableDatabase();
}
return INSTANCE;
}
public DBOpenHelper(Context context) {
this(context, DB_NAME, null, 1);
this.mContext=context;
}
public DBOpenHelper(Context context, String dbName, SQLiteDatabase.CursorFactory factory, int version) {
super(context, dbName, factory, version);
}
public String getDBPath(){
return mContext.getDatabasePath(DB_NAME).getPath();
}
//首次建立資料庫時調用,一般進行建庫建表操作
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE IF NOT EXISTS user(_id integer NOT NULL PRIMARY KEY AUTOINCREMENT,\n" +
" name text,\n" +
" sex text,\n" +
" age integer);";
//建立表
db.execSQL(createTable);
}
//當資料庫的版本發生變化的時候會自動執行,禁止人為調用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
這裡需要注意的是,上面代碼與SQLiteDatabase學習(二)的DBOpenHelper多加了一個方法
public String getDBPath(){
return mContext.getDatabasePath(DB_NAME).getPath();
}
此方法用于擷取資料庫檔案的路徑
然後将SQLiteDatabase學習(二)中DBHelper類稍作修改并增加擷取資料庫路徑的方法
package com.example.pei.textdemo.sqlite;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.pei.textdemo.app.AppContext;
import java.util.List;
public abstract class DBHelper {
protected DBOpenHelper mDBOpenHelper;
protected String getDatabasePath(){
if(mDBOpenHelper==null){
mDBOpenHelper=new DBOpenHelper(AppContext.getInstance());
}
return mDBOpenHelper.getDBPath();
}
protected SQLiteDatabase getDateBase(){
if(mDBOpenHelper==null){
mDBOpenHelper=new DBOpenHelper(AppContext.getInstance());
}
return mDBOpenHelper.getInstance();
}
protected void closeDB(){
SQLiteDatabase db = getDateBase();
if(db!=null){
db.close();
}
}
protected boolean isTableExist(String tableName){
Cursor cursor = getDateBase().rawQuery("select name from sqlite_master where type='table';", null);
while(cursor.moveToNext()){
//周遊出表名
String name = cursor.getString(0);
if(name.equals(tableName)){
return true;
}
}
return false;
}
protected abstract List> checkAll();
protected abstract void insert(Object obj);
protected abstract void delete(Object obj);
protected abstract void update(Object obj);
}
這裡我們可以看見DBHelper類中getDateBase做了些修改,并增加了擷取資料庫路徑的方法如下
protected String getDatabasePath(){
if(mDBOpenHelper==null){
mDBOpenHelper=new DBOpenHelper(AppContext.getInstance());
}
return mDBOpenHelper.getDBPath();
}
UserDBHelper的代碼和SQLiteDatabase學習(二)中的沒有什麼變動,在此就不展示了。
然後在activity中,我們就可以直接調用擷取資料庫檔案路徑了
String dbPath=UserDBHelper.getInstance().getDatabasePath();
擷取的預設sqlite資料庫檔案位置為:
com.example.pei.textdemo E/pei: ===/data/data/com.example.pei.textdemo/databases/test_demo.db
ok,今天的内容就講到這裡,謝謝!