1.先创建一个DataBaseContext类继承ContextWrapper,重写getDatabasePath(String name)方法来查找SD卡上的数据库文件是否存在
public class DatabaseContext extends ContextWrapper {
private Context base;
private final static String DB_NAME = "callHomeDB.db";
private final static String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath() + "/test";
public DatabaseContext(Context base) {
super(base);
// TODO Auto-generated constructor stub
this.base = base;
}
/**
* 获得数据库路径,如果不存在,则创建对象对象
*
* @param name
* @param mode
* @param factory
*/
@Override
public File getDatabasePath(String name) {
// 判断是否存在sd卡
boolean sdExist = android.os.Environment.MEDIA_MOUNTED
.equals(android.os.Environment.getExternalStorageState());
if (!sdExist) {
return null;
} else {
// 数据库所在目录
String dbPath = DATABASE_PATH + "/" + DB_NAME;
File dbFile = new File(dbPath);
if (dbFile.exists()) {
return dbFile;
}
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会调用此方法获取数据库。
*
* @see android.content.ContextWrapper#openOrCreateDatabase(java.lang.String,
* int, android.database.sqlite.SQLiteDatabase.CursorFactory,
* android.database.DatabaseErrorHandler)
* @param name
* @param mode
* @param factory
* @param errorHandler
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode,
CursorFactory factory, DatabaseErrorHandler errorHandler) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
getDatabasePath(name), null);
return result;
}
}
2.创建SqliteOpenHelper类
public class CallerLocDb extends SQLiteOpenHelper {
public static String DATABASE_NAME = "test.db";
public static int DATABASE_VERSION = 1;
private SQLiteDatabase db;
public CallerLocDb(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
db = getReadableDatabase();
}
public SQLiteDatabase openConnection() {
if (!db.isOpen()) {
db = getReadableDatabase();
}
return db;
}
public void closeConnection() {
try {
if (db != null && db.isOpen()) {
db.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onCreate(SQLiteDatabase database) {
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
3.使用SqlitOpenHelper打开数据库
<span style="white-space:pre"> </span>DatabaseContext databaseContext = new DatabaseContext(getActivity());
MyDb mydb= new <span style="font-family: Arial, Helvetica, sans-serif;">MyDb</span><span style="font-family: Arial, Helvetica, sans-serif;">(databaseContext);</span>