Sqlite3警告“不兼容的指针类型”

时间:2012-03-15 03:52:31

标签: objective-c database sqlite

我对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;)

公平地说......代码是我发现的示例代码的修改版本,但它适用于有问题的人,我不明白为什么它对我不起作用

1 个答案:

答案 0 :(得分:0)

因为您已将getSgForIndex声明为类方法而非实例,所以对数据库的引用最终为static DataDb *database,而不是您想要的sqlite3 *database。您必须使getSgForIndex成为实例方法,而不是类方法。 (你可能不想把它们称为数据库,以帮助减少混淆)