SQLiteOpenHelper 打开自定义路径下的db数据库文件

本文介绍了如何在Android项目中,使用SQLiteOpenHelper打开Cocos2dx创建并存放在/data/data/com.*.*/files目录下的SQLite数据库。通过自定义ContextWrapper解决SQLiteOpenHelper默认路径问题。
摘要由CSDN通过智能技术生成

       最近在做一个安卓项目,项目使用的sqlite数据库是cocos2dx 创建的,放在了/data/data/com.*.*/files下面,而SQLiteOpenHelper打开的文件默认是放在/data/data/databases/下面的,SQLiteOpenHelper里面没有地方能改变数据库的路径。于是在网上查阅了国外大牛的解决方案,完美解决了我的问题。解决办法:

       自定义Context,该Context用来给SQLiteOpenHelper初始化的时候使用,该类是:

       

import java.io.File;

import org.cocos2dx.lua.AppActivity;

import android.content.Context;
import android.content.ContextWrapper;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;

class DatabaseContext extends ContextWrapper {

	private static final String DEBUG_CONTEXT = "DatabaseContext";

	public DatabaseContext(Context base) {
		super(base);
	}

	@Override
	public File getDatabasePath(String name) {
		File sdcar
在Android Studio中,如果你想通过SQLiteOpenHelper连接到本地桌面SQLite数据库,通常的做法是在应用内部创建数据库,而不是直接链接到桌面上的文件。因为Android应用运行在设备的沙盒环境中,不具备直接访问桌面文件系统的权限。 不过,如果你确实有一个已经存在的桌面数据库,并希望在Android应用中读取或写入数据,你可以采取以下几个步骤: 1. **复制数据库到Android资源目录**:将桌面数据库文件(如`my_database.db`)复制到应用的assets或data/data/com.yourapp/files/目录下。例如,可以将它放在`assets/databases`目录下。 2. **获取数据库路径**:在AndroidManifest.xml中设置读取外部存储权限,然后在代码中通过`getExternalFilesDir()`或`getFilesDir()`获取对应的应用数据路径。 ```java File dbPath; if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { dbPath = new File(getExternalFilesDir("databases"), "my_database.db"); } else { dbPath = new File(getFilesDir(), "databases/my_database.db"); } ``` 3. **使用SQLiteOpenHelper**:创建一个SQLiteOpenHelper子类,覆盖`onCreate()`和`onUpgrade()`方法来处理数据库的初始化和升级。当需要与数据库交互时,通过`getWritableDatabase()`或`getReadableDatabase()`打开数据库。 ```java public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "my_database.db"; private static final int DATABASE_VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } //...剩下的SQLiteDatabase操作... } ``` 4. **注意安全性和性能**:尽管上述方法可行,但建议在生产环境中避免这种方法,因为它可能会导致性能问题并且不是最佳实践。如果真的需要共享数据库,考虑使用网络服务或云存储。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值