[ios]SQLite3 声明选择中,在那里和 ORDER BY 对 Obj C

发布时间: 2017/3/28 23:18:43
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个问题与 SQLite3 Xcode 上。 问题是我有此数据库︰

-------------------------|
| ID | Company  |  Model |
|------------------------|
| 1  | Audi     |  A4    |
| 2  | Audi     |  A4    |
| 3  | Audi     |  A3    |
| 4  | Audi     |  A4    |
| 5  | BMW      |  330Ci |
| 6  | BMW      |  330Ci |
| 7  | BMW      |  750i  |
| 8  | Mercedes |  CL65  |
| 9  | Mercedes |  CL65  |
--------------------------

我想要 sqlite3 告诉我像这样︰

-------------------------|
| ID | Company  |  Model |
|------------------------|
| 1  | Audi     |  A4    |
| 2  | Audi     |  A3    |
| 3  | BMW      |  330Ci |
| 4  | BMW      |  750i  |
| 5  | Mercedes |  CL65  |
--------------------------

我有此函数︰

-(NSString *)loadModel
{
    thecars = [[NSString alloc]initWithFormat:@"The data has been loaded to the pickers."];
    sqlite3_stmt * sqlStatement;
    @try {
        NSString *dbPath = [self path];
        if(sqlite3_open([[self path]UTF8String], &db) == SQLITE_OK)
        {
            NSLog(@"**** Database found at path.");
        }
        if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
        {
            NSLog(@"**** An error has occured: %@", sqlite3_errmsg(db));
        }
        NSString * hello = [NSString stringWithFormat:@"SELECT DISTINCT Model FROM Comp WHERE Company=%@",theChoosenCompany];
        const char * sql = [hello UTF8String];
        if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
        {
            NSLog(@"**** Problem with prepare statement: %@", sqlite3_errmsg(db));
        }
        else
        {
            while (sqlite3_step(sqlStatement) == SQLITE_ROW) {
                NSString * model = [NSString stringWithUTF8String:(char *)sqlite3_column_text(sqlStatement, 2)]; // Car models
                [modelsArray addObject:model];
            }
        }
    }
    @catch (NSException *exception) {
        NSLog(@"**** Problem with prepare statement:  %@", sqlite3_errmsg(db));
    }
    @finally {
        sqlite3_finalize(sqlStatement);
        sqlite3_close(db);
        return thecars;
    }
}

问题是,会总是获取错误和与错误程序粉碎"线程 1︰ 收到的节目信号:"EXC_BAD_ACCESS""。

我相信花丝是错了。

请如果有人可以帮助,我是新来 objective-c 所以请耐心等待。

多谢!

解决方法 1:

就个人而言,我会开始逐句通过代码线通过在调试器中,看见什么线正是导致问题。

顺便说一句,我不明白你在哪里设置 theChoosenCompany。,适当地使用引号和这样的东西吗?

此外,如果你想要的模型与公司的独特组合,并不是它只是

SELECT Model, Company FROM Comp GROUP BY Model, Company

很明显,我不知道你的逻辑,正如你说上面你想要的只是唯一的模式的公司组合,但您的代码看起来,尝试检索给定公司的独特模式。

最后,还有objective-c 包装为 SQLite3,如 FMDB (在https://github.com/ccgus/fmdb),使你摆脱 sqlite3 调用的杂草为这样的东西。

赞助商