我是objective-C和iphone应用程序的新手。
我正在访问SQLite,在“coffee”表中有3行。我用下面的方法从表中取出某物,但是,只有第2行和第3行被拉出{总是遗漏第1行}。这是因为while循环中的逻辑,通过检查while sqlite3_step(selectstmt)返回SQLITE_ROW是错误的吗?代码如下:

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

  const char *sql = "select coffeeID, coffeeName from coffee";
  sqlite3_stmt *selectstmt;
  NSLog(@"sqlite_prepare_v2 returns: %i", sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL));

  if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

   NSLog(@"sqlite3_step returns: %i", sqlite3_step(selectstmt));
   while(sqlite3_step(selectstmt) == SQLITE_ROW) {

    NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
    Coffee *coffeeObj = [[Coffee alloc] initWithPrimaryKey:primaryKey];
    coffeeObj.coffeeName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
    NSLog(@"this is the coffee name: %@", coffeeObj.coffeeName);
    coffeeObj.isDirty = NO;

    [appDelegate.coffeeArray addObject:coffeeObj];
    [coffeeObj release];
   }
  }
 }

另一方面,有什么方便的方法可以直接从SQLite的C接口检查查询中的returen行数吗?
非常感谢。

最佳答案

您可以使用查询SELECT COUNT(*) FROM coffee来告诉您有多少行。
同时,省去一些头痛和use a SQLite wrapper

09-27 02:33