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