0

iOS アプリで同期を行っています。ドキュメント フォルダにテーブル セットが既にあり、同期中にサーバーから新しいテーブル セットにデータをダウンロードしています。個々のテーブルの数を比較していますが、それらが同じ場合は、自然結合を使用して実際に同じであることを確認しています。それらが同じである場合、コンテンツは最新であり、現在のテーブル セットに変更を加える必要はありません。それ以外の場合は、新しいテーブル セットを取得し、新しいデータを現在のテーブルとして保存します。

問題は、特定のテーブルに対して自然結合を行うと、SQLITEMANAGER で両方のテーブルに同じ情報が表示されるにもかかわらず、自然結合が間違った答えを返すことです。理由がわからない。値が同じであっても、count_together は間違っています。

これは、チェックを実装する方法です(説明のためだけに):

    singleton.table = YES;
    int count_table1 = 0;
    int count_table2 = 0;
    int count_together  = 0;

   NSMutableArray *arrayTables = [[NSMutableArray alloc] initWithObjects:@"DATA",@"TABLE",@"NUMBERS",nil];

    NSMutableArray *arrayTables2 = [[NSMutableArray alloc] initWithObjects:@"DATA2",@"TABLE2",@"NUMBERS2", nil];

    for(int i =0; i<[arrayTables count]; i++)
    {
        count_table1 = [databaseManager checkCountOfTable:[NSString stringWithFormat:@"SELECT COUNT(*) FROM %@",[arrayTables objectAtIndex:i]]];

        count_table2 = [databaseManager checkCountOfTable:[NSString stringWithFormat:@"SELECT COUNT(*) FROM %@",[arrayTables2 objectAtIndex:i]]];

        NSLog(@"Count of Table 1 is %i",count_table1);
        NSLog(@"Count of Table 2 is %i",count_table2);

        if (singleton.table == YES)
        {
            if(count_table1 != count_table2)
            {
                singleton.table = NO;
            }
            else
            {
                count_together = [databaseManager checkCountOfTable:[NSString stringWithFormat: @"SELECT COUNT(*) FROM (%@ NATURAL JOIN %@)",[arrayTables objectAtIndex:i],[arrayTables2 objectAtIndex:i]]];

                NSLog(@"Count of Table 1 is %i",count_table1);
                NSLog(@"Count of Tables Together is %i",count_together);

                if (count_table1 == count_together)
                {
                    singleton.table = YES;
                }
                else
                {
                   singleton.table = NO;
                }
            }
        }

    }

いくつかのガイダンスが必要であり、提案を歓迎します。

4

1 に答える 1

0

問題は、テーブルに null 列がいくつかあったことです。したがって、これらのテーブルの Natural JOIN は機能しません。テーブルに null 列がなく、NATURAL JOIN が正常に機能することを確認する必要があります。

于 2013-03-14T11:27:30.420 に答える