У меня проблема после выбора из sql. Я отправляю updateRow NSArray из 5 объектов. После обновления (я сделал 5 раз addRow), я получаю только один из них на getGroupsByUserId.Sqlite select return 1 row after insert
Вот мой код:
+(BOOL)createUserTable:(sqlite3*)database{
char* errormsg;
NSString* sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (%@ TEXT PRIMARY KEY, %@ TEXT)",USER_GROUPS_TABLE,USER_ID,GROUP_ID];
int res = sqlite3_exec(database, [sql UTF8String], NULL, NULL, &errormsg);
if(res != SQLITE_OK){
NSLog(@"ERROR: failed creating USERS-GROUPS table");
return NO;
}
return YES;
}
+(void)updateRow:(sqlite3*)database rowToUpdate:(NSArray*)rowToUpdate{
for (UserGroup* ug in rowToUpdate) {
[UsersGroupsRelationShipSql addRow:database userId:ug.userId groupId:ug.groupId ];
NSLog(@"update Row %@ %@", ug.userId, ug.groupId);
}
}
+(void)addRow:(sqlite3*)database userId:(NSString*)userId groupId:(NSString*)groupId{
NSLog(@"addRow: '%@', '%@'", userId, groupId);
sqlite3_stmt *statment;
NSString* query = [NSString stringWithFormat:@"INSERT OR REPLACE INTO %@ (%@,%@) values (?,?);",USER_GROUPS_TABLE,USER_ID,GROUP_ID];
if (sqlite3_prepare_v2(database,[query UTF8String],-1,&statment,nil) == SQLITE_OK){
sqlite3_bind_text(statment, 1, [userId UTF8String],-1,NULL);
sqlite3_bind_text(statment, 2, [groupId UTF8String],-1,NULL);
if(sqlite3_step(statment) == SQLITE_DONE){
sqlite3_finalize(statment);
return;
}
}
sqlite3_finalize(statment);
NSLog(@"ERROR: addRowToTable failed %s",sqlite3_errmsg(database));
}
+(NSMutableArray*)getGroupsByUserId:(sqlite3*)database userId:(NSString*)userId{
NSLog(@"getGroupsByUserId: '%@'", userId);
NSMutableArray* data = [[NSMutableArray alloc] init];
sqlite3_stmt *statment;
NSString* query = [NSString stringWithFormat:@"SELECT * from USERS_GROUPS WHERE %@ = %@;", USER_ID,userId];
if (sqlite3_prepare_v2(database,[query UTF8String],-1,&statment,nil) == SQLITE_OK){
while(sqlite3_step(statment) == SQLITE_ROW){
NSString* usId = [NSString stringWithFormat:@"%s",sqlite3_column_text(statment,0)];
NSString* grId = [NSString stringWithFormat:@"%s",sqlite3_column_text(statment,1)];
NSLog(@" row: '%@', '%@'", usId, grId);
UserGroup* ug = [[UserGroup alloc] init:usId groupId:grId];
[data addObject:ug];
}
}
else{
NSLog(@"ERROR: getGroupsByUserId failed %s",sqlite3_errmsg(database));
sqlite3_finalize(statment);
return nil;
}
sqlite3_finalize(statment);
return data;
}
Debug Результат:
2016-01-13 11:30:11.901 MaverickApp[7196:142637] userId Logged = 1
2016-01-13 11:30:11.919 MaverickApp[7196:142637] Groups tab was loaded
2016-01-13 11:30:11.920 MaverickApp[7196:142675] getGroupsByUserId: userId = 1 from Sql
2016-01-13 11:30:11.922 MaverickApp[7196:142675] get row: userId = 1, groupId = 2 from Sql
2016-01-13 11:30:11.927 MaverickApp[7196:142675] Returned groupsByUser from parse from date 2016-01-13 09:24:11 +0000
2016-01-13 11:30:11.931 MaverickApp[7196:142637] Groups tab was loaded
2016-01-13 11:30:11.932 MaverickApp[7196:142684] getGroupsByUserId: userId = 1 from Sql
2016-01-13 11:30:11.935 MaverickApp[7196:142684] get row: userId = 1, groupId = 2 from Sql
2016-01-13 11:30:11.937 MaverickApp[7196:142684] Returned groupsByUser from parse from date 2016-01-13 09:24:11 +0000
2016-01-13 11:30:12.121 MaverickApp[7196:142675] Returned row: groupId 1 userId 6
2016-01-13 11:30:12.121 MaverickApp[7196:142675] Returned 1 groups for userId = 1 from parse
2016-01-13 11:30:12.122 MaverickApp[7196:142675] data 1
2016-01-13 11:30:12.122 MaverickApp[7196:142675] update Row: userId = 1 groupId = 6 in Sql
2016-01-13 11:30:12.123 MaverickApp[7196:142675] add Row: userId = 1 groupId = 6 in Sql
2016-01-13 11:30:12.127 MaverickApp[7196:142675] addRow done
2016-01-13 11:30:12.128 MaverickApp[7196:142675] getGroupsByUserId: userId = 1 from Sql
2016-01-13 11:30:12.129 MaverickApp[7196:142675] get row: userId = 1, groupId = 6 from Sql
2016-01-13 11:30:12.129 MaverickApp[7196:142675] Group id number 6 for userId 1
2016-01-13 11:30:12.142 MaverickApp[7196:142675] getGroup: groupId = 6 from Sql
2016-01-13 11:30:12.143 MaverickApp[7196:142675] getGroup: groupId = 6 from Sql
2016-01-13 11:30:12.145 MaverickApp[7196:142675] Returned groups from parse from date 2016-01-13 09:24:14 +0000
2016-01-13 11:30:12.504 MaverickApp[7196:142684] Returned row: groupId 1 userId 6
2016-01-13 11:30:12.505 MaverickApp[7196:142684] Returned 1 groups for userId = 1 from parse
2016-01-13 11:30:12.505 MaverickApp[7196:142684] data 1
2016-01-13 11:30:12.506 MaverickApp[7196:142684] update Row: userId = 1 groupId = 6 in Sql
2016-01-13 11:30:12.506 MaverickApp[7196:142684] add Row: userId = 1 groupId = 6 in Sql
2016-01-13 11:30:12.509 MaverickApp[7196:142684] addRow done
2016-01-13 11:30:12.511 MaverickApp[7196:142684] getGroupsByUserId: userId = 1 from Sql
2016-01-13 11:30:12.511 MaverickApp[7196:142684] get row: userId = 1, groupId = 6 from Sql
2016-01-13 11:30:12.512 MaverickApp[7196:142684] Group id number 6 for userId 1
2016-01-13 11:30:12.512 MaverickApp[7196:142684] getGroup: groupId = 6 from Sql
2016-01-13 11:30:12.512 MaverickApp[7196:142684] getGroup: groupId = 6 from Sql
2016-01-13 11:30:12.513 MaverickApp[7196:142684] Returned groups from parse from date 2016-01-13 09:24:14 +0000
2016-01-13 11:30:12.824 MaverickApp[7196:142675] Returned 3 groups from parse
2016-01-13 11:30:12.825 MaverickApp[7196:142675] addGroup: groupId = 2 in Sql
2016-01-13 11:30:12.828 MaverickApp[7196:142675] addGroup done
2016-01-13 11:30:12.828 MaverickApp[7196:142675] addGroup: groupId = 6 in Sql
2016-01-13 11:30:12.830 MaverickApp[7196:142675] addGroup done
2016-01-13 11:30:12.830 MaverickApp[7196:142675] addGroup: groupId = 8 in Sql
2016-01-13 11:30:12.832 MaverickApp[7196:142675] addGroup done
2016-01-13 11:30:12.833 MaverickApp[7196:142675] getGroup: groupId = 6 from Sql
2016-01-13 11:30:12.834 MaverickApp[7196:142675] getGroup: groupId = 6 from Sql
2016-01-13 11:30:13.138 MaverickApp[7196:142684] Returned 3 groups from parse
2016-01-13 11:30:13.138 MaverickApp[7196:142684] addGroup: groupId = 2 in Sql
2016-01-13 11:30:13.142 MaverickApp[7196:142684] addGroup done
2016-01-13 11:30:13.142 MaverickApp[7196:142684] addGroup: groupId = 6 in Sql
2016-01-13 11:30:13.144 MaverickApp[7196:142684] addGroup done
2016-01-13 11:30:13.144 MaverickApp[7196:142684] addGroup: groupId = 8 in Sql
2016-01-13 11:30:13.145 MaverickApp[7196:142684] addGroup done
2016-01-13 11:30:13.146 MaverickApp[7196:142684] getGroup: groupId = 6 from Sql
2016-01-13 11:30:13.147 MaverickApp[7196:142684] getGroup: groupId = 6 from Sql
BTW, я бы предложил использовать 'SQLITE_TRANSIENT' для ваших вызовов' sqlite3_bind_text'. – Rob
Я также предлагаю проверить успех или значение 'sqlite3_step', например' int rc; while ((rc = sqlite3_step (statment)) == SQLITE_ROW) {...}; if (rc! = SQLITE_DONE) {...} ' – Rob
Если у вас все еще есть проблемы, вы можете отредактировать код для введённых значений (a); (б) значения, полученные методом getGroupsByUserId. А затем вставьте то, что появилось в журнале, когда вы запустили код, вставив пять значений идентификатора пользователя/группы и выбрав их обратно. – Rob