FMDB在IOS开发中的使用

一夜长风 2013-09-01

     由于新项目中使用的数据库为FMDB,所以得重新学习,特此mark一下,以免忘记,也跟初学的童鞋分享一下学习心得。

1)首先导入FMDB的必要文件:

FMDatabase.h
FMDatabase.m
FMDatabaseAdditions.h
FMDatabaseAdditions.m
FMDatabasePool.h
FMDatabasePool.m
FMDatabaseQueue.h
FMDatabaseQueue.m
FMResultSet.h
FMResultSet.m

为了省去要这些文件,我在附件里打包好了,欢迎使用。 

2)打开或者建立数据库:

//NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)

//    NSString *documentDirectory = [paths objectAtIndex:0];

上面两句是获取到文件地址,属于比较官方的,但是因为即使创建数据库成功了,也很难找到它所在路径,所以为了能看到成功的DB文件,documentDirectory用以下方式创建,你们也可随意修改为最容易找到的文件夹就行.

   NSString *documentsDirectory=@"/Users/liuyanfeng/Desktop/iosProject/MapPro/MapPro/";

数据库的地址:

    NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"MapProDB.db"];

打开或者创建数据库,如果MapProDB.db已经存在,则直接打开,如果不存在,就在该目录下创建一个MapProDB.db的数据库:

    FMDatabase *db = [FMDatabase databaseWithPath:dbPath] ;

    if (![db open]) {

        NSLog(@"数据库连接失败");

        return;

    }

    NSLog(@"数据库打开i");

    [db close];

这样,数据库测试成功,你可以在刚才设定的目录里找到相应的DB文件。

3)  创建表:创建user的表,两个字段,两个为string类型的username,password:

[db executeUpdate:@"CREATE TABLE User (username text, password text)"];

4)插入数据:

[db executeUpdate:@"INSERT INTO User (username,password ) VALUES (?,?)",@"jaybril",@"123"] ;

5)更新数据:

[db executeUpdate:@"UPDATE User SET Name = ? WHERE Name = ? ",@"jaybril",@"宝贝"];

6)删除数据:

[db executeUpdate:@"DELETE FROM User WHERE Name = ?",@"jaybril"]; 

update的基本操作就这几个,接下来是queries!

  1. //返回数据库中第一条满足条件的结果  
  2. NSString *aa=[db stringForQuery:@"SELECT Name FROM User WHERE Age = ?",@"20"]; 

这样我们就查询返回了一条数据,那当我们想要查询放返回多条数据怎么办呢?不用愁,之前我就提到了FMDB中的另外一个主要的类,FMResultSet,这是一个结果集!返回多条数据时FMDB会将数据放在这个结果集中,然后我们在对这个结果集进行查询操作!很简单。

  1. FMResultSet *rs=[db executeQuery:@"SELECT * FROM User"];  
  2. rs=[db executeQuery:@"SELECT * FROM User WHERE Age = ?",@"20"];  
  3. while ([rs next]){  
  4. NSLog(@“%@ %@”,[rs stringForColumn:@"Name"],[rs stringForColumn:@"Age"]);  

更多的FMResultSet方法有:

intForColumn:

longForColumn:

longLongIntForColumn:

boolForColumn:

doubleForColumn:

stringForColumn:

dateForColumn:

dataForColumn:

dataNoCopyForColumn:

UTF8StringForColumnIndex:

objectForColumn:

 

具体查看一下类就行了

相关推荐