博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS学习笔记(十五)——数据库操作(SQLite)
阅读量:6249 次
发布时间:2019-06-22

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

hot3.png

 SQLite () 是一个轻量级的关系数据库。SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,目前应用于Android、iOS、Windows Phone等智能手机。iOS 使用时SQLite,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。

          数据库操作包含打开数据库、创建表,表的增、删、改、查。下面代码给出了数据库操作。

         创建并打开数据库:

-(BOOL) openDB{   //获取数据库路径    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documents = [paths objectAtIndex:0];    NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];        //如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)    //打开数据库,这里的[path UTF8String]是将NSString转换为C字符串,因为SQLite3是采用可移植的C(而不是    //Objective-C)编写的,它不知道什么是NSString.    if (sqlite3_open([database_path UTF8String], &db) == SQLITE_OK) {        return YES;    }else{        return NO;        NSLog(@"数据库打开失败");        sqlite3_close(db);    }}

         iOS中没有提供创建数据库的命令,当使用sqlite3_open时,如果数据库文件不存在会自行创建数据库,如果存在会打开数据库。打开数据库后就可以创建表并操作表内容了,iOS中的sqlite3使用sqlite3_exec来创建表、插入表内容、修改表内容、删除表内容等操作,使用sqlite3_prepare_v2来查询表。下面给给出了sqlite3_exec的封装:

-(void)execSql:(NSString *)sql{        if ([self openDB]) {        char *err;        if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {            NSLog(@"数据库操作数据失败!");        }else{            NSLog(@"%@",sql);        }        sqlite3_close(db);    }    }

        创建表:

NSString *sqlCreateTable =  [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' INTEGER PRIMARY KEY AUTOINCREMENT, '%@' TEXT, '%@' INTEGER, '%@' TEXT)",TABLENAME,ID,NAME,AGE,ADDRESS];    [self execSql:sqlCreateTable];

        插入数据:

-(void) insertData{    NSString *insertSql1= [NSString stringWithFormat:                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",                      TABLENAME, NAME, AGE, ADDRESS, @"张三", @"13", @"济南"];    [self execSql:insertSql1];        NSString *insertSql2 = [NSString stringWithFormat:                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",                      TABLENAME, NAME, AGE, ADDRESS, @"李四", @"12", @"济南"];    [self execSql:insertSql2];    }

         修改表:

-(void) updateData{    NSString *updateSql = [NSString stringWithFormat:                      @"UPDATE '%@' SET '%@' = '%@' WHERE '%@' = '%@'",                      TABLENAME,   AGE,  @"15" ,AGE,  @"13"];    [self execSql:updateSql];}
         删除表内容:

-(void) deleteData{    NSString *sdeleteSql = [NSString stringWithFormat:                      @"delete from %@ where %@ = '%@'",                      TABLENAME, NAME, @"张三"];    [self execSql:sdeleteSql];}
上面实现了表内容的增、改、删,下面实现表内容查询。

-(void) selectData{    [self openDB];    NSString *sqlQuery = [NSString stringWithFormat:                      @"SELECT * FROM %@",TABLENAME];    sqlite3_stmt * statement;        if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {                //查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值,注意这里的列值        while (sqlite3_step(statement) == SQLITE_ROW) {            char *name = (char*)sqlite3_column_text(statement, 1);            NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];                        int age = sqlite3_column_int(statement, 2);                        char *address = (char*)sqlite3_column_text(statement, 3);            NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];                        NSLog(@"name:%@  age:%d  address:%@",nsNameStr,age, nsAddressStr);        }    }else{        NSLog(@"select error:%@",sqlQuery);    }    sqlite3_close(db);}
好了,这就是全部了,iOS中数据库操作的类封装的并不太好用,希望大家尽量封装自己的类,。

/**
* 张兴业
*  
*  iOS入门群:83702688
*  android开发进阶群:241395671
*  我的新浪微博:
*/
http://www.cnblogs.com/xiaobaizhu/archive/2012/12/07/2808170.html

转载于:https://my.oschina.net/201003674/blog/288959

你可能感兴趣的文章
Lua中的操作系统库
查看>>
环境变量path的值大于1024的解决办法
查看>>
webpack 通用环境快速搭建
查看>>
js获取url参数值
查看>>
Django 文件下载功能
查看>>
浅谈前端性能优化(PC版)
查看>>
modernizr的介绍和使用
查看>>
Java小实验之数据转换
查看>>
ASP.NET MVC之从控制器传递数据到视图方式
查看>>
IsPostBack原理详解
查看>>
华为交换机-SNMP配置
查看>>
centos修改mysql密码或者进入mysql后解决Access denied for user ''@'localhost' to database 'mysql错误...
查看>>
分数阶傅里叶变换(FRFT)
查看>>
hibernate(八)一对多关联
查看>>
swift - 本地通知2 - 啰嗦版
查看>>
swift - idfa(唯一标示/下载量/广告追踪)
查看>>
GC垃圾回收
查看>>
HDU 4804 Campus Design
查看>>
nyist 42 一笔画 (欧拉回路 + 并查集)
查看>>
用javascript实现用户登录验证
查看>>