我有这个代码,用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");
}
}
}
通过insert命令,我可以在fazerbem_clientes
表中插入新值,但是当我尝试在表fazerbem_produto
中插入值时,没有记录值,过了一会儿,我使用命令在插入上返回错误消息,并看到他声称fazerbem_produtos
表不存在。
回到上面的代码,我该如何解决这个问题?这次成功创建了四个表吗?
答案 0 :(得分:1)
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成功,这将显示成功。