2011-09-30 67 views
0

我一直在努力合并一个sqlite数据库在我的iPhone应用程序。数据库已创建,并且我已成功将元素插入到数据库中。现在,当我尝试从db中选择时,我的prepare语句不符合SQLITE_OK的要求。下面是代码,我创建数据库:sqlite声明不行......为什么? - iphone

const char *sql_stmt = "CREATE TABLE IF NOT EXISTS EXPENSES (id integer primary key autoincrement, unix_date integer, date_time text, purpose text, start_mile text, end_mile text, distance text, fees text, party_id integer)"; 

,这里是我用来提取数据的代码:

const char *dbpath = [databasePath UTF8String]; 
sqlite3_stmt *statement; 
printf("in getExpense\n"); 
//expenses = [[NSMutableArray alloc] init]; 

if (sqlite3_open(dbpath, &expenseDB) == SQLITE_OK) 
{ 
    NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM EXPENSES"]; 

    const char *query_stmt = [querySQL UTF8String]; 

    if (sqlite3_prepare_v2(expenseDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) 
    { 

     printf("right before the while loop\n"); 
     while (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      printf("in the while loop\n"); 
      VehicleExpense *expense = [[VehicleExpense alloc] init]; 

      NSInteger *newTimeStamp = sqlite3_column_int(statement, 1); 

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

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

      NSString *newStart = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 4)]; 
      NSString *newEnd = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 5)]; 
      NSString *newDistance = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 6)]; 
      NSString *newFees = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 7)]; 
      NSInteger *newPartyId = sqlite3_column_int(statement, 8); 

      expense.unix_date = newTimeStamp; 
      expense.date = newDate; 
      expense.purpose = newPurpose; 
      expense.start_mile = newStart; 
      expense.end_mile = newEnd; 
      expense.distance = newDistance; 
      expense.fees = newFees; 
      expense.party_id = newPartyId; 

      [expenses addObject: expense]; 
      printf("expense add"); 

      [newDate release]; 
      [newPurpose release]; 
      [newStart release]; 
      [newEnd release]; 
      [newDistance release]; 
      [newFees release]; 

      [expense release]; 

      expense_count++; 

     } 
     sqlite3_finalize(statement); 
    }else{ 
     printf("the prepare statement is not ok\n"); 
    } 
    sqlite3_close(expenseDB); 
}else{ 
    printf("couldn't open the db\n"); 
} 

第二个if语句一直没有出于某种原因?

任何想法?

+1

使用'的NSLog(@ “错误:%s”,sqlite3_errmsg(expeseDB));'打印错误控制台(在你的else语句)。这个错误通常说明问题是什么。 –

回答

1

printf("the prepare statement is not ok\n");根本没有什么帮助。尝试类似

NSLog(@"prepare failed (%s)", sqlite3_errmsg(expenseDB)); 
+0

它刚刚开始工作......我没有更改任何代码?......非常感谢 - 我不知道如何获取错误消息。 – coder

+2

应该使用%s代替%@,因为它是'C字符串' –

+1

正确,%s是正确的。 –

相关问题