博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FMDB增删改查小Demo
阅读量:6607 次
发布时间:2019-06-24

本文共 3043 字,大约阅读时间需要 10 分钟。

创建,插入,更新和删除:使用executeUpdate方法,而查询则用executeQuery

 

1.实例化FMDatabase

//paths: ios下Document路径,Document为ios中可读写的文件夹NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentDirectory = [paths objectAtIndex:0];         //dbPath: 数据库路径,在Document中。NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Test.db"];         //创建数据库实例 db 这里说明下:如果路径中不存在"Test.db"的文件,sqlite会自动创建"Test.db"FMDatabase *db= [FMDatabase databaseWithPath:dbPath] ;if (![db open]) {NSLog(@"Could not open db.");return ;}

 

2.创建表
//创建一个名为User的表,有两个字段分别为string类型的Name,integer类型的 Age

[db executeUpdate:@"CREATE TABLE User (Name text,Age integer)"];

 

3.插入
//插入数据使用OC中的类型 text对应为NSString integer对应为NSNumber的整形

[db executeUpdate:@"INSERT INTO User (Name,Age) VALUES (?,?)",@"Jeffery",[NSNumber numberWithInt:20]];

 

4.更新
//更新数据 

[db executeUpdate:@"UPDATE User SET Name = ? WHERE Name = ? ",@"Hello",@"Jeffery"];

 

5.删除

//删除数据

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

 

6.查询

//返回数据库中第一条满足条件的结果NSString *aa=[db stringForQuery:@"SELECT Name FROM User WHERE Age = ?",@"10"];              //返回全部查询结果FMResultSet *rs=[db executeQuery:@"SELECT * FROM User"];              rs=[db executeQuery:@"SELECT * FROM User WHERE Age = ?",@"10"];              while ([rs next]){NSLog(@"%@ %@",[rs stringForColumn:@"Name"],[rs stringForColumn:@"Age"]);}              [rs close];

 

备注:

需要提一点就是:线程安全

如果我们的app需要多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。 切记不能在多个线程中共同一个FMDatabase对象并且在多个线程中同时使用,这个类本身不是线程安全的,这样使用会造成数据混乱等问题。

使用FMDatabaseQueue很简单,首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。 在闭包中操作数据库,而不直接参与FMDatabase的管理。

// 创建,最好放在一个单例的类中FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];                    // 使用[queue inDatabase:^(FMDatabase *db) {    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];                        FMResultSet *rs = [db executeQuery:@"select * from foo"];    while ([rs next]) {        // …    }}];                    // 如果要支持事务[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];                        if (whoopsSomethingWrongHappened) {        *rollback = YES;        return;    }    // etc…    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];}];

查看SQLite的工具

为了查看Sqlite中的数据,一个好的图形化界面的数据库管理程序是必不可少的。mysql有phpMyAdmin,那么sqlite呢?

我主要使用的是Firefox的一个名为SQLite Manager的插件,安装此插件后,可以直接打开后缀名为sqlite的数据库文件。SQLite Manager提供一个图形化的界面来执行数据查询或更改操作。如下图所示:

 

参考文章:

http://blog.devtang.com/blog/2012/04/22/use-fmdb/

转载于:https://www.cnblogs.com/sany007/archive/2013/03/05/2944989.html

你可能感兴趣的文章
Logwatch linux日志监视器解析
查看>>
【第8章】JVM内存管理
查看>>
在绿色的河流上
查看>>
关于内存溢出产生的死循环
查看>>
ovirt官方安装文档 附录G
查看>>
磁盘故障小案例
查看>>
了解相关.NET Framework不同组件区别及安装知识
查看>>
ToughRADIUS快速指南
查看>>
Kubernetes+Prometheus+Grafana部署笔记
查看>>
linux磁盘管理基本命令
查看>>
HTML
查看>>
【转】左手坐标系和右手坐标系
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
POJ 3335 Rotating Scoreboard 半平面交
查看>>
oracle 闪回查询
查看>>
window.location.href和window.location.replace的区别
查看>>
《Gamestorming》读书笔记
查看>>
域名和网址链接被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
查看>>
SpringBoot 统一响应格式
查看>>