我正在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 ) )
感谢!!!
答案 0 :(得分:0)
create table if not exists
会创建一个表格,如果它不存在的话。如果确实存在,它什么都不做。
如果您要删除表并创建一个新表,那么您的直觉是正确的,您应该执行drop
后跟create table
。如果这样做,更改的表应该有新列。 (顺便说一句,您也可以使用table_info
来确定是否存在所需列,如果不存在,则alter table
。
如果您发现该表未反映新列,则问题显然是您的更新由于某种原因而失败。
您正在尝试在应用包中的表格上执行此操作(这是只读的);或
您的更新因某种原因失败,但您可能无法正确检测/报告;或
您正在做一些用旧的表替换已更改的表。
如果没有代码,有关您所遇到的错误的详细信息,有关您如何确定表格不会发生变化的信息等,我们很难提供任何错误。更具体的律师。