sqlite 无此类表错误

lstz6jyr  于 2022-11-30  发布在  SQLite
关注(0)|答案(4)|浏览(193)

我不得不搜索了很多关于这些错误的帖子,但我仍然无法修复这个问题。这是我的代码,有人能帮我看看出了什么问题吗?

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

xkrw2x1b1#

SQL.sqlite中没有表Coffee
如果数据库文件不存在,SQLite会自动创建它。所以如果你的path输入错误,你打开的是一个空的数据库文件,当然它不包含任何表。确保数据库文件存在并且不是空的。
您可以通过运行SELECT * FROM sqlite_master;查询来查看数据库中有哪些表。

yvfmudvl

yvfmudvl2#

当我遇到数据库问题(在本例中是Oracle)时,DBA告诉我的一件事是使用命令行工具尝试查询。
以下是诊断sqlite3和iPhone模拟器问题的方法:
1.在“iPhone模拟器”中运行应用程序,以便在“文稿”目录中创建/复制数据库。
1.启动终端

  1. cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents。最好在模拟器中只安装一个应用程序,这样就可以很明显地看出哪个应用程序是什么。
  2. sqlite3 SQL.sqlite并从那里尝试查询。您也可以使用.schema命令来查看架构的外观。
    如果查询在那里工作,而不是在你的应用程序,那么你知道你有一个错误,否则你有一个sqlite查询问题或坏模式。
30byixjq

30byixjq3#

尝试重新安装这应用程序.这表是创建在这时候安装这应用程序.有时它可能发生因为这表是不创建

dy2hfwbg

dy2hfwbg4#

我遇到了一个“no such table error”,因为db文件从未被复制到bin文件夹。在项目中的一个.db文件中,确保其属性“Copy to Output Directory”设置为:

  • 始终复制(始终复制空白数据库)
  • 如果较新则复制

相关问题