2012-03-15 120 views
0

我是相當新的源碼(3小時)SQLITE3發出警告的「不兼容的指針類型」

什麼,我想在這裏做的是讓一個數據庫行到自定義對象(物具有相同NR 。propertys爲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功能:

到類型的參數不兼容的指針類型傳遞「DataDb *」「sqlite3的*」(又名「結構的sqlite3 *」)

爲了公平...代碼的一個示例代碼我發現,但它的修改版本爲有問題的人工作,我不明白爲什麼它不適用於我

+0

告訴我你使用哪個教程 – Hector 2012-03-15 05:17:25

回答

0

因爲你已經聲明getSgForIndex作爲類方法而不是一個實例,對數據庫的引用最終是static DataDb *database而不是sqlite3 *database你想要的。您必須使getSgForIndex成爲實例方法,而不是類方法。 (你可能不想把它們稱爲數據庫來幫助減少混淆)

+0

它的工作原理...終於...謝謝你 – skytz 2012-03-15 05:48:43

相關問題