要想操作数据库,首先我们要获取一个事务SQLiteDatabase
public SQLiteDatabase getWritableDatabase() {
synchronized (this) {
return getDatabaseLocked(true);
}
}
private SQLiteDatabase getDatabaseLocked(boolean writable) {
// ...省略
SQLiteDatabase db = mDatabase;
if (db != null) {
if (writable && db.isReadOnly()) {
db.reopenReadWrite();
}
} else if (mName == null) {
db = SQLiteDatabase.create(null);
} else {
try {
if (DEBUG_STRICT_READONLY && !writable) {
final String path = mContext.getDatabasePath(mName).getPath();
db = SQLiteDatabase.openDatabase(path, mFactory,
SQLiteDatabase.OPEN_READONLY, mErrorHandler);
} else {
db = mContext.openOrCreateDatabase(mName, mEnableWriteAheadLogging ?
Context.MODE_ENABLE_WRITE_AHEAD_LOGGING : 0,
mFactory, mErrorHandler);
}
// ...省略
}
public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version,
DatabaseErrorHandler errorHandler) {
if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version);
mContext = context;
mName = name;
mFactory = factory;
mNewVersion = version;
mErrorHandler = errorHandler;
}
可以看到会根据我们初始化数据库传入的数据库名称来确定数据库保存的路径
那就好办了!
public SQLiteOpenHelperImp(Context context) {
super(context, getMyDatabaseName(context), null, DATABASE_VERSION);
}
private static String getMyDatabaseName(Context context){
String databasename = DATABASE_NAME;
boolean isSdcardEnable =false;
// String state =Environment.getExternalStorageState();
boolean state =Environment.isExternalStorageRemovable();
if(state){//SDCard是否插入
isSdcardEnable = true;
}
String dbPath = "";
if(isSdcardEnable){
dbPath =Environment.getExternalStorageDirectory().getPath() +"/database/";
}else{//未插入SDCard,建在内存中
dbPath =context.getFilesDir().getPath() + "/database/";
}
File dbp = new File(dbPath);
if(!dbp.exists()){
dbp.mkdirs();
}
databasename = dbPath +DATABASE_NAME;
return databasename;
}