从网上下载FMDB的原码,将其拖入到项目中,然后在Link Binary With Libraries中添加libsqlite3.dylib,就可以用了
实现如下:
#import "ViewController.h" #import "FMDatabase.h" #import "FMDatabaseAdditions.h" #import "FMDatabaseQueue.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)dealloc { [_nameText release]; [_ageText release]; [_sexText release]; [_showLabel release]; [super dealloc]; } - (void)viewDidUnload { [self setNameText:nil]; [self setAgeText:nil]; [self setSexText:nil]; [self setShowLabel:nil]; [super viewDidUnload]; } //保存 - (IBAction)saveBtn:(id)sender { FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]]; if (![database open]) { NSLog(@"Open database failed"); return; } if (![database tableExists:@"user"]) { [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"]; } BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text]; //下面注释的也能实现数据的插入,只不过它是传入了字典 // NSMutableDictionary* argsDict=[NSMutableDictionary dictionary]; // [argsDict setObject:_nameText.text forKey:@"name"]; // [argsDict setObject:_ageText.text forKey:@"age"]; // [argsDict setObject:_sexText.text forKey:@"sex"]; // BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (:name,:age,:sex)" withParameterDictionary:argsDict]; if (insert) { UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil]; [alert show]; [alert release]; }else{ NSLog(@"insert failed"); } [database close]; //下面注释的这一段也是创建表只不过它是多线程安全的,而上面的在多线程中是不安全的 // FMDatabaseQueue* queue=[FMDatabaseQueue databaseQueueWithPath:[self databasePath]]; // [queue inDatabase:^(FMDatabase* database){ // if (![database tableExists:@"user"]) { // [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"]; // } // BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text]; // if (insert) { // UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil]; // [alert show]; // [alert release]; // }else{ // NSLog(@"insert failed"); // } // // }]; // [queue close]; } //显示所有数据库中的数据 - (IBAction)showBtn:(id)sender { FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]]; if (![database open]) { return; } //注意 此处的FMResultSet可以不用关闭,因为数据库关闭的时候FMResultSet自动关闭 FMResultSet* resultSet=[database executeQuery:@"select* from user"]; NSString* str=@""; while ([resultSet next]) { NSString* name=[resultSet stringForColumn:@"name"]; NSInteger age=[resultSet intForColumn:@"age"]; NSString* sex=[resultSet stringForColumn:@"sex"]; str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex]; NSLog(@"Name:%@,Age:%d,Sex:%@\n",name,age,sex); } _showLabel.text=str; [database close]; } //查询 - (IBAction)checkBtn:(id)sender { FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]]; if (![database open]) { return; } FMResultSet* resultSet=[database executeQuery:@"select* from user where name = ?",@"chen"]; NSString* str=@""; while ([resultSet next]) { NSString* name=[resultSet stringForColumn:@"name"]; NSInteger age=[resultSet intForColumn:@"age"]; NSString* sex=[resultSet stringForColumn:@"sex"]; str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex]; } _showLabel.text=str; [database close]; } //删除 - (IBAction)deleteBtn:(id)sender { FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]]; if (![database open]) { return; } BOOL delete=[database executeUpdate:@"delete from user where name = ?",@"chen"]; if (delete) { UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"删除成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil]; [alert show]; [alert release]; } [database close]; } //更新 - (IBAction)updateBtn:(id)sender { FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]]; if (![database open]) { return; } BOOL update=[database executeUpdate:@"update user set age = ? where name= ?",[NSNumber numberWithInt:20],@"chen"]; if (update) { UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"更新成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil]; [alert show]; [alert release]; } [database close]; } -(NSString* )databasePath { NSString* path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString* dbPath=[path stringByAppendingPathComponent:@"user.db"]; return dbPath; } @end