没有这样的表错误

时间:2012-08-24 04:41:09

标签: sqlite xcode4

我不得不搜索有关这些错误的很多帖子,但我仍然无法解决问题。这是我的代码,任何人都可以帮我看看出了什么问题吗?

- (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  ");
    }
}

3 个答案:

答案 0 :(得分:29)

Coffee中没有表格SQL.sqlite

如果数据库文件不存在,SQLite将自动创建数据库文件。因此,如果您发现path错误,则打开空数据库文件,当然不包含任何表格。确保数据库文件存在,并且它不为空。

您可以通过运行SELECT * FROM sqlite_master;查询来查看数据库中的表格。

答案 1 :(得分:2)

当我遇到数据库问题时(在这种情况下为Oracle),我的DBA告诉我的一件事是使用命令行工具尝试查询。

这就是你如何诊断sqlite3和iPhone模拟器的问题:

  1. 在iPhone模拟器中运行应用程序,以便在Documents目录中创建/复制数据库。
  2. 启动终端
  3. cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents。最好只在模拟器中安装一个应用程序,这样很明显App是什么。
  4. sqlite3 SQL.sqlite并从那里尝试您的查询。您还可以使用.schema命令查看架构的外观。
  5. 如果查询在那里工作而不在你的应用程序中,那么你知道你有一个bug,否则你有一个sqlite查询问题或架构坏了。

答案 2 :(得分:1)

尝试重新安装app.the表是在安装app时创建的。有时可能会因为没有创建表而发生