当我将android版本和路径从externalized更改为默认数据库文件夹时,我不知道错误来自何处。 我发现原因可能是访问日志文件的问题被锁定(它是由程序创建的)。
“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)表是READ但未找到第1行 2a)如果读取关闭,则可以再次读取。 3)第1行被插入 4)当再次尝试READ时(也找不到第2行),移动光标失败。
需要手动删除日志文件,否则尝试连接时应用程序将无法再次启动。
请帮忙!谢谢。
答案 0 :(得分:0)
也许您应该使用专门的插入和更新方法。
在execSQL所说的SQLiteDatabase的文档中:
执行一个非SELECT / INSERT / UPDATE / DELETE的SQL语句。
有类似名称的插入和更新的专门方法。我想,当非特定的&#34; execSQL&#34;时,会产生一些问题。声明被使用。
答案 1 :(得分:0)
可能sqlite版本在新旧系统中有所不同......我再次更改了rom - 由于某种原因,这次我没有将数据库文件复制到数据文件夹中。相反,我让程序创建一个空数据库,并通过程序本身从csv-export导入文本中的数据。
我目前不知道问题是在rom内还是(在我看来似乎是什么原因)我通过使用原始数据库来创建问题,该数据库可能是可读写的,但是当日志文件应该有问题时得到处理。如果有人有同等的问题,他应该尝试在新系统中创建一个新的空数据库。