我一直在努力合并一个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语句一直没有出于某种原因?
任何想法?
使用'的NSLog(@ “错误:%s”,sqlite3_errmsg(expeseDB));'打印错误控制台(在你的else语句)。这个错误通常说明问题是什么。 –