【发布时间】:2015-02-28 06:44:25
【问题描述】:
我已经设置了一个 GlobalVars 类来保存我的 sqlite3 数据库变量。
static sqlite3** database;
const char *dbPath;
@implementation GlobalVars : NSObject
+(GlobalVars*)sharedInstance {
static GlobalVars *myInstance = nil;
if(myInstance == nil) {
myInstance = [[[self class] alloc] init];
}
return myInstance;
}
+(sqlite3*)getGlobalDatabase {
return &database;
}
+(void)setGlobalDatabase:(sqlite3*)_database {
database = &_database;
}
然后在我的头文件中
static sqlite3** database;
在界面上方。这就是我设置数据库变量的方式。
然后,当我打开数据库并准备它时,我会尝试访问它。我可以打开它,因为 open 调用返回 true。我无法正确准备它,因为该语句返回 false 并且它没有进入 if 语句。我想知道我是否弄乱了我的指针,因为准备语句不起作用,并且没有正确准备。
-(void)setAllValues:(NSMutableArray*)array {
if(sqlite3_open([GlobalVars getGlobalDBPath], [GlobalVars getGlobalDatabase]) == SQLITE_OK) {
sqlite3_stmt *insertStatement;
NSString *sqlInsert = [NSString stringWithFormat:@"insert into my_table ('_id', 'name', 'age', 'weight', 'height', 'description') VALUES (%i, '%@', '%i', '%i', '%@', '%@')", ID, name, age, weight, height, description];
//*********** This is not opening, and SQLITE_OK is equal to false ***********
if(sqlite3_prepare_v2(([GlobalVars getGlobalDatabase]), [sqlInsert UTF8String], -1, &insertStatement, nil) == SQLITE_OK) {
if(sqlite3_step(insertStatement) == SQLITE_DONE) {
NSLog(@"insert stepping done");
}
sqlite3_reset(insertStatement);
}
sqlite3_finalize(insertStatement);
sqlite3_close([GlobalVars getGlobalDatabase]);
}
}
数据库的变量都填充了正确的数据,打开数据库似乎没有问题。在准备时,它无法正常工作并返回false。任何想法为什么。感谢您的帮助,感谢您的帮助。
【问题讨论】:
-
当对
sqlite3_prepare_v2的调用失败时记录sqlite3_errmsg。 -
那么,sqlite3_errmsg 是怎么说的呢?从 sqlite3_prepare_v2 返回的返回码是什么?
-
@HotLicks sqlite3_errmsg 说“库例程调用乱序”
-
呃,你处理“GlobalDatabase”的方式坏了。您的间接方式都是错误的,并且可以肯定的是,它应该在 open 和 prepare 之间有所不同(事实并非如此)。
-
(我怀疑你不懂C语言间接。)
标签: ios objective-c pointers sqlite