XcodeのSQLite3に問題があります。 問題は、私は、このデータベースを持っているということです。SQLite3ステートメントObj-CのSELECT、WHERE、ORDER BY
-------------------------|
| 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 ""でクラッシュします。
私は治療法が間違っていると信じています。
誰かが助けることができたら、私は客観的に新しいですので、気をつけてください。
ありがとう!
Robert、ご意見ありがとうございます。 ChoiceCompanyは以前ビューでクリックされた会社と同じです。私はただの会社のすべてのモデルを手に入れたいが、それぞれのモデルは一度だけだ。 'Select Model、Company FROM Comp GROUP BY Mode、Company'はこのトリックを行いますか? –
たとえば、私は 'SELECTモデルFROM Comp WHERE Company = Audi'を使用しました。ただ、各モデルを一度見せたいだけです。どうやってするの? –
そのための標準的なSQLは 'モデル選択FROM Comp WHERE Company = 'Audi' GROUP BY Model'です。 'GROUP BY'はあなたに一意の応答を与えるものです。また、 'モデル選択、COUNT(*)FROM Comp WHERE Company = 'Audi' GROUP BY Model'のようなものを実行することもできます。これは、モデルとそれがどれだけ出現したかを示します。ちなみに、 'Audi'の周りの一重引用符は、列名ではなくリテラル文字列として指定されています。 – Rob