外部生成的 SQLite 数据库被 Android 的 SQLiteOpenHelper 视为只读

2023-11-30

我有一个使用 SQLite JDBC 连接器生成的 SQLite 数据库here.

然后,我将此数据库复制到 Android 手机的 SD 卡,并尝试使用 SQLiteOpenHelper 打开它。我得到以下异常:

ERROR/SQLiteOpenHelper(7373): android.database.sqlite.SQLiteException: attempt to write a readonly database: BEGIN EXCLUSIVE;

ERROR/AndroidRuntime(7373): Caused by: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /mnt/sdcard/4Trak/4Trak.db

这对我来说没有任何意义。为什么它是只读数据库?我能够首先写入它来生成它,当我意识到我需要一个 android_metadata 表时,我再次使用 SQLite 浏览器添加它。


Sqlite 只会打开应用程序数据库目录中的数据库。

DB_PATH = "/data/data/"+ context.getPackageName() + "/databases/"; 

为了读取和写入数据库,我的理解是您需要将数据库复制到此位置:

InputStream myInput = myContext.getAssets().open(DB_NAME);      
String outFileName = DB_PATH + DB_NAME;     
OutputStream myOutput = new FileOutputStream(outFileName);

byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
    myOutput.write(buffer, 0, length);
}

myOutput.flush();
myOutput.close();
myInput.close();

为了进行此复制,您首先必须在数据库文件的最终目的地打开一个数据库:

checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

如果您有任何疑问,请告诉我

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

外部生成的 SQLite 数据库被 Android 的 SQLiteOpenHelper 视为只读 的相关文章

随机推荐