1
-(IBAction)btnAddToFavorite:(id)sender
{
    [self insertDataToFavourites:[[tempDict objectForKey:@"pageid"]intValue]:[tempDict objectForKey:@"desc"]];
}

-(void)insertDataToFavourites:(int)pageid :(NSString *)description
{
    sqlite3_stmt *insertStatement = nil;
    NSString *sql;
    int returnvalue;
        sql = [NSString stringWithFormat:@"insert into AddFavorite (Id,Description) VALUES (?,?)"];

    returnvalue = sqlite3_prepare_v2(database, [sql UTF8String], -1, &insertStatement, NULL);

    NSLog(@"\nFavorite ID is:--> %d &\nDescription is:--> %@",[[tempDict valueForKey:@"pageid"] intValue] ,[tempDict valueForKey:@"desc"]);

    if (returnvalue == 1){
        NSAssert1 (0,@"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
    }
    sqlite3_bind_text(insertStatement, 1,[[tempDict objectForKey:@"pageid"] UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(insertStatement, 2,[[tempDict objectForKey:@"desc"] UTF8String], -1, SQLITE_TRANSIENT);

    if (SQLITE_DONE != sqlite3_step(insertStatement)){
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    }
    else{
        sqlite3_reset(insertStatement);
    }

    sqlite3_finalize(insertStatement);
}

データベースにデータを挿入するためのコードです。選択クエリを使用してデータベースをチェックすると、このようなデータが表示されます。

ここに画像の説明を入力

間違いがどこにあるのか誰にも教えてもらえますか?

ありがとう。

4

1 に答える 1

1

dictではなくpageidメソッド変数を使用してみてください。dictが間違っている可能性があります。一方、idには挿入します

sqlite3_bind_text(insertStatement, 1,[[tempDict objectForKey:@"pageid"] UTF8String], -1, SQLITE_TRANSIENT);

これは正しくないかもしれないと思います。

テストケースの場合、SQLiteManagerにsqlstatementとして挿入できます

AddFavorite(Id、Description)VALUES(1、'TestDescription');に挿入します。

ステートメントが正しいかどうかを確認します。

idがデータベースのintである場合、このコードを使用して値を挿入します

-(void)insertDataToFavourites:(int)pageid :(NSString *)description
{
   sqlite3 *database;

   if(sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK) {

      const char *sqlStatement = "INSERT INTO AddFavorite (Id,Description) VALUES (?,?);";

      sqlite3_stmt *compiled_statement;
      if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiled_statement, NULL) == SQLITE_OK)    {

        sqlite3_bind_int(compiled_statement, 1, pageid);
        sqlite3_bind_text(compiled_statement, 2, [description UTF8String] , -1, SQLITE_TRANSIENT);

      }

      if(sqlite3_step(compiled_statement) != SQLITE_DONE ) {
        NSLog( @"Error: %s", sqlite3_errmsg(database) );
      } else {
        NSLog( @"Insert into row id = %lld", sqlite3_last_insert_rowid(database));
      }

      sqlite3_finalize(compiled_statement);
  }

  sqlite3_close(database); 
}
于 2012-08-08T14:20:17.293 に答える