获取SQLite数据库文件路径

作者: 奔跑的佩恩 | 来源:发表于2017-11-21 15:19 被阅读644次

    前言

    这篇文章主要介绍了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,今天的内容就讲到这里,谢谢!

    相关文章

      网友评论

        本文标题:获取SQLite数据库文件路径

        本文链接:https://www.haomeiwen.com/subject/zsgdvxtx.html