当前位置:Gxlcms > 数据库问题 > [原创]使用FMDB的访问数据库

[原创]使用FMDB的访问数据库

时间:2021-07-01 10:21:17 帮助过:4人阅读

  NSString* path=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:@"student.sqlite"];

  //根据路径去打开数据库文件,如果文件不存在则创建数据库文件

  FMDatabase* db=[FMDatabase databaseWithPath:path];

  

  第二件事情,打开数据库连接 ,关闭数据库连接

  //open方法可以打开数据库连接,并且返回一个BOOL值表示打开数据库连接是否成功

  BOOL result=[db open];

  .......;//数据库操作

  //关闭数据库连接,做完操作就关闭是个好习惯,及时释放连接减少内存使用。

  [db close];

 

  第三件事情,使用FMDB执行增删查改,创表等操作

  如果要做查询的话需要使用executeQuery方法。

  除了查询以外的其他sql语句都使用executeUpdate方法去执行。

  例如,创建数据表:

  //使用executeUpdate执行创表语句并返回一个BOOL值表示创表的执行结果,YES则创表成功,NO则创表失败

  if([db open]){//记得要打开数据库连接才能使用executeUpdate执行sql语句

  BOOL cResult=[self.myDB executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student(sid integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,sex text NOT NILL,age int);"];

  }

  [db close]; //用完了厕所记得冲,嘎嘎

  

  执行了上面的代码之后,我们的数据库中就多了一个t_student数据表,表中没有任何数据,我们可以使用executeUpdate方法来增删改数据,如果使用executeUpdate时传递的是一个完整的sql语句,不能传参,我现在使用的executeUpdateWithFormat是可以传递参数的执行方式。但是要注意的是使用这种方式不再需要提供数据库字符串的‘‘(单引号),因为FMDB已经封装好了,你如果用了反而会出问题。

  添加数据:

  if([db open]){

  for (int i=1;i<100;i++){

        NSString* name=[NSString stringWithFormat:@"学生-%d",i];

        //使用fmdb提供的WithFormat时不需要为字符串类型提供‘’(单引号)

        [self.myDB executeUpdateWithFormat:@"insert into t_student values(%@,%@,%d)",name,i%2?@"":@"",i];

    }}

  [db close];

 

  删除数据:

if([db open]){

  //删除编号为1的数据,

  //尤其要注意的是删除语句必须是delete from,插入语句必须是insert into,因为我之前都是使用SQL SERVER的,在这两个东西上面都吃过亏

     [db executeUpdate:@"delete from t_student where sid=1"];

    }

  [db close];

 

  更新数据:

if([db open]){

  //更新性别信息,男变女

     [db executeUpdateWithFormat:@"update t_student set sex=%@ where sex=%@",@"男",@"女"];

    }

  [db close];

 

  最后是比较麻烦的查询数据,它不像之前的增删改,只要执行了就会有成功或者失败的结果就好了,查询它返回的是表的数据结果集,所以我们会使用FMResultSet来存放最后的查询结果。

  查询数据:

  if([db open]){

    NSString* sql=@"select * from t_student";

    //使用executeQuery方法执行sql语句并返回一个FMResultSet*对象,该对象包含查询语句的结果

    FMResultSet* rs=[db executeQuery:sql];

    while([rs next])//使用结果集对象的next方法可以读取结果集中的下一行数据,如果next方法结果为NO,则代表数据读取完毕

    {//这种语法形式比较像JAVA了,感觉比sqlite3的亲民的多

      //结果集的XXXForColumn:COLUMN方法,XXX代表的是返回的类型,COLUMN代表的是数据表列名

      int sid=[rs intForColumn:sid];//sid是t_student的sid列的意思,intForColumn表示以整型形式返回

      NSString* name=[rs stringForColumn:name];

      NSString* sex = [rs stringForColumn:sex];

      int age=[rs intForColumn:age];

      //我这里并没有封装实体,所以直接打印了,是否要封装实体,看各位大大的需要了

      NSLog(@"编号:%d,姓名:%@,性别:%@,年龄:%d",sid,name,sex,age);

    }

  }

  [db close];

 

  再附送XXXForColumn的具体形式,你能读取些什么样的类型呢,且看下图:

  技术分享

 

  FMDB真的不错,使用起来也是真的很方便,想起来sqlite3就是两行泪啊。

  最后,附送FMDB中封装的事务执行语法:

  if([db open]){

    [db beginTransaction];//开始事务

    @try{

      .......;//执行相关的数据操作;

    }

    @catch(NSException* ex){

      [db rollback];//回滚操作;

    }

    [db commit];//提交事务

  }

  [db close];//关闭数据库连接

 

  好了,今天的分享就道这里,希望能对大家有所帮助,如果有什么问题,欢迎大家来讨论与学习,qq:1750587828

[原创]使用FMDB的访问数据库

标签:

人气教程排行