如何修复'没有这样的表'错误与SQLite

afdcj2ne  于 2023-10-23  发布在  SQLite
关注(0)|答案(5)|浏览(152)

我不得不搜索许多关于这些错误的帖子,但我仍然无法解决这个问题。这是我的代码,谁能帮我看看哪里出错了?

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

cgvd09ve1#

SQL.sqlite中没有表Coffee
如果数据库文件不存在,SQLite会以静默方式创建该文件。因此,如果您弄错了path,您将打开 * 一个空的数据库文件 *,其中当然不包含任何表。确保数据库文件存在并且不为空。
您可以通过运行SELECT * FROM sqlite_master;查询来查看数据库中有哪些表。

gcmastyq

gcmastyq2#

当我遇到数据库问题时(这里是Oracle),我的DBA告诉我的一件事是尝试使用命令行工具进行查询。
下面是如何诊断sqlite3和iPhone模拟器的问题:
1.在iPhone模拟器中运行应用程序,以便在Documents目录中创建/复制数据库。
1.启动端子

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

izj3ouym3#

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

krcsximq

krcsximq4#

我有一个“没有这样的表错误”,因为db文件从来没有复制到bin文件夹。在项目中的.db文件中,确保其属性“复制到输出目录”设置为:

  • 始终复制(始终复制空白数据库)
  • 如果更新,则复制
6ioyuze2

6ioyuze25#

我在下面得到了同样的错误:
分析错误:无此表:public.user
当我尝试将表名public.user重命名为user时,如下所示。* 在将PostgreSQL转储文件转换为带有RebaseData的SQLite转储文件时,我遇到了带有.的表名:

ALTER TABLE public.user RENAME TO user;

因此,我使用""作为public.user,如下所示,然后我可以重命名表名而不会出错。* 我的回答解释得更多:

↓           ↓
ALTER TABLE "public.user" RENAME TO user;

相关问题