我有这段代码,它创建了一个包含 4 个表的新数据库“fazerbem.sqli”:
-(void)iniciarBancoDeDados{
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = dirPaths[0];
databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"fazerbem.sqli"]];
NSLog(@"DB Path: %@", databasePath);
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: databasePath ] == NO) {
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &myDatabase) == SQLITE_OK) {
char *errMsg;
const char *sql_clientes =
"CREATE TABLE IF NOT EXISTS fazerbem_clientes (ID INTEGER PRIMARY KEY AUTOINCREMENT, nome VARCHAR)";
const char *sql_produtos = "CREATE TABLE IF NOT EXISTS fazerbem_produtos (ID INTEGER PRIMARY KEY AUTOINCREMENT, codigo VARCHAR)";
const char *sql_fornecedores = "CREATE TABLE IF NOT EXISTS fazerbem_fornecedores (ID INTEGER PRIMARY KEY AUTOINCREMENT , telefone VARCHAR)";
const char *sql_marcas = "CREATE TABLE IF NOT EXISTS fazerbem_marcas (ID INTEGER PRIMARY KEY AUTOINCREMENT, marca VARCHAR)";
if (sqlite3_exec(myDatabase, sql_clientes, NULL, NULL, &errMsg) != SQLITE_OK && sqlite3_exec(myDatabase, sql_produtos, NULL, NULL, &errMsg) != SQLITE_OK && sqlite3_exec(myDatabase, sql_fornecedores, NULL, NULL, &errMsg) != SQLITE_OK && sqlite3_exec(myDatabase, sql_marcas, NULL, NULL, &errMsg) != SQLITE_OK) {
NSLog(@"A cricao do banco de dados falhou");
} else {
NSLog(@"O banco foi criado com sucesso");
}
sqlite3_close(myDatabase);
} else {
NSLog(@"Abertura e cricao do banco falharam");
}
}
}
通过插入命令,我可以在 fazerbem_clientes
表中插入新值,但是当我尝试在表 fazerbem_produto
中插入值时,值不是正在记录,过了一会,用命令返回了insert上的错误信息,看到他是在声明fazerbem_produtos
表不存在。
回到上面的代码,我该如何解决这个问题呢?至此这四张表创建成功了吗?
最佳答案
您在 if
语句中的逻辑不正确。如果对 sqlite3_exec
的第一次调用返回 SQLITE_OK
(意味着它起作用了),其他的将不会被调用,您将在 else
语句中结束.
这样试试:
if (sqlite3_exec(myDatabase, sql_clientes, NULL, NULL, &errMsg) == SQLITE_OK &&
sqlite3_exec(myDatabase, sql_produtos, NULL, NULL, &errMsg) == SQLITE_OK &&
sqlite3_exec(myDatabase, sql_fornecedores, NULL, NULL, &errMsg) == SQLITE_OK &&
sqlite3_exec(myDatabase, sql_marcas, NULL, NULL, &errMsg) == SQLITE_OK) {
NSLog(@"O banco foi criado com sucesso");
} else {
NSLog(@"A cricao do banco de dados falho");
}
如果所有 4 个都成功,这将显示成功。
关于ios - 执行多个sqlite3_exec,不创建表,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22584038/