我不得不搜索有关这些错误的很多帖子,但我仍然无法解决问题。这是我的代码,任何人都可以帮我看看出了什么问题吗?
- (void) copyDatabaseIfNeeded {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"SQL.sqlite"];
if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK)
{
NSLog(@"Database opened successfully");
if(updateStmt == nil) {
NSString *updStmt = [NSString stringWithFormat: @"UPDATE Coffee SET CoffeeName = '500 Plus', Price = '1.40' Where CoffeeID= '3'"];
const char *mupdate_stmt = [updStmt UTF8String];
if(sqlite3_prepare_v2(newDBconnection, mupdate_stmt, -1, &updateStmt, NULL) != SQLITE_OK){
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(newDBconnection));
} else {
NSLog(@"Update successful");
}
}
if(SQLITE_DONE != sqlite3_step(updateStmt))
NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(newDBconnection));
else {
sqlite3_reset(updateStmt);
NSLog(@"Step successful");
}
}
else
{
NSLog(@"Error in opening database ");
}
}
答案 0 :(得分:29)
Coffee
中没有表格SQL.sqlite
。
如果数据库文件不存在,SQLite将自动创建数据库文件。因此,如果您发现path
错误,则打开空数据库文件,当然不包含任何表格。确保数据库文件存在,并且它不为空。
您可以通过运行SELECT * FROM sqlite_master;
查询来查看数据库中的表格。
答案 1 :(得分:2)
当我遇到数据库问题时(在这种情况下为Oracle),我的DBA告诉我的一件事是使用命令行工具尝试查询。
这就是你如何诊断sqlite3和iPhone模拟器的问题:
cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents
。最好只在模拟器中安装一个应用程序,这样很明显App是什么。sqlite3 SQL.sqlite
并从那里尝试您的查询。您还可以使用.schema
命令查看架构的外观。如果查询在那里工作而不在你的应用程序中,那么你知道你有一个bug,否则你有一个sqlite查询问题或架构坏了。
答案 2 :(得分:1)
尝试重新安装app.the表是在安装app时创建的。有时可能会因为没有创建表而发生