创建新表时错误(旧)列

时间:2014-10-25 00:39:08

标签: ios sqlite

我正在Xcode中编写一个简单的应用程序。 有一个问题我无法解决:

当我想用sqlite3创建一个新表时,我使用: create table if not exists %@(some values...)

表格创建得很好,但它没有创建正确的列。 相反,它保留了一些旧列。

尝试删除所有表,甚至删除sqlite3文件并重新安装它......没有任何效果。

有没有解决方案?

谢谢!

编辑:

这是我的代码:

似乎所有表都已正确创建,但最后一个表中的列不会反映上面查询“create table ...”中的内容。

当我启动我的应用程序时,我使用drop table清除所有表格......

我创建了sqlite3文件并将其添加到Xcode中的项目中。 我正在模拟器和真正的iPhone设备上检查我的应用程序。 尝试从设备中删除应用程序,但在设备上再次模拟时问题仍然存在。 我删除了sqlite3文件并创建了一个新文件,将其添加到Xcode中,但它仍然使用旧的表格列...

使用ALTER TABLE后,表格会使用新列进行更新,但在删除它并再次创建时,会再次显示旧值...

不知道如何继续:\

        query = [NSString stringWithFormat:@"create table if not exists %@(medID integer primary key, name text, start text, days integer, timesPerDay integer, complete text)",[self.nameText.text stringByAppendingString:@"Medications"]];

        [self.dbManager executeQuery:query];
        if(self.dbManager.affectedRows != 0){
            NSLog(@"4 Query was executed successfully. Affected rows = %d", self.dbManager.affectedRows);
        }
        else{
            NSLog(@"Could not execute the query.");
        }

        //add vet table for pet

        query = [NSString stringWithFormat:@"create table if not exists %@(vetID integer primary key, name text, start text, days integer, timesPerDay integer, complete text)",[self.nameText.text stringByAppendingString:@"Veterinary"]];

        [self.dbManager executeQuery:query];
        if(self.dbManager.affectedRows != 0){
            NSLog(@"5 Query was executed successfully. Affected rows = %d", self.dbManager.affectedRows);
        }
        else{
            NSLog(@"Could not execute the query.");
        }

        query = @"SELECT name FROM sqlite_master WHERE type = 'table'";
        NSLog(@"%@",[self.dbManager loadDataFromDB:query]);


        query = @"pragma table_info(biVeterinary)";
        NSLog(@"%@",[self.dbManager loadDataFromDB:query]);


        query = @"alter table biVeterinary add column A text;";
        [self.dbManager executeQuery:query];

        query = @"pragma table_info(biVeterinary)";
        NSLog(@"%@",[self.dbManager loadDataFromDB:query]);

以下是我在控制台中获得的内容:

2014-10-25 11:03:39.998 iPet2 [771:14838] 1查询已成功执行。受影响的行= 1

2014-10-25 11:03:40.000 iPet2 [771:14838] 2查询已成功执行。受影响的行= 1

2014-10-25 11:03:40.002 iPet2 [771:14838] 3查询已成功执行。受影响的行= 1

2014-10-25 11:03:40.003 iPet2 [771:14838] 4查询已成功执行。受影响的行= 1

2014-10-25 11:03:40.004 iPet2 [771:14838] 5查询已成功执行。受影响的行= 1

2014-10-25 11:03:40.005 iPet2 [771:14838](         (         宠物     )         (         biVeterinary     )         (         biVaccinations     )         (         biMedications     ) )

2014-10-25 11:03:40.006 iPet2 [771:14838](         (         0,         vetID,         整数,         0,         1     )         (         1,         visitDate,         文本,         0,         0     )         (         2,         问题,         文本,         0,         0     ) )

2014-10-25 11:03:40.008 iPet2 [771:14838](         (         0,         vetID,         整数,         0,         1     )         (         1,         visitDate,         文本,         0,         0     )         (         2,         问题,         文本,         0,         0     )         (         3,         一个,         文本,         0,         0     ) )

感谢!!!

1 个答案:

答案 0 :(得分:0)

create table if not exists会创建一个表格,如果它不存在的话。如果确实存在,它什么都不做。

如果您要删除表并创建一个新表,那么您的直觉是正确的,您应该执行drop后跟create table。如果这样做,更改的表应该有新列。 (顺便说一句,您也可以使用table_info来确定是否存在所需列,如果不存在,则alter table

如果您发现该表未反映新列,则问题显然是您的更新由于某种原因而失败。

  • 您正在尝试在应用包中的表格上执行此操作(这是只读的);或

  • 您的更新因某种原因失败,但您可能无法正确检测/报告;或

  • 您正在做一些用旧的表替换已更改的表。

如果没有代码,有关您所遇到的错误的详细信息,有关您如何确定表格不会发生变化的信息等,我们很难提供任何错误。更具体的律师。