2013-02-06 28 views
0

我是新的iphone开发人员。我有一个sql查询“select pubdate from test where rowid in(select max(rowid)from test)”。当我执行这个查询我没有得到适当的结果。 源代码:通过使用单个语句执行多个查询来获得最大值

NSString *query=[NSString stringWithFormat:@"select pubdate from %@ where rowid in(select max(rowid) from %@)",tableName,tableName]; 
const char * sql = [query UTF8String]; 
sqlite3_stmt *lastInsVal_statement = nil; 
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
NSString * docsDir = [paths objectAtIndex:0]; 
NSString * thePath = [docsDir stringByAppendingPathComponent: 
         @"Training_Project2.sqlite"]; 
sqlite3_open([thePath UTF8String], &database); 
sqlite3_prepare_v2(database, sql, -1, &lastInsVal_statement, NULL); 
NSString* pubdate; 
while(sqlite3_step(lastInsVal_statement)==SQLITE_ROW){ 
    const char* str = (const char*)sqlite3_column_text(lastInsVal_statement, 2); 
    pubdate = [NSString stringWithCString:str encoding:NSUTF8StringEncoding]; 
} 
sqlite3_finalize(lastInsVal_statement); 
sqlite3_close(database); 
return pubdate; 
+1

sqlite3_column_text(lastInsVal_statement,2);似乎是问题,因为您只选择一列,可能应该是sqlite3_column_text(lastInsVal_statement,0)。 – Mohammad

+1

您可以将没有子查询的查询写为'SELECT pubdate FROM test ORDER BY rowid DESC LIMIT 1'。 –

回答

0

这条线:

const char* str = (const char*)sqlite3_column_text(lastInsVal_statement, 2); 

应改为此行:

const char *str = (const char *)sqlite3_column_text(lastInsVal_statement, 0); 

0意味着你想要让你在查询中选择的第一列!

相关问题