1

SQLite3 データベースから生成された FMDB 結果セットをループして、後で使用するオブジェクトを作成しています。データ コンテンツは、さまざまなテキスト エディターとエンコーディングを使用して、さまざまなユーザーによって作成されます。

いくつかのレコードは問題があり、列にテキストがあるにもかかわらず、列の値に nil を返します。

たとえば、コマンドライン クエリを実行すると、データベース内の列のテキストが表示されますが、FMDB メソッド stringForColumn は nil を返します。また、潜在的な原因は、列の内容に含まれる ASCII 文字が多いことであることがわかります。これは、ユーザーが MS Word からテキストをコピーして貼り付けたために発生した可能性が最も高いです。私の質問は、データの一部がこれらの文字でデータベースにある可能性があることを認識して、このタイプの「ダーティ」データを処理する最良の方法は何ですか?

ここに画像の説明を入力

NSMutableDictionary *words = [[NSMutableDictionary alloc] init];
FMResultSet *rs = [db executeQuery:@"SELECT * FROM `foo` WHERE 1"];

while ([rs next]) {
    Word *myWord = [[Word alloc] init];  

    //Coming in as a nil value eventhough there is text in the database column
    [myWord setDefinition:[rs stringForColumn:@"definition"]];

    [words setObject:[myWord definition] forKey:[myWord term]];
}
4

2 に答える 2

1

さまざまなユーザーが複数のテキスト エディターとエンコーディングからコードを入力している場合でも、DB が設定されたエンコーディングに正規化する必要があります。これは、FMDB が DB に格納されているエンコーディングの変換を適切に処理していないことに関連しているようです。おそらく、データのエンコーディングを知っているので、コンテンツを取得して独自の「翻訳」を行うことができますか? dataForColumn または UTF8StringForColumnIndex を使用してデータを直接プルしてみて、何が得られるかを確認してください。

余談ですが、「どこで」は間違っていませんが、余分だと思います。また、それは目的を果たさないため、SQLに精通していない人を誤解させたり混乱させたりする可能性があることも付け加えておきます。

于 2012-10-09T18:38:03.883 に答える
-3

select ステートメントの "Where" が正しくありません。

于 2012-04-14T01:23:57.937 に答える