我已經設置了一個GlobalVars類來容納我的sqlite3數據庫變量。sqlite3準備語句不工作,可能不適當的指針iOS
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;
這是接口的上方。這是我如何設置我的數據庫變量。
我然後試圖訪問它,當我打開數據庫並準備它。我可以打開它,因爲打開的調用返回true。我無法準確地進行準備,因爲該語句返回false,並且不會進入if語句。我想知道我是否搞亂了我的指針,因爲prepare語句不起作用,而且它沒有正確準備。
-(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]);
}
}
數據庫的變量都填充了正確的數據,它似乎打開數據庫沒有問題。在準備時,它不能正常工作並返回錯誤。任何想法爲什麼。感謝您的幫助,任何幫助表示讚賞。
登錄'sqlite3_errmsg'。 – rmaddy
那麼,sqlite3_errmsg說什麼?什麼是從sqlite3_prepare_v2返回的返回碼? –
@HotLicks sqlite3_errmsg說「庫程序調用不按順序」 –