代码
/**
* 为了创建在sdcard目录下的数据库
* Created by lzz on 2016/9/22.
*/
public class SelfContext extends ContextWrapper {
/**
* 目录对象
*/
public static final String SELFPATH = "mnt/sdcard/NavPad/database";
public static final String TASHPATH = "mnt/sdcard/NavPad/database";
private String path;
/**
* 构造方法
* @param context 访问基类
* @param path 访问路径
*/
public SelfContext(Context context, String path) {
super(context);
this.path = path;
}
/**
* 获得数据库路径,如果不存在,则创建对象对象
*
* @param name
*/
@Override
public File getDatabasePath(String name) {
/*
* 判断是否存在sd卡
*/
boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState());
if (!sdExist) {//如果不存在,
return null;
} else {
/*
* 存在则获取sd卡路径
*/
String dbDir = path;//数据库所在目录
String dbPath = dbDir + "/" + name;//数据库路径
//判断目录是否存在,不存在则创建该目录
File dirFile = new File(dbDir);
if (!dirFile.exists()) {
dirFile.mkdirs();
}else if (dirFile.isFile()){
dirFile.delete();
dirFile.mkdirs();
}
//数据库文件是否创建成功
boolean isFileCreateSuccess = false;
//判断文件是否存在,不存在则创建该文件
File dbFile = new File(dbPath);
if (!dbFile.exists()) {
try {
isFileCreateSuccess = dbFile.createNewFile();//创建文件
isFileCreateSuccess = true;
} catch (IOException e) {
e.printStackTrace();
}
} else {
isFileCreateSuccess = true;
}
//返回数据库文件对象
if (isFileCreateSuccess) {
return dbFile;
} else {
return null;
}
}
}
/**
* 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
*
* @param name
* @param mode
* @param factory
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
return result;
}
/**
* Android 4.0会调用此方法获取数据库。
*
* @param name
* @param mode
* @param factory
* @param errorHandler
* @see ContextWrapper#openOrCreateDatabase(String, int,
* SQLiteDatabase.CursorFactory,
* DatabaseErrorHandler)
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
File file = getDatabasePath(name);
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(file, null);
return result;
}
}