我在我的iPhone应用程序中使用SQLite3从表中选择数据(tbresults),对数据进行一些计算并在我的uitableview中显示它。 sql命令使用SUM函数,我的应用程序似乎不喜欢它。
我从表中选择的方法如下,但处理似乎在下一行失败。
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)
该方法的完整代码如下。
+ (void) getLeagueTable {
Tag_TrackerAppDelegate *appDelegate = (Tag_TrackerAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.tbresultsArray = [[NSMutableArray alloc] init];
const char *sql = "select a.resultid, a.teamname, sum(b.played), sum(b.win), "
"sum(b.draw), sum(b.lose), sum(b.for), sum(b.against), sum(b.win * 3 + b.draw) "
"from tbteam a, tbresults b, tbseason c where a.teamid = b.teamid and c.active = 'Y'"
"and b.seasonid = c.seasonid group by b.teamid order by points desc;";
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
sqlite3_stmt *selectstmt;
while(sqlite3_step(selectstmt) == SQLITE_ROW) {
NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
tbresults *resultsObj = [[tbresults alloc] initWithPrimaryKey:primaryKey];
resultsObj.teamname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
resultsObj.played = sqlite3_column_int(selectstmt, 2);
resultsObj.won = sqlite3_column_int(selectstmt, 3);
resultsObj.drawn = sqlite3_column_int(selectstmt, 4);
resultsObj.lost = sqlite3_column_int(selectstmt, 5);
resultsObj.For = sqlite3_column_int(selectstmt, 6);
resultsObj.Against = sqlite3_column_int(selectstmt, 7);
resultsObj.points = sqlite3_column_int(selectstmt, 8);
[appDelegate.tbresultsArray addObject:resultsObj];
[resultsObj release];
}
}
else
sqlite3_close(database);
}
有人知道在iPhone上使用SUM功能是否有问题?我检查并仔细检查了其余的代码。数据库正在成功打开。
任何帮助都将不胜感激。
答案 0 :(得分:0)
你得到什么样的错误?
我认为您的select语句无效,请停止选择a.resultid列或在group by中包含此列,它将起作用。
答案 1 :(得分:0)
至少你需要一个合适的group by子句:
"select a.resultid, a.teamname, sum(b.played), sum(b.win), "
"sum(b.draw), sum(b.lose), sum(b.for), sum(b.against), sum(b.win * 3 + b.draw) "
"from tbteam a, tbresults b, tbseason c where a.teamid = b.teamid and c.active = 'Y'"
"and b.seasonid = c.seasonid group by a.resultid, a.teamname order by points desc;";