Android 使用SQLiteOpenHelper打开SD卡上的数据库

本文介绍了如何使用SQLiteOpenHelper类在Android设备上管理数据库,包括创建数据库上下文类,实现数据库路径查找,以及使用SQLiteOpenHelper打开和操作数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值