私はiOS用のsqliteを作っています。私はデータを保存して表示に成功しましたが、削除はできませんでした。 これは私のCreateTableメソッドです:これは私のSaveDataをする方法であるiOSのsqlite削除メソッドで何が問題になっていますか?
- (void) createTable: (NSString *) tableName
withField1: (NSString *) field1
withField2: (NSString *) field2
withField3: (NSString *) field3
withField4: (NSString *) field4{
char *err;
NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' "
"TEXT PRIMARY KEY, '%@' TEXT, '%@' TEXT, '%@' TEXT);", tableName, field1,field2,field3,field4];
if(sqlite3_exec(db,[sql UTF8String], NULL,NULL, &err) != SQLITE_OK) {
sqlite3_close(db);
NSAssert(0, @"Could not create table");
} else {
NSLog(@"table created");
}
}
:
-(void) saveNewData :(NSString*)nickname :(NSString*)url :(NSString*)uid :(NSString*)pswd{
sqlite3_stmt *statement;
if (sqlite3_open([[self filePath] UTF8String], &db) == SQLITE_OK) {
NSString *sql =[NSString stringWithFormat:@"INSERT INTO accountListDB ('nickname', 'url', 'uid', 'pswd') VALUES ('%@', '%@', '%@', '%@')", nickname, url, uid, pswd];
const char *insert_stmt = [sql UTF8String];
sqlite3_prepare_v2(db, insert_stmt, -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE) {
NSLog(@"data added");
}else{
NSLog(@"failed to added");
}
sqlite3_finalize(statement);
sqlite3_close(db);
}
}
これは動作していない私のdeleteData方法、次のとおりです。
-(void) deleteData:(NSString*)nickname :(NSString*)url :(NSString*)uid :(NSString*)pswd{
sqlite3_stmt *statement;
if (sqlite3_open([[self filePath] UTF8String], &db) == SQLITE_OK) {
NSString *sql =[NSString stringWithFormat:@"DELETE FROM accountListDB WHERE nickname = %@", nickname];
const char *delete_stmt = [sql UTF8String];
sqlite3_prepare_v2(db, delete_stmt, -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE) {
NSLog(@"data deleted");
}else{
NSLog(@"failed to delete");
}
sqlite3_finalize(statement);
sqlite3_close(db);
}
}
それを返すには、削除に失敗しました。 。
'filePath'の出力は? – fuzz
[self filePath]はdocumentsDirectory/db.sqlを返します –
'stringWithFormat:'でクエリを作成しません。準備されたステートメントに値を正しくバインドする。 – rmaddy