1

約 200 レコードで複数の挿入に成功しましたが、問題はデータが挿入される順序です。レコードは、、、、、などにSD_0挿入SD_1されます。SD_10SD_100

私の必要な注文は、、、、、SD_0などです。SD_1SD_2SD_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);

}

4

0 に答える 0