加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite 数据库、FMDB 简单使用

发布时间:2020-12-12 19:30:15 所属栏目:百科 来源:网络整理
导读:1、 通过Sqlite创建数据库。首先导入框架; //创建数据库的路径; NSString *path = [[ NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ) lastObject ] stringByAppendingPathComponent : @"data.sqlite" ]; //第一个

1、 通过Sqlite创建数据库。首先导入框架; //创建数据库的路径; NSString *path = [[ NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ) lastObject ] stringByAppendingPathComponent : @"data.sqlite" ];
//第一个参数是C类型的字符创。表示路径;第二个参数表示数据库的地址;是 sqlite3 类型,返回的参数可以做为是否创建成功的依据; int success =sqlite3_open(path.UTF8String,&_db);
//创建表:使用create关键字。非查询语句都使用这个函数 sqlite3_exec if (success == SQLITE_OK) { //创建表;加上条件判断 if not exists;如果不存就创建; 不加有可能会报错; //表table:在创建的时候,一定要设置primary key(主键),并且主键不能频繁更改,且与数据无关; NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,score REAL DEFAULT 60.0);";
int successT = sqlite3_exec ( _db ,sql. UTF8String ,255)"> NULL ,255)"> NULL ); }
//增加数据:使用insert 关键字; NSString *sql = [ NSString stringWithFormat : @"INSERT INTO t_student (name,score) VALUES ('%@',%f);" ,name,175)">arc4random_uniform (8000)/100.0 + 20]; int success = sqlite3_exec(_db,sql.NULL,255)">NULL);
//删除数据:使用delete 关键字;where 是设置条件;这里是 score > 90的删除; NSString *sql = @"DELETE FROM t_student WHERE score > 90.0;"; NULL);
//更新/修改数据:使用update 和 set 关键字; @"UPDATE t_student SET score = 59.9 WHERE score < 60;"; NULL);
//查询数据:使用 select 关键字, Like是模糊查询,% 是通配符,这里是查询名字里包含 8 这个字符的学生; @"SELECT id,score FROM t_student WHERE name LIKE '%8%'"; // 期望 结果保存在 stmt 里面 sqlite3_stmt *stmt = nil; 准备查询 其实 把查询结果保存在 指针区域中 /*参数的含义: sqlite3 *db,数据库的句柄 const char *zSql,sql语句 int nByte,sql语句的最大长度 -1代表无限制; sqlite3_stmt **ppStmt, 输出: Statement 句柄 获取最终的结果数据
const char **pzTail
输出: 保留参数
*/ sqlite3_prepare_v2( NULL); SQLITE_OK) { // 一步步获取每一条 step 拿一条数据 SQLITE_ROW 证明成功拿到数据 while ( sqlite3_step (stmt) == SQLITE_ROW ) { // id 0 name 1 score 2 获取一行中每一列的数据; const char *name = ( const char *) sqlite3_column_text (stmt,1); double score = sqlite3_column_double (stmt,2); NSLog ( @" 姓名 :%@ 成绩 :%f" ,[ stringWithUTF8String :name],score); } }


1、FMDB数据库的创建, FMDB 是对于sqlite的一个封装;是基于对象的; @"datafmdb.sqlite" ]; FMDatabase *database = [FMDatabase databaseWithPath:path]; self . database = database; BOOL success = [database open]; //同过返回值确定是否打开数据库;
2、建表语句,插入,删除,更新都是只用如下方法 BOOL successT= [self.database executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT,score REAL);"];
3、查询语句: //创建sql语句 ; FMResultSet *result = [ database executeQuery :sql]; while ([result next ]) { //name TEXT NSString *name = [result stringForColumnIndex:1]; //score DOUBLE double score = [result doubleForColumnIndex :2]; }
注意:FMDB封装了一套线程安全的数据库; NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject] stringByAppendingPathComponent:@"data.sqlite"]; FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path]; self . queue = queue; [ queue inDatabase :^( FMDatabase *db) { // block 内部的就是线程安全,只所有sql语句都写在这个闭包里面; BOOL success = [db open]; if (success) { // 非查询语句都是用 executeUpdate BOOL successT= [db executeUpdate : ]; } }];
//事务的开启,当一段数据修改需要一起执行。但是执行一部分之后,程序崩溃了或者停电了;剩下的修改语句不能进行。数据就有可能出错;事务就有这样一个功能,被包装成事务的一段代码,要么全部执行,要么都不执行;就可以避免这种情况;
[queue inDatabase:^(FMDatabase *db) {
// 开启事务 在这条语句之后的都是一个事务 [db beginTransaction]; //插入需要更新的语句;
//[db rollback]; 这是执行手动回滚; [db commit ]; }];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读