/ / Wie füge ich NSMutableArray-Elemente in Sqlite3 in iPhone ein - iphone, object-c, sqlite3, nsmutablearray

Wie man NSMutableArray Elemente in Sqlite3 in iPhone einfügt - iphone, objective-c, sqlite3, nsmutablearray

Wenn ich meine Array-Elemente in sqlite einfüge, wird es richtig eingefügt. Es wird nur das erste Element im Array verwendet, da es beim Einfügen einen Fehler anzeigt. Mein Code lautet ..

NSString * path = [self getDBPath]; sqlite3_stmt * insert_statement = nil;

if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
for (int i = 0; i < [array count]; i++)
{
NSLog(@"Array Count is %d",[array count]);
NSString *name=[[array objectAtIndex:i]objectForKey:@"name"];
NSString *add=[[array objectAtIndex:i]objectForKey:@"address"];

if (insert_statement == nil) {
NSString *statement1 = [NSString stringWithFormat:@"insert into tableName (name,address) Values( ?,?)",name,add];
const char *insertSql = [statement1 UTF8String];
if(sqlite3_prepare_v2(database, insertSql, -1, &insert_statement, NULL) != SQLITE_OK){
NSLog(@"Error while creating insert statement.");
insert_statement = nil;
continue;
}

sqlite3_bind_text(insert_statement, 1, [name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insert_statement, 2, [add UTF8String], -1, SQLITE_TRANSIENT);


if(SQLITE_DONE != sqlite3_step(insert_statement)){
//NSAssert1(0, @"Error while inserting data. "%s"", sqlite3_errmsg(database));
NSLog(@"Error while inserting data.");
insert_statement = nil;
continue;
}
else{}

sqlite3_reset(insert_statement);
sqlite3_finalize(insert_statement);
insert_statement = nil;
}
}
sqlite3_close(database);
}

Kann mir bitte sagen, warum es nur eine Aufzeichnung erlaubt.

Danke im Voraus.

Antworten:

3 für die Antwort № 1

Es ist aufgetreten, weil die Anweisung jedes Mal in einer Schleife abgeschlossen wird. Es werden also keine anderen Objekte nach dem ersten Objekt eingefügt.

Einfach entfernen "sqlite3_finalize(insert_statement);" aus der Schleife und setzen nil zur Einfügeanweisung "insert_statement = nil;"

Nach fertig mit Schleife. Stellen Sie sicher, dass die "sqlite3_reset(insert_statement);" für jedes Objekt in der Schleife. Die Anweisung wird zurückgesetzt, und es ist nicht erforderlich, sie festzulegen nil zur Anweisung in der Schleife.

Probieren Sie diesen Code aus, der für mich funktioniert:

if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {

for (int i = 0; i < [array count]; i++)
{
NSLog(@"Array Count is %d",[array count]);
NSString *name=[[array objectAtIndex:i]objectForKey:@"name"];
NSString *add=[[array objectAtIndex:i]objectForKey:@"address"];

if (insert_statement == nil) {
NSString *statement1 = [NSString stringWithFormat:@"insert into tableName (name,address) Values( ?,?)",name,add];
const char *insertSql = [statement1 UTF8String];
if(sqlite3_prepare_v2(database, insertSql, -1, &insert_statement, NULL) != SQLITE_OK){
NSLog(@"Error while creating insert statement.");
insert_statement = nil;
continue;
}

sqlite3_bind_text(insert_statement, 1, [name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insert_statement, 2, [add UTF8String], -1, SQLITE_TRANSIENT);


if(SQLITE_DONE != sqlite3_step(insert_statement)){
//NSAssert1(0, @"Error while inserting data. "%s"", sqlite3_errmsg(database));
NSLog(@"Error while inserting data.");
insert_statement = nil;
continue;
}
else{

sqlite3_reset(insert_statement);


}
}
}
insert_statement = nil;
sqlite3_finalize(insert_statement);
sqlite3_close(database);
}

2 für die Antwort № 2

Probieren Sie diesen Code aus, es funktioniert für mich

      for(int i=0;i<[data count];i++)
{
NSMutableDictionary *myDict = [data objectAtIndex:i];

selectSql=[NSString stringWithFormat:@"INSERT INTO [commentTable] values("%@","%@")",[myDict valueForKey:@"usertype"],[myDict valueForKey:@"userid"]];

if (sqlite3_prepare_v2(database, [selectSql cStringUsingEncoding:NSUTF8StringEncoding], -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_DONE)
{
ret = YES;
NSLog(@"DB SUPPORT - commentTable INSERTED");
}
else
{
NSLog(@"DB SUPPORT - ERROR commentTable INSERT");
}

}
else
{
NSLog(@"DB SUPPORT - Sql Preparing Error ( INSERT commentTable)");
}

sqlite3_finalize(statement);
}


sqlite3_close(database);

0 für die Antwort № 3

Sie können verwenden:

for (int i = 0; i < [mutArray count]; i++)
{
NSString *string = [mutArray objectAtIndex:i];
// insert query
insert into table_name ("string") values(column_name);
}

Ref: Hinzufügen eines nsmutable-Arrays zur sqlite-Datenbanktabelle