Android操作位于sd卡上的sqlite数据库

sky-mxc 总结 转载注明出处:https://sky-mxc.github.io

对 sd卡上sqlite 数据库的操作

Android默认的数据库位置是在 data\data\packageName\databases\目录下的;
有时候因为业务需要我们需要操作位于sd卡的数据库,就可以通过重写 Context类的方法来实现

重写 ContextWrapper

我们在创建SqliteOpenHelper实例的时候需要传入一个Context 实例,就是通过他来实现的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class DBContext extends ContextWrapper {
public static final String TAG = "DBContext";
public DBContext(Context base) {
super(base);
}
/**
* 返回 数据库文件
* 重写此方法 返回我们位于sd卡的数据库文件
* @param name
* @return
*/
@Override
public File getDatabasePath(String name) {
//位于 sd卡的数据库 初始化时已经创建好了
File file = new File(Environment.getExternalStorageDirectory().getPath()+"/dbDemo",name);
return file;
}
/**
* Android 4.0后会调用此方法 还有一个2.3以前的方法就重写了,也没有那么底的版本了
* @param name
* @param mode
* @param factory
* @param errorHandler
* @return
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name),factory);
return db;
}
}

DBHelper

DBHelper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class DBHelper extends SQLiteOpenHelper {
public static final String TAG = "DBHelper";
private static final String NAME = "test.db";
private static final int VERSION = 1;
private static DBHelper dbHelpter;
public static DBHelper getDbHelpter(Context context){
if (dbHelpter == null){
dbHelpter = new DBHelper(context);
}
return dbHelpter;
}
private DBHelper(Context context) {
super(context, NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void query(){
DBContext dbContext = new DBContext(this);
DBHelper helpter = DBHelper.getDbHelpter(dbContext);
SQLiteDatabase db = helpter.getWritableDatabase();
Cursor cu = db.query("table1", new String[]{"id", "name", "age"}, null, null, null, null, "id desc", null);
if (null != cu){
while (cu.moveToNext()){
int id = cu.getInt(cu.getColumnIndex("id"));
String name = cu.getString(cu.getColumnIndex("name"));
int age = cu.getInt(cu.getColumnIndex("age"));
Log.e(TAG, "query: id="+id+";name="+name+";age="+age);
}
cu.close();
}
}

参考博客

http://blog.csdn.net/liyulei316686082/article/details/7230709