轉自:http://blog.csdn.net/chthq/article/details/7838033
二、在SD卡上創建數據庫
通過android的SQLiteOpenHelper類的源碼,可以看到SQLiteOpenHelper類的getWritableDatabase
這個接口實際上調用的是Context的openOrCreateDatabase方法,而這個方法是不支持帶路徑的數據庫名
稱的,也就是說,用這個方法創建的數據庫只能放在/data/data/包名稱/ 目錄下;要想在SD卡上創建數據庫
,我們可以調用SQLiteDatabase類的openOrCreateDatabase方法,這個方法是支持帶路徑的數據庫名稱的。
那麼下面的問題就是如何判斷是否存在SD卡,已經如何獲取SD卡的路徑了?
判斷是否存在SD卡:
android.os.Environment.MEDIA_MOUNTED.equals(
android.os.Environment.getExternalStorageState());
獲取SD卡路徑:String dbPath=android.os.Environment.getExternalStorageDirectory()
.getAbsolutePath();
在SD卡上創建數據庫方法如下:
String dbPath=android.os.Environment.getExternalStorageDirectory()
.getAbsolutePath()+"/database";
File dbp=new File(dbPath);
File dbf=new File(dbPath+"/"+"test.db");
if(!dbp.exists()){
dbp.mkdir();
}
//數據庫文件是否創建成功
boolean isFileCreateSuccess=false;
if(!dbf.exists()){
try{
isFileCreateSuccess=dbf.createNewFile();
}
catch(IOException ioex){
}
}
else{
isFileCreateSuccess=true;
}
if(isFileCreateSuccess)
db = SQLiteDatabase.openOrCreateDatabase(dbf, mFactory);
爲了簡便起見,我們可以用上述方法重寫SQLiteOpenHelper類的getWritableDatabase方法,
其他邏輯參照SQLiteOpenHelper類即可。最後別忘了,加入SD卡的讀寫權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>。