前言

这篇文章主要介绍了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:

*

* 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:

*

* 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,今天的内容就讲到这里,谢谢!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐