iPhoneでSQLite3を使う5(データの追加と更新)
今回は、追加と更新についてです。SQLではINSERT文とUPDATE文を使います。
INSERT文の例
INSERT文では、どのテーブルにどんな値を追加したいかを記述します。列の個数と列の順番にあわせて値を記述します。
INSERT INTO テーブル名 VALUES (値, 値, 値, 値…)
UPDATE文の例
UPDATE文では、どのテーブルのどの列をどんな値で更新したいかを記述します。また、更新するときにこんなデータだけ更新するという、条件をつけることもできます。条件を指定しない場合は、すべての行を指定した値で更新します。
UPDATE テーブル名 SET 列=値, 列=値, 列=値,… WHERE 条件
Objective-Cでの実装を書くと下記のようになります。つかっているメソッドは同じなので、説明は省きます。
sqlite3_stmt* statementUpdate_; sqlite3_stmt* statementInsert_; -(BOOL)usersInfoInsert:(userInfo*)userInfo { sqlite3_reset(statementInsert_); sqlite3_bind_text (statementInsert_, 1, [userInfo.ID UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text (statementInsert_, 2, [userInfo.Name UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text (statementInsert_, 3, [userInfo.ScreenName UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text (statementInsert_, 4, [userInfo.ProfileImageUrl UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_double(statementInsert_, 5, [userInfo.FollowersCount doubleValue]); sqlite3_bind_double(statementInsert_, 6, [userInfo.FriendsCount doubleValue]); sqlite3_bind_text (statementInsert_, 7, [userInfo.Text UTF8String], -1, SQLITE_TRANSIENT); int wasSucceeded = sqlite3_step(statementInsert_); if( wasSucceeded != SQLITE_DONE ) { NSLog( @"Failed to insert from database with '%s'.", sqlite3_errmsg( db_ )); return NO; } return YES; } -(BOOL)usersInfoUpdate:(Friend*)userInfo { sqlite3_reset(statementUpdate_); sqlite3_bind_text (statementUpdate_, 1, [userInfo.Name UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text (statementUpdate_, 2, [userInfo.ScreenName UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text (statementUpdate_, 3, [userInfo.ProfileImageUrl UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_double(statementUpdate_, 4, [userInfo.FollowersCount doubleValue]); sqlite3_bind_double(statementUpdate_, 5, [userInfo.FriendsCount doubleValue]); sqlite3_bind_text (statementUpdate_, 6, [userInfo.text UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text (statementUpdate_, 7, [userInfo.ID UTF8String], -1, SQLITE_TRANSIENT); int wasSucceeded = sqlite3_step(statementUpdate_); if( wasSucceeded != SQLITE_DONE ) { NSLog( @"Failed to update from database with '%s'.", sqlite3_errmsg( db_ )); return NO; } return YES; } -(BOOL)prepareSQL { NSString* insertSQL = @"insert into userinfo values (?, ?, ?, ?, ?, ?, ?)"; NSString* updateSQL = @"update userinfo set name = ?, screen_name = ?, profile_image_url = ?, followers_count = ?, friends_count = ?, " "created_at = ?, text = ?, tweet_count = ? where id = ?"; if(sqlite3_prepare_v2(db_, [insertSQL UTF8String], -1, &statementInsert_, NULL) == SQLITE_OK && sqlite3_prepare_v2(db_, [updateSQL UTF8String], -1, &statementUpdate_, NULL) == SQLITE_OK) { NSLog( @"Failed to prepare statement with '%s'.", sqlite3_errmsg( db_ )); return NO; } return YES; } -(void)finalizeSQL { if (db_) { // PREPARE済みSTATEMENTの廃棄 sqlite3_finalize(statementInsert_); sqlite3_finalize(statementUpdate_); } }