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

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

创建并打开数据库:

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

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

  1. -(void)execSql:(NSString *)sql
  2. {
  3. if ([self openDB]) {
  4. char *err;
  5. if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
  6. NSLog(@"数据库操作数据失败!");
  7. }else{
  8. NSLog(@"%@",sql);
  9. }
  10. sqlite3_close(db);
  11. }
  12. }

创建表:

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

插入数据:

  1. -(void) insertData{
  2. NSString *insertSql1= [NSString stringWithFormat:
  3. @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
  4. TABLENAME, NAME, AGE, ADDRESS, @"张三", @"13", @"济南"];
  5. [self execSql:insertSql1];
  6. NSString *insertSql2 = [NSString stringWithFormat:
  7. @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
  8. TABLENAME, NAME, AGE, ADDRESS, @"李四", @"12", @"济南"];
  9. [self execSql:insertSql2];
  10. }

修改表:

  1. -(void) updateData{
  2. NSString *updateSql = [NSString stringWithFormat:
  3. @"UPDATE '%@' SET '%@' = '%@' WHERE '%@' = '%@'",
  4. TABLENAME,   AGE,  @"15" ,AGE,  @"13"];
  5. [self execSql:updateSql];
  6. }

删除表内容:

  1. -(void) deleteData{
  2. NSString *sdeleteSql = [NSString stringWithFormat:
  3. @"delete from %@ where %@ = '%@'",
  4. TABLENAME, NAME, @"张三"];
  5. [self execSql:sdeleteSql];
  6. }

上面实现了表内容的增、改、删,下面实现表内容查询。

  1. -(void) selectData{
  2. [self openDB];
  3. NSString *sqlQuery = [NSString stringWithFormat:
  4. @"SELECT * FROM %@",TABLENAME];
  5. sqlite3_stmt * statement;
  6. if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
  7. //查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值,注意这里的列值
  8. while (sqlite3_step(statement) == SQLITE_ROW) {
  9. char *name = (char*)sqlite3_column_text(statement, 1);
  10. NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
  11. int age = sqlite3_column_int(statement, 2);
  12. char *address = (char*)sqlite3_column_text(statement, 3);
  13. NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];
  14. NSLog(@"name:%@  age:%d  address:%@",nsNameStr,age, nsAddressStr);
  15. }
  16. }else{
  17. NSLog(@"select error:%@",sqlQuery);
  18. }
  19. sqlite3_close(db);
  20. }

好了,这就是全部了,iOS中数据库操作的类封装的并不太好用,希望大家尽量封装自己的类,。

Demo下载

/**
* @author 张兴业
*  iOS入门群:83702688
*  android开发进阶群:241395671
*  我的新浪微博:@张兴业TBOW
*/
 
http://www.cnblogs.com/xiaobaizhu/archive/2012/12/07/2808170.html
 
from:http://blog.csdn.net/xyz_lmn/article/details/8968203

【转】iOS学习笔记(十五)——数据库操作(SQLite)的更多相关文章

  1. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  2. python学习笔记(十)完善数据库操作

    1.cur = coon.cursor(cursor=pymysql.cursors.DictCursor)的用法 建立游标,指定cursor类型返回的是字典,如果不指定类型,返回的是元组类型数据 i ...

  3. python学习笔记(十 二)、操作数据库

    每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...

  4. (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)

    一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...

  5. Python学习笔记六:数据库操作

    一:Python操作数据库的流程 二:开发环境准备 1:开发工具PyCharm 2:Python操作mysql的工具:需要安装Python-Mysql Connector,网址:https://sou ...

  6. MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34)

    知识点十六:MySQL的账号权限赋予(33) 一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界.比如只允许你执行select操作,那么你就不能执 ...

  7. Java 学习笔记(16)——Java数据库操作

    数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...

  8. python 学习笔记十五 django基础

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  9. (C/C++学习笔记) 十五. 构造数据类型

    十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...

  10. ballerina 学习二十九 数据库操作

    ballerina 数据操作也是比较方便的,官方也我们提供了数据操作的抽象,但是我们还是依赖数据库驱动的. 数据库驱动还是jdbc模式的 项目准备 项目结构 ├── mysql_demo │ ├── ...

随机推荐

  1. GitHub上最火爆!码代码不得不知的所有定律法则

    目录 介绍 定律 阿姆达尔定律 (Amdahl's Law) 布鲁克斯法则 (Brooks's Law) 康威定律 (Conway's Law) 侯世达定律 (Hofstadter's Law) 技术 ...

  2. TSubclassOf的一些说明

    注:补充下SpawnActor的用法 TSubclassOf<AActor> TS = LoadClass<AActor>(NULL, TEXT("Blueprint ...

  3. 剑指Offer的学习笔记(C#篇)-- 树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 一 . 二叉树的概念         树形结构是一种典型的非线性结构,除了用于表示相邻关系外,还可 ...

  4. 脑图和MarkDown

    使用脑图整理前端体系 根据以下网址整理 http://web.jobbole.com/84062/ http://naotu.baidu.com/ 学习MarkDown语法格式 (一) 标题 在首行插 ...

  5. Spring @Import 注解

    @Import  导入某个bean 文件 @Configuration @Import({User.class,MyImportSelector.class,MyImportBeanDefinitio ...

  6. Sass 愿景

    在最近的一个 CSS 见面会上,我向与会者提问,“有人会在日常的工作流中使用 Sass 吗?”回答结果压倒性的表示肯定——保守谨慎地使用 Sass 已经成为过去式.Sass 正迅速成长为编写 CSS ...

  7. IOS在滚动的时候fixed消失

      前段时间,除了apple发布了新的硬件之外,同步还发布了新的操作系统,IOS11,当大家都将注意力聚焦在那个奇怪的刘海该如何适配的时候,笔者的项目在适配IOS11却出现了其他的问题. 众所周知,I ...

  8. Hive_Hive的数据模型_外部表

    Hive的数据模型之外部表 外部表(External Table)- 指向已经在HDFS中存在的数据,可以创建Partition- 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异. ...

  9. IIS中的 Asp.Net Core 和 dotnet watch

    在基于传统的.NET Framework的Asp.Net Mvc的时候,本地开发环境中可以在IIS中建立一个站点,可以直接把站点的目录指向asp.net mvc的项目的根目录.然后build一下就可以 ...

  10. P3290 寻找第K大数

    描述 寻找第K大数 N个小朋友在一起做游戏.每个小朋友在自己的硬纸板上写一个数,然后同时举起来.接着,小y老师提一个问题,看哪个小朋友先抢答出来.问题是:在这N个数中,第K大的是哪个数?请你编程完成. ...