我有一个包含19条记录的SQLite数据库。在这些记录中,18的“威胁级别”值为1,其中一个的“威胁级别”为2.该字段设置为默认值为1.我最近将第19条记录更改为“threatLevel”2以进行测试。 我使用SQLite Manager(Firefox扩展)将值直接添加到项目中的sqlite文件中。我可以查询表格,它显示第19条记录的“威胁等级”为2。 当我在模拟器中运行我的应用程序时,第19条记录的“威胁等级”为1.我已经尝试清理我的构建,从模拟器卸载应用程序,甚至从我的项目中删除sqlite数据库并读取它。什么都行不通。 SQLite Manager表示它的值为2,但是当程序运行时,它的值为1。 从DB加载到类中的代码是:
primaryKey = pk;
database = db;
// Compile the query for retrieving City data.
if (init_statement == nil){
const char *sql = "SELECT * FROM myTable WHERE id=?";
if (sqlite3_prepare_v2(database, sql, -1, &init_statement, NULL) != SQLITE_OK){
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
}
sqlite3_bind_int(init_statement, 1, primaryKey);
if (sqlite3_step(init_statement) == SQLITE_ROW){
LOAD THE FIRST 12 FIELDS HERE
self.threat_level = sqlite3_column_int(init_statement, 13);
} else {
self.name = @"Nothing";
}
修改 我只是尝试从项目中删除sqlite数据库,然后将其移动到我的桌面进行备份。我仍然可以构建和运行我的应用程序。 所以它正在查看我的数据库的旧版本,但Spotlight说我的机器上没有其他版本,除了桌面上的版本。 这里有什么帮助吗?
答案 0 :(得分:1)
您可以使用lsof
列出进程打开的文件,这有助于确定正在使用的数据库。使用活动监视器等查找应用程序的进程ID,然后在终端中运行lsof -p <PID>
。
答案 1 :(得分:0)
我认为您可能希望在选择字符串...
中使用显式列名,而不是使用SELECT *答案 2 :(得分:0)
您的项目中的sqlite在哪里 - 例如。是在您的应用包中还是您将其写入应用的“文档”文件夹?
如果您将其写入应用程序的Documents文件夹并运行模拟器,您的文件将位于iPhone模拟器的Application Support文件夹中
~/Library/Application Support/iPhone Simulator/User/Applications/<application id>
此外,我将添加一个+1来使用核心数据 - 我刚刚参加了Apple iPhone活动,通过在大多数其他sqlite框架上使用Core Data获得了一些显着的效率和性能优势,尤其是直接访问sqlite c api。
答案 3 :(得分:0)
由于您需要在sqlite3_open()中提供参数,因此识别您正在使用的数据库的名称/路径应该很容易吗?
if (sqlite3_open([dataFilePath UTF8String], &database) == SQLITE_OK) {
数据库文件很可能在模拟器中。模拟器中有一个选项“重置内容和设置”。