当我更改android版本和路径从外部化到默认数据库文件夹时,我不知道错误来自哪里。我发现原因可能是访问日志文件被锁定的问题(它是由程序创建的)。
"test"正在读取数据,如果存在则更新,如果不存在则插入。这是在从文件中读取行时在循环中完成的。为了测试的目的,我简化了它,但错误是一样的。
package ...;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class test {
public test(SQLiteDatabase MyDB)
{
MyDB.execSQL("CREATE TABLE IF NOT EXISTS testtable (mytext TEXT, number INT PRIMARY KEY)", new String[] {});
for (int i = 1; i < 5; i++)
{
String[] ColArray = { "any text", String.valueOf(i) };
Cursor readCursor = MyDB.rawQuery("SELECT mytext FROM testtable WHERE number=?", new String[] { String.valueOf(i) });
if (!readCursor.moveToNext()) // Error when executing moveToNext
/*
In the 2nd time it runs over this point an Error occurs:
android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)
I need to remove the journal file to be able to connect to the database it again - the change made by the Insert/Update is successfully saved!
*/ {
readCursor.close();
MyDB.execSQL("INSERT INTO testtable (mytext, number) VALUES(?, ?)", ColArray);
}
else {
readCursor.close();
MyDB.execSQL("UPDATE testtable SET mytext=? WHERE number=?", ColArray);
}
}
}
}
MyDB是一个有效的数据库连接。1)表创建完成2) Table是READ,但是没有找到Line 1直到现在,如果读被关闭,再次读是可能的。3)第一行插入4)当试图再次读取时(也找不到第2行),移动光标失败。
日志文件需要手动删除,否则在尝试连接时应用程序将无法重新启动。
请帮忙!谢谢你。
也许你应该使用专门的插入和更新方法。
在sqliteddatabase的文档中,它说对于execSQL:
执行一条非SELECT/INSERT/UPDATE/DELETE的SQL语句
有专门的插入和更新方法,名称相似。我猜,当使用非特定的"execSQL"语句时,会产生一些问题。
经过几个小时的测试,我解决了这个问题。
可能新旧系统的sqlite版本不一样…我再次更改了ROM——出于某种原因,这次我没有将数据库文件复制到data-folder中。相反,我让程序创建一个空数据库,并由程序自己从csv-export中从文本中导入数据。
我目前不知道问题是否在房间内或(在我看来似乎是原因),我通过使用可能可读可写的原始数据库创建了问题,但当日志文件应该得到处理时存在问题。如果有人遇到相同的问题,他应该尝试在新系统中创建一个新的空数据库。