вопросы sqlite на iphone - PullRequest
       0

вопросы sqlite на iphone

0 голосов
/ 24 декабря 2010

Я могу выполнить запрос, но я вижу только последнее значение list_ID

Я хочу получить 4, но я получаю 6 ???

list_ID is ----------------------->is 4
2010-12-24 12:57:07.507 DatabaseTest[3398:207]  QUERY EXECUTION
2010-12-24 12:57:07.508 DatabaseTest[3398:207] bxbxbxmnb
2010-12-24 12:57:07.508 DatabaseTest[3398:207]  list_ID is ----------------------->is 5
2010-12-24 12:57:07.509 DatabaseTest[3398:207]  QUERY EXECUTION
2010-12-24 12:57:07.510 DatabaseTest[3398:207] bxbxbxmnb
2010-12-24 12:57:07.511 DatabaseTest[3398:207]  list_ID is ----------------------->is 6

это код

        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
        {
            while(sqlite3_step(compiledStatement) == SQLITE_ROW)

            {


                acat=[[[Cat_tableList alloc]init]autorelease];



                /////////////  statement////////

            NSLog(@" QUERY EXECUTION");




                                //  sStudent.cat_id=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

                acat.list_id=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
                acat.cat_id=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];

                acat.names=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
                acat.content=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];








                [appDelegate.catLists addObject:acat];
(@"final AUTo_ID array is  ............%@",acat.content);
                NSLog(@" list_ID is ----------------------->is %@",acat.list_id);  i just want value to b 4 so that i can use this somewhere
                ///////////////


            }

Ответы [ 4 ]

0 голосов
/ 27 декабря 2010

Прежде всего, спасибо всем, кто помог мне, поскольку теперь моя проблема исправлена ​​

Вот как я это сделал

rowID=[[appDelegate.a1 objectAtIndex:rowPointer]intValue];, where rowPointer=[indexPath row];

Сначала я сохраняю все значения в массиве, а затемЯ обращаюсь к ним по индексу: -)

0 голосов
/ 24 декабря 2010

сначала я сделал это, чтобы получить текущий индекс по любой нажатой строке

appDelegate.a1 = [[NSMutableArray alloc] init];// a1 is new array 


            while(sqlite3_step(compiledStatement) == SQLITE_ROW)

            {
         acat.list_id=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];

                NSArray  * myArray2 = [NSArray arrayWithObjects:acat.list_id,nil];




                [appDelegate.a1 addObjectsFromArray:myArray2];





                [appDelegate.a1 addObject:myArray2];



}

затем, чтобы получить значение list_id в другом классе, я делаю это

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic -- create and push a new view controller


{
rowID=[[appDelegate.a1 objectAtIndex:0]intValue] +[indexPath row];
[self calldatabase];
}



void(calldatabase)
{
 NSString *query=  [[NSString alloc] initWithFormat:@"select * from list_tbl where cat_id=%@ and list_id=%d",aCat.cat_id, rowID ];// here rowid starts from 4 and keep inc by 1

}
}

/// это работает, но я хочу знать, это хороший способ и не потребляет много памяти ??? пожалуйста предложите Спасибо

0 голосов
/ 24 декабря 2010

Делайте код таким образом

Вызовите sqlite и сохраните все данные в массиве appdelegate, затем используйте, как вы хотите использовать

, вам просто нужно выбрать данные с условием, если вы хотите выбрать данныеиз 4, 5 6 вне массива, затем используйте этот код

newarray = [[nsmutablearray alloc] init];for (int = 3; i <[appdelegatearray count]; i ++) {[newarray addobject: [appdelegatearray objectatindex: i];} </p>

таким образом, вы можете делать все, что угодно, надеюсь, что это поможет вам, иначе вы будете более четко задавать вопрос, я думаю, вы боитесь поделиться

0 голосов
/ 24 декабря 2010

Вы не показали свой оператор запроса sqlite, но все в порядке ....

здесь Вы используете 4 объекта класса Cat_tableList, чьи значения (значения указателя) меняются для каждого значения цикла, выполняемого для каждой строки таблицы базы данных ..... поэтому эта проблема возникает, поскольку последняя запись может иметь list_ID = 6 ..

Я предлагаю

  1. Используйте array of array или array of dictionaries для хранения всего этого, а затем вы можете использовать любой из них ...
  2. Также вы можете modify your sqlite request (я не уверен, что вы использовали здесь, я думаю, что вы использовали SELECT * FROM Table1) .... изменить его и изменить на SELECT * FROM Table1 WHERE list_ID=4; (list_ID должен быть заменен на точное имя столбца в вашей таблице базы данных) ..

Редактировать

Если вы хотите точно указать id = 4, вы можете использовать что-то вроде этого

while(sqlite3_step(compiledStatement) == SQLITE_ROW)

            {

if([[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)] isEqualToString:@"4"])
{
                acat=[[[Cat_tableList alloc]init]autorelease];


                acat.list_id=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
                acat.cat_id=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];

                acat.names=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
                acat.content=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];





                [appDelegate.catLists addObject:acat];
(@"final AUTo_ID array is  ............%@",acat.content);
                NSLog(@" list_ID is ----------------------->is %@",acat.list_id);
}



   }

Редактировать --- 2

Рассмотрим следующий пример, если вы хотите, чтобы все ваши значения таблицы

        while(sqlite3_step(compiledStatement) == SQLITE_ROW) 
                    {

                NSMutableArray *arr=[[NSMutableArray alloc]init];



NSString *str1 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
                    [arr addObject:str1];
NSString *str2 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
                    [arr addObject:str2];
NSString *str3 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
                    [arr addObject:str3];

                [appDelegate.catLists addObject:arr];
                [arr release];
            }   

Теперь у catLists есть все значения базы данных

Теперь получите к нему доступ

[[appDelegate.catLists objectAtIndex:int1]objectAtIndex:int2];

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...