1

私はiPhone開発の初心者です。テーブルsqliteの行に1つのNSDictionaryを格納したい。私はグーグルで検索して多くの結果を見つけましたが、うまくいきません。

これは私の辞書です:

NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"24",@"id",@"Folder",@"name",@"300 MB",@"size", nil];

また、このサイトで検索しましたが、同様の投稿で何もわかりません。テーブルSQLite DBの行にNSDictionaryを追加(保存)する方法について詳しく教えてください。

4

4 に答える 4

3

これを行うには、3 つの列を持つテーブルを作成します (テーブル作成クエリを使用)。次に、これらのオブジェクトを辞書からそれらの列に挿入します(挿入クエリを使用)。

編集:データを挿入するには、クエリを使用します:

            NSString *query = [NSString stringWithFormat:@"insert into tablename (column1, column2,column3) values('%@','%@','%@')",[dic objectForKey:@"id"],[dic objectForKey:@"name"],[dic objectForKey:@"size"]];
            NSLog(@"query : %@",query);
            [self executeQuery:query];

.h クラスで sqlite インスタンスを作成します。

sqlite3 *database; and import:  #import<sqlite3.h>

.m クラスで、これらのメソッドを追加します。

-(NSString *) dataFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSLog(@"PATH %@",[documentsDirectory stringByAppendingPathComponent:DatabaseName]);
    return [documentsDirectory stringByAppendingPathComponent:DatabaseName];
}

/*==================================================================
              METHOD FOR INSERTING DATA IN DATABASE
 ==================================================================*/
-(void)executeQuery:(NSString *)query
{
    //NSLog(@"QUERY : %@",query);

    sqlite3_stmt *statement;
    if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK)
    {
        if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK)
        {
            if (sqlite3_step(statement) != SQLITE_DONE)
            {
                sqlite3_finalize(statement);
            }
        }
        else
        {
            NSLog(@"query Statement Not Compiled");
        }

        sqlite3_finalize(statement);
        sqlite3_close(database);
    }
    else
    {
        NSLog(@"Data not Opened");
    }
}

データを読み取る場合:

/*==================================================================
 METHOD FOR Fetching Data FROM DATABASE
 ==================================================================*/
 NSString *query = [NSString stringWithFormat:@"select * from table_name"];
NSMutableArray *tableData = [self fetchingDataFromTable:query];

// ここで、テーブル データ配列にはすべてのレコードが含まれます

-(NSMutableArray *)fetchingDataFromTable:(NSString *)query;
{
    NSLog(@"QUERY : %@",query);

    NSString *idToReturn=@"";
    NSMutableArray *returnArray = [NSMutableArray new];
    if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK)
    {
        sqlite3_stmt *statement;
        if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)==SQLITE_OK)
        {
            while(sqlite3_step(statement)==SQLITE_ROW)
            {
                NSMutableDictionary *temp= [NSMutableDictionary new];
                const char *s;


                s=(char *)sqlite3_column_text(statement, 0);
                if(s==NULL)
                {
                    idToReturn=@"";
                }
                else
                {
                    idToReturn =[NSString stringWithUTF8String:s];
                }
                [temp setObject:idToReturn forKey:@"id"];

                s=(char *)sqlite3_column_text(statement, 1);
                if(s==NULL)
                {
                    idToReturn=@"";
                }
                else
                {
                    idToReturn =[NSString stringWithUTF8String:s];
                }
                [temp setObject:idToReturn forKey:@"name"];

                s=(char *)sqlite3_column_text(statement, 2);
                if(s==NULL)
                {
                    idToReturn=@"";
                }
                else
                {
                    idToReturn =[NSString stringWithUTF8String:s];
                }
                [temp setObject:idToReturn forKey:@"size"];

                if (temp != nil)
                {
                    [returnArray addObject:temp];

                    temp = nil;
                }

            }
            sqlite3_finalize(statement);
            sqlite3_close(database);
        }
    }
    return returnArray;

}

お役に立てば幸いです。

于 2013-05-01T07:07:39.353 に答える
0

iOS のテーブルからディクショナリにデータを取得します。

-(void)getData:(NSString *) tablename
{
    NSMutableDictionary * tabledata= [[NSMutableDictionary alloc] init];
    NSString *str = @"select * from ";
    NSString *strQuery = [str stringByAppendingString:tablename];
    tabledata = [db executeQuery:strQuery];

    NSDictionary *dic = [tabledata valueForKey:@"0"];
    NSLog(@"dic is:%@",dic);
}
于 2016-04-20T03:46:43.007 に答える