約 200 レコードで複数の挿入に成功しましたが、問題はデータが挿入される順序です。レコードは、、、、、などにSD_0
挿入SD_1
されます。SD_10
SD_100
私の必要な注文は、、、、、SD_0
などです。SD_1
SD_2
SD_3
ここに私のクエリがあります:-
insert into Coffee (coffeeName,price) select ? as coffeeName ,? as price
UNION SELECT ? , ?
UNION SELECT ? , ?
UNION SELECT ? , ?
UNION SELECT ? , ?
UNION SELECT ? , ?
UNION SELECT ? , ?
UNION SELECT ? , ?
UNION SELECT ? , ?
UNION SELECT ? , ?
このクエリに変更が必要かどうかお知らせください。
このクエリを Objective-C コードで使用しています。
以下にコードを追加します。
-(void)addCoffee: (NSMutableDictionary *)dictParam {
NSString *strQuery = [NSString stringWithFormat:@"insert into Coffee (%@) select ? as %@",[[dictParam allKeys] componentsJoinedByString:@","],[[dictParam allKeys] objectAtIndex:0]];
//For second line of query SELECT 'data1' AS 'column1', 'data2' AS 'column2'
for (int i = 1; i<[dictParam count]; i++) {
strQuery = [strQuery stringByAppendingFormat:@" ,? as %@",[[dictParam allKeys] objectAtIndex:i]];
}
strQuery = [strQuery stringByAppendingFormat:@"\n"];
//For another union statements
for (int j = 1; j < [[dictParam valueForKey:[NSString stringWithFormat:@"%@",[[dictParam allKeys] objectAtIndex:0]]] count]; j++) {
strQuery = [strQuery stringByAppendingFormat:@"UNION SELECT ?"];
for (int i = 1; i<[dictParam count]; i++) {
strQuery = [strQuery stringByAppendingFormat:@" , ?"];
}
strQuery = [strQuery stringByAppendingFormat:@"\n"];
}
const char *sql = [strQuery UTF8String];
if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
int counter = 1;
for (int j = 0; j < [[dictParam valueForKey:[NSString stringWithFormat:@"%@",[[dictParam allKeys] objectAtIndex:0]]] count]; j++) {
for (int i = 0; i<[dictParam count]; i++) {
sqlite3_bind_text(addStmt, counter, [[NSString stringWithFormat:@"%@",[[dictParam valueForKey:[NSString stringWithFormat:@"%@",[[dictParam allKeys] objectAtIndex:i]]] objectAtIndex:j]] UTF8String], -1, SQLITE_TRANSIENT);
counter++;
}
}
if(SQLITE_DONE != sqlite3_step(addStmt))
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
else
coffeeID = sqlite3_last_insert_rowid(database);
//Reset the add statement.
sqlite3_reset(addStmt);
}