2013-06-01 66 views
0
-(int)countTheNumberOfDublicatesForType:(int)typeID 
{ 
NSInteger quantity=0; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:user_data]; 
sqlite3* database = NULL; 
sqlite3_stmt *statement; 

if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) 
{ 
    const char *sqlQuery=sqlite3_mprintf("SELECT COUNT(refID)\ 
             FROM dublicates\ 
             WHERE typeREF=%i",typeID); 

    if(sqlite3_prepare_v2(database, sqlQuery,-1, &statement, NULL) == SQLITE_OK) 
     sqlite3_bind_int(statement, 1,typeID); 

     if(sqlite3_step(statement) == SQLITE_ROW) 
     { 
      quantity = sqlite3_column_int(statement, 0); 
     } 

     sqlite3_finalize(statement); 
     sqlite3_free((char*)sqlQuery); 
     sqlite3_close(database); 
} 
else 
{ 
    // 
} 

return quantity; 
} 

此方法中的數學運算返回int的最大值。錯誤在哪裏以及如何管理它會從db返回實際值的方式?先謝謝你。SQLite,Objective C:方法返回int最大值

編輯:enter image description here

+0

返回NUMS像169626256 – NCFUSN

回答

0

您有任何錯誤處理,您綁定到一個不存在的參數,代碼縮進錯了,你是一個錯誤的數據類型讀。

使用這樣的事情:

if (sqlite3_open([path UTF8String], &database) != SQLITE_OK) { 
    sqlite3_errmsg(database); // log or print this 
    sqlite3_close(database); 
    return 0; 
} 
if (sqlite3_prepare_v2(database, 
         "SELECT COUNT(refID) FROM dublicates WHERE typeREF=?", 
         -1, &statement, NULL) != SQLITE_OK) { 
    sqlite3_errmsg(database); // log or print this 
    sqlite3_close(database); 
    return 0; 
} 
sqlite3_bind_int(statement, 1, typeID); 
if (sqlite3_step(statement) != SQLITE_ROW) 
    sqlite3_errmsg(database); // log or print this 
else 
    quantity = sqlite3_column_int(statement, 0); 
sqlite3_finalize(statement); 
sqlite3_close(database); 
+0

有關於返回時間與SQLite數據庫的工作方式任何限制。看起來像當我在其他類中調用這個方法時,它期望一個NSMutableArray作爲它的返回類型。請參閱編輯。 – NCFUSN

+0

方法簽名和數據庫之間沒有關係。該方法使用您聲明的任何返回類型。 –