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から実際の値を返す方法でそれを管理する方法は? 前もって感謝します。

編集:ここに画像の説明を入力

4

1 に答える 1

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);
于 2013-06-01T09:07:26.500 に答える