2011-05-21 71 views
1

可以在任何一個可以幫助我做出將從這裏sqlite的表中刪除數據的方法是一些代碼..從sqlite表中刪除數據iphone sdk?

感謝,

TC

-(void)openDB{ 
//create database 
if (sqlite3_open([[self filPath] UTF8String],&db) != SQLITE_OK) { 
    sqlite3_close(db); 
    NSAssert(0, @"database failed to open"); 
} 
} 


-(void)insertRecordIntoTableNamed:(NSString *)tableName withField1:(NSString *)field1 field1Value: (NSString*)field1Value andField2:(NSString *)field2 field2Value:(NSString *)field2Value { 

// [self insertRecordIntoTableNamed:@"Contacts" withFiled1:@"email" field1Value:email andField2:@"name" field2Value:name]; 
NSString *sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO '%@' ('%@' , '%@') VALUES ('%@','%@')",tableName,field1,field2, field1Value,field2Value]; 
char *err; 
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err)!=SQLITE_OK) { 
    sqlite3_close(db); 
    NSAssert(0,@"error updating table."); 
} 
} 

-(void)createTableNamed:(NSString *) tableName withField1:(NSString *)field1 withField2:(NSString  *)field2 { 
char *err; 
NSString *sql = [NSString stringWithFormat:@"Creat table if not exist '%@' ('%@' text prmaru key, '%@' TEXT",tableName,field1,field2]; 
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) { 
    sqlite3_close(db); 
    NSAssert (0,@"tabel failed to create"); 
} 
}  

-(void)getAllRowsFromTableNamed:(NSString *)tableName{ 
NSString *qsql = [NSString stringWithFormat:@"select * from %@",tableName]; 
sqlite3_stmt *statment; 

if (sqlite3_prepare_v2(db, [qsql UTF8String], -1, &statment, nil) == SQLITE_OK) { 
    while (sqlite3_step(statment) == SQLITE_ROW) { 
     char *field1 = (char *)sqlite3_column_text(statment, 0); 
     NSString *field1Str = [[NSString alloc] initWithUTF8String: field1]; 
     char *field2 = (char *)sqlite3_column_text(statment, 1); 
     NSString *field2Str = [[NSString alloc] initWithUTF8String: field2]; 
     NSString *str = [[NSString alloc] initWithFormat:@"%@ - %@", field1Str, field2Str]; 
     NSLog(@"%@", str); 
     //  [field1Str release]; 
     //  [field2Str release]; 
     //  [str release]; 
    }  
    sqlite3_finalize( statment); 
} 
} 

- (void)viewDidLoad { 
[self openDB]; 
NSLog(@"%@",[self filPath]); 
[self createTableNamed:@"Contacts" withField1:@"email" withField2:@"name"]; 

for (int i = 0; i<= 2;i++) { 
    NSString *email = [[NSString alloc]initWithFormat:@"user%[email protected]",i];  
    NSString *name = [[NSString alloc]initWithFormat:@"user %i",i]; 
    [self insertRecordIntoTableNamed:@"Contacts" withField1:@"email" field1Value:email  andField2:@"name" field2Value:name]; 
    [email release]; 
    [name release]; 
} 

[self getAllRowsFromTableNamed:@"Contacts"]; 
sqlite3_close(db); 
[super viewDidLoad]; 
} 
+0

只有受虐狂使用SQLite直接在Objective-C中使用C API。 [使用FMDB](http://github.com/ccgus/fmdb)(一個SQLite包裝器)或[CoreData](http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/ cdProgrammingGuide.html)(一個對象圖管理器)。 – 2011-05-21 20:28:59

+0

@DaveDeLong我們會很高興,如果你能提供一些關於FMDB或CoreData的示例代碼或教程,請提前致謝:) – 2012-01-11 07:07:04

回答

4

你需要做這樣的事情(這是我的項目代碼&它的工作原理,但你必須改變表名等)

//Delete all applicable rows from the datasets table... 
NSString *deleteStatementNS = [NSString stringWithFormat: 
           @"DELETE FROM datasets\ 
           WHERE customerID = %i", 
           customerID]; 

NSLog(@"DELETE statement: %@", deleteStatementNS); 

const char *deleteStatement = [deleteStatementNS UTF8String]; 
dbrc = sqlite3_prepare_v2(db, deleteStatement, -1, &dbps, NULL); 
dbrc = sqlite3_step(dbps); 

sqlite3_finalize(dbps); 
dbps = NULL; 

if (dbrc != 101) { //anything except 101 (SQLITE_DONE for delete, *not* SQLITE_OK) 
    NSLog(@"couldn't delete the customer from datasets: result code %i", dbrc); 
    return; 
} 
else { 
    NSLog(@"deleted the customer from datasets"); 
} 
+0

好的,謝謝我會盡力... – 2011-05-21 20:12:38

+0

什麼是&dbps?請回復 – 2011-05-23 05:30:34

+0

和dbrc ........ – 2011-05-23 05:38:04