获取SQLite数据库文件路径

前言

这篇文章主要介绍了sqlitedatabase如何获取数据库路径

获取数据库文件路径

先来回顾下SQLiteDatabase学习(二)中创建数据库类DBOpenHelper,然后稍作修改,将DBOpenHelper改为如下代码

package com.example.pei.textdemo.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Title:创建数据库
 * Description:
 * <p>
 * Created by pei
 * Date: 2017/11/16
 */
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;

/**
 * Title:数据库增删改查帮助类
 * Description:
 * <p>
 * Created by pei
 * Date: 2017/11/16
 */
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();
        }
    }

    /**
     * 判断表是否存在
     * @param tableName:表名
     * @return
     */
    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,今天的内容就讲到这里,谢谢!

    原文作者:奔跑的佩恩
    原文地址: https://www.jianshu.com/p/815c9efc5449
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞