我有一个 SQLite 数据库,它是使用找到的 SQLite JDBC 连接器生成的 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);
有问题可以私信我
关于android - 外部生成的 SQLite 数据库被 Android 的 SQLiteOpenHelper 视为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4753896/