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 回答