0

テーブルから単一の行sqliteを選択し、両方の値が異なり、内部に入らないことを確認すると、問題が発生します。sqlite3_step(statement) == SQLITE_ROWwhile statement

これはコードです:

if (sqlite3_prepare_v2(db, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
    //NSLog(@"working777.............%d",sqlite3_step(statement));

    while (sqlite3_step(statement) == SQLITE_ROW)
    {
       NSLog(@"working888.............%d",SQLITE_ROW);
       NSString *addressField = [[NSString alloc]   initWithUTF8String: (const char *) sqlite3_column_text(statement, 0)];


       NSString *phoneField = [[NSString alloc]    initWithUTF8String:(const char *)sqlite3_column_text(statement, 1)];


       NSLog(@"............statement...........addressField %@, phoneField %@",addressField,phoneField);
    } 

   sqlite3_finalize(statement);
}
   sqlite3_close(db);

 } 
4

2 に答える 2

0

このようなクエリを作成する適切な方法は次のようになります。

NSString *querySQL = @"SELECT * FROM Major_Events WHERE temple_id = ?";

次に、ステートメントを準備します。query_stmt は、querySQL の char * 値であると想定しています。

ステートメントが準備されたら、値をバインドする必要があります。

sqlite3_bind_int(statement, 1, temp_id); // bind is 1-based

もちろん、temp_id は文字列ではなく int 値である必要があります。さまざまなデータ型に対してさまざまな sqlite3_bind_xxx ステートメントがあります。適切なものを使用してください。

すべてのクエリ パラメータがバインドされると、sqlite3_step を使用してクエリを実行できます。

文字列形式に対するこのアプローチの優れた点は、文字列が適切にエスケープされ、引用符で囲まれることです。混乱するのがはるかに難しくなり、クエリが SQL インジェクション攻撃に対してより安全になります。

于 2012-10-10T05:28:09.880 に答える
0

多くのレコードの場合:-

if (sqlite3_open([[self getDBPath] UTF8String], &database) == SQLITE_OK) {
        const char *sql = "select * from Place";
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {

            }
            sqlite3_finalize(selectstmt);
             sqlite3_close(database);
        }
    }
    else
    {
        sqlite3_close(database);
    }

If you want a single record then change while to if

if(sqlite3_step(selectstmt) == SQLITE_ROW) {

残りはすべて同じになります

while ループが実行されない場合は、クエリに問題があることを意味します。それも確認する必要があります。

于 2012-10-10T05:28:37.797 に答える