1

OSX アプリの開発は初めてです。sqlite データベースに 4 つの値 (日付、値 1、値 2、値 3) を保存しようとしています。新しいレコードが既存の日付で入力された場合、レコードの最後の 3 つのフィールドを更新する必要があります。どうすればできますか。データベースに挿入する私のコードを以下に示します

- (void) addToDatabase:(Day *)sampleDay
{
  databasePath = [Database_Access createDirectory];

  const char *dbpath = [databasePath UTF8String];

  if (sqlite3_open(dbpath, &database) == SQLITE_OK)
  {
    char *errMsg;


    NSString *str= [NSString stringWithFormat:@"INSERT INTO TABLEOBJ (DATE,NIDHIN,PAI,RUBEN ) VALUES ('%@',%li,%li,%li)", sampleDay.date, sampleDay.value1, sampleDay.value2, sampleDay.value3];

    const char *sql_stmt = [str UTF8String];

    if (sqlite3_exec(database, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
    {

    }

    sqlite3_close(database);

  } 
  else 
  {

  }
}

この要件を満たすためには、何を含める必要がありますか?

4

1 に答える 1

5

最初に日付がすでに存在するかどうかを確認します

if (sqlite3_open(dbpath, &quizDB) == SQLITE_OK)
{
        sqlite3_stmt *statement;

        // ================Read date with current date value table===================
        NSString *readDate = [NSString stringWithFormat: @"SELECT * FROM TABLEOBJ WHERE DATE = %@",sampleDay.date];

        const char *readDate_stmt = [readDate UTF8String];
        if (sqlite3_prepare_v2(quizDB, readDate_stmt, -1, &statement, NULL) == SQLITE_OK)
        {
            NSString *str;

            if (sqlite3_step(statement) == SQLITE_ROW) 
            {
                str = [NSString stringWithFormat:@"INSERT INTO TABLEOBJ (DATE,NIDHIN,PAI,RUBEN ) VALUES ('%@',%li,%li,%li)", sampleDay.date, sampleDay.value1, sampleDay.value2, sampleDay.value3];
            }
            else
            {
                 str = [NSString stringWithFormat:@"UPDATE TABLEOBJ SET NIDHIN = %li, PAI = %li, RUBEN = %li where DATE = %@", sampleDay.value1, sampleDay.value2, sampleDay.value3,sampleDay.date]; 
            }

            // Do the execution steps
            sqlite3_finalize(statement);
        }
    }
于 2012-12-26T08:37:30.590 に答える