我对sqlite相当新(3小时)
我想在这里做的是将一个数据库行放入一个自定义对象(这些对象与表中列的nr。属性相同...所以它不应该是一个问题那里)
所以这是我的代码:
#import <Foundation/Foundation.h>
#import "/usr/include/sqlite3.h"
#import "Headers.h"
@interface DataDb : NSObject{
sqlite3 *database;
}
+(DataDb*)database;
+(Singleton*)getSgForIndex:(int)index;
@end
#import "DataDb.h"
@implementation DataDb
static DataDb *database;
+(DataDb*)database
{
if(database==nil){
database=[[DataDb alloc]init];
}
return database;
}
-(id)init{
if(self=[super init]){
NSString *sqliteDb =[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"sqlite3"];
if(sqlite3_open([sqliteDb UTF8String], &database) !=SQLITE_OK){
NSLog(@"Failed to open database!");
return nil;
}
}
return self;
}
+(Singleton*)getSgForIndex:(int)index{
Singleton *returnSingleton =[[[Singleton alloc]init]autorelease];
NSString *query =[NSString stringWithFormat:@"SELECT * FROM Quiz WHERE Q_Id=%i",index];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database,[query UTF8String], -1, &statement, NULL)==SQLITE_OK) {
NSLog (@"Works!");
/*
...code...
*/
sqlite3_finalize(statement);
}else{
NSLog(@"Failed!!");
}
return returnSingleton;
}
-(void)dealloc{
sqlite3_close(database);
[super dealloc];
}
@end
..并且编译器在sqlite3_prepare_v2
函数中存在以下问题:
不兼容的指针类型传递&#39; DataDb *&#39;参数类型&#39; sqlite3 *&#39; (又名&#39; struct sqlite3 *&#39;)
公平地说......代码是我发现的示例代码的修改版本,但它适用于有问题的人,我不明白为什么它对我不起作用
答案 0 :(得分:0)
因为您已将getSgForIndex声明为类方法而非实例,所以对数据库的引用最终为static DataDb *database
,而不是您想要的sqlite3 *database
。您必须使getSgForIndex成为实例方法,而不是类方法。 (你可能不想把它们称为数据库,以帮助减少混淆)