android 在SdCard上创建数据库

 数据库管理类中使用到的是自定义的Context,而非app的上下文对象:


/**
 * 用于支持对存储在SD卡上的数据库的访问
 **/
public class DbContext extends ContextWrapper {

	/**
	 * 构造函数
	 * 
	 * @param base
	 *            上下文环境
	 */
	public DbContext(Context base) {
		super(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) {// 如果不存在,
			Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");
			return null;
		} else {// 如果存在
				// 获取sd卡路径
			String dbDir = android.os.Environment.getExternalStorageDirectory()
					.getAbsolutePath();
			dbDir += "/database";// 数据库所在目录
			String dbPath = dbDir + "/" + name;// 数据库路径
			// 判断目录是否存在,不存在则创建该目录
			File dirFile = new File(dbDir);
			if (!dirFile.exists())
				dirFile.mkdirs();

			// 数据库文件是否创建成功
			boolean isFileCreateSuccess = false;
			// 判断文件是否存在,不存在则创建该文件
			File dbFile = new File(dbPath);
			if (!dbFile.exists()) {
				try {
					isFileCreateSuccess = dbFile.createNewFile();// 创建文件
				} catch (IOException e) {
					// TODO Auto-generated catch block
					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会调用此方法获取数据库。
	 * 
	 * @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;
	}
}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。