1: 创建数据库表格

1.1 — 表格创建使用一个数据库软件快速创建:软件大小14.3M; 下载地址:http://pan.baidu.com/s/1qWOgGoc;

表格创建-> 打开软件,点击第一个 "New SQLite Database" 开始创建表格

1.2 — 点击保存之后就又一个Student的sql在桌面,然后创建表格,点击上方按钮Database -> Create Table

为了方便,创建的表格名字和数据库名字一样 Student;添加4个参数,整形、字符串、和数据流类型参数;

添加完之后拖进项目工程里面就好了。

  2.  —打开和关闭数据库   

新建工程,创建一个继承NSobject的类,用来封装打开和关闭数据库; 类中导入系统库 sqlite3(要先添加进项目);

SQLDatas.h 文件
 #import <Foundation/Foundation.h>
#import <sqlite3.h> @interface SQLDatas : NSObject //打开数据库
+(sqlite3 *)openSQL; //关闭数据库
+(void)closeSQL; @end
SQLDatas.m 实现文件
 #import "SQLDatas.h"

 //定义一个全局数据库
static sqlite3 *mySQL =nil; @implementation SQLDatas //打开数据库
+(sqlite3 *)openSQL
{
if (mySQL)
{
return mySQL;
}
/**
//将bundle上的数据库转移到沙盒
*/
//获取bundle路径 数据库文件名 数据库名和创建的表名一样
NSString *bundlepath = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"sqlite"];
//获取沙盒路径
NSString *docupath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[];
//拼接文件完整路径
NSString *filePath =[docupath stringByAppendingPathComponent:@"Student.sqlite"]; //管理沙盒的对象
NSFileManager *fm =[NSFileManager defaultManager]; //判断是否已经存在这个文件,如果不存在就拷贝到沙盒
if ([fm fileExistsAtPath:filePath] == NO)
{
[fm copyItemAtPath:bundlepath toPath:filePath error:nil];
}
//打开数据库
sqlite3_open([filePath UTF8String], &mySQL); return mySQL;
} //关闭数据库
+(void)closeSQL
{
if (mySQL)
{
//置空
mySQL=nil;
sqlite3_close(mySQL);
}
} @end

  3.  ——创建数据模型   

3.1 — 新建一个数据模型  ModetoSQL,我们将数据赋值给模型,再把模型添加进数据库

ModetoSQL.h 头文件

 #import <Foundation/Foundation.h>

 @interface ModetoSQL : NSObject

 @property(assign,nonatomic)int sid;
@property(strong,nonatomic)NSString *name;
@property(assign,nonatomic)int age;
@property(assign,nonatomic)NSData *image; //添加信息到数据库
+(BOOL)addInfoToSQL:(ModetoSQL *)stu; //查询数据
+(NSMutableArray *)findAllInfo; //根据条件查找
+(ModetoSQL *)finByID:(int)ID; //删除数据
+(BOOL)deleByID:(int)sid; //根据id更新数据库
+(void)updataSQL:(ModetoSQL*)mode; @end

   4. 添加数据库  

ModetoSQL.m 文件

 +(BOOL)addInfoToSQL:(ModetoSQL *)stu
{
//1. 打开数据库,返回一个数据库
sqlite3 *mmSQL =[SQLDatas openSQL]; //2. 创建一个SQL描述对象
sqlite3_stmt *stmt = nil; //3. 通过数据库语句进行数据库连接操作 表名括号里的参数要喝表格里的一样 如果result 为1,一般都是此语句错误;
int result= sqlite3_prepare_v2(mmSQL, "insert into Student(sid,name,age,image) values(?,?,?,?)", -, &stmt, nil);
//如果返回为0,则成功,判断准备语句是否有问题
if (result == SQLITE_OK)
{
//把四个值准备插入 1 2 3 4对应上面的问号
sqlite3_bind_int(stmt, , stu.sid);
sqlite3_bind_text(stmt, , [stu.name UTF8String], -, NULL);
sqlite3_bind_int(stmt, , stu.age);
//把OC的数据流 转成C语言的二进制流 [stu.imageD bytes]
sqlite3_bind_blob(stmt, , [stu.image bytes], (int)[stu.image length],nil); //判断操作是否成功
if (SQLITE_DONE == sqlite3_step(stmt))
{
//关闭数据库
[SQLDatas closeSQL];
return YES;
}
} //如果不成功 返回NO 关闭数据库
sqlite3_finalize(stmt);
return NO;
}

添加语句有了以后,我们就在控制器 ViewController 上调用添加一个数据进去。

 //创建一个模型对象,并赋值
ModetoSQL *mode =[ModetoSQL new];
mode.sid = ;
mode.name =@"张三";
mode.age = ;
//把图片转成数据流 添加一张本地图片01.png,png后缀可以去掉,图片的数据流一般都是网络请求的;
UIImage *img = [UIImage imageNamed:@""];
//将图片转换成数据流 压缩0.5
NSData *imgData = UIImageJPEGRepresentation(img, 0.5);
mode.image =imgData; //添加到数据库
BOOL isSuc = [ModetoSQL addInfoToSQL:mode];
NSLog(@"%d",isSuc); //打印判断是否成功 //打印沙盒文件路径 如果不确定数据是否真的添加 可以进入沙盒文件下的Documents查看
NSLog(@"%@",NSHomeDirectory());

如果之前的语句没有写错,那么就会成功添加一个数据模型到数据库。

通过打印的沙盒路径找到数据库,打开数据库可以看到添加成功的数据。

我们不可能每次都打开沙盒查看数据库,所以得用数据库查询语句;

  5. — —查询数据库   

ModetoSQL.m

 +(NSMutableArray *)findAllInfo
{
//创建接收信息的数组
NSMutableArray *infoArr = [NSMutableArray new];
//1. 打开数据库,返回一个数据库
sqlite3 *mmSQL =[SQLDatas openSQL]; //2. 创建一个SQL描述对象
sqlite3_stmt *stmt = nil; //3. 通过数据库语句进行数据库连接操作
int result =sqlite3_prepare_v2(mmSQL, "select *from Student", -, &stmt, nil);
if (result == SQLITE_OK)
{
while (SQLITE_ROW == sqlite3_step(stmt))
{
//执行查询操作
ModetoSQL *stu =[ModetoSQL new];
stu.sid =sqlite3_column_int(stmt, );//0个位置
//C语言字符串 转OC字符串
stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, )];
stu.age =sqlite3_column_int(stmt, );
//将二进制数据流 转OC数据量
stu.image = [NSData dataWithBytes:sqlite3_column_blob(stmt, ) length:sqlite3_column_bytes(stmt, )];
//添加进数组
[infoArr addObject:stu];
}
}
//关闭数据库
[SQLDatas closeSQL];
return infoArr;
}

我们在控制器 ViewController 上调用查询语句,这个语句是查询全部数据,返回一个可变数组。

 //查找全部信息 创建可变数组接收
NSMutableArray *arr = [NSMutableArray new];
arr = [ModetoSQL findAllInfo];
//循环遍历 取出
for (ModetoSQL *mode in arr)
{
NSLog(@"%d",mode.sid);
NSLog(@"%@",mode.name);
NSLog(@"%d",mode.age);
}

有时候我们需要根据某个条件查询数据库,such as sid;我们也可以用其他参数查询

 //根据条件查找
+(ModetoSQL *)finByID:(int)sid
{
ModetoSQL *stu =[ModetoSQL new];
//1. 打开数据库,返回一个数据库
sqlite3 *mmSQL =[SQLDatas openSQL];
//2. 创建一个SQL描述对象
sqlite3_stmt *stmt = nil;
//3. 通过数据库语句进行数据库连接操作 删除语句里的对象要像对应sID
int result = sqlite3_prepare_v2(mmSQL, "select * from Student where sid = ?", -, &stmt, nil);
if (result == SQLITE_OK)
{
sqlite3_bind_int(stmt, , sid); //id在第一个位置
if (SQLITE_ROW == sqlite3_step(stmt))
{
stu.sid =sqlite3_column_int(stmt, );
stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, )];
stu.age =sqlite3_column_int(stmt, );
//将二进制数据流 转OC数据量
stu.image = [NSData dataWithBytes:sqlite3_column_blob(stmt, ) length:sqlite3_column_bytes(stmt, )];
}
}
//关闭数据酷
sqlite3_finalize(stmt);
return stu;
}

上面的按照sid查找的结果, 如果有多个相同的sid,也只是返回一条数据; 只要稍作修改就可以返回全部符合条件的数据,发返回类型改为数组,把里面的if 改为while

 //根据条件查找
+(NSMutableArray *)finByID:(int)sid
{
NSMutableArray *arr =[NSMutableArray new]; //ModetoSQL *stu =[ModetoSQL new];
//1. 打开数据库,返回一个数据库
sqlite3 *mmSQL =[SQLDatas openSQL];
//2. 创建一个SQL描述对象
sqlite3_stmt *stmt = nil;
//3. 通过数据库语句进行数据库连接操作 删除语句里的对象要像对应sID
int result = sqlite3_prepare_v2(mmSQL, "select * from Student where sid = ?", -, &stmt, nil);
if (result == SQLITE_OK)
{
sqlite3_bind_int(stmt, , sid); //id在第一个位置 while (SQLITE_ROW == sqlite3_step(stmt))
{ ModetoSQL *stu = [ModetoSQL new];
stu.sid =sqlite3_column_int(stmt, );
stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, )];
stu.age =sqlite3_column_int(stmt, );
//将二进制数据流 转OC数据量
stu.image = [NSData dataWithBytes:sqlite3_column_blob(stmt, ) length:sqlite3_column_bytes(stmt, )];
[arr addObject:stu];
}
}
//关闭数据酷
sqlite3_finalize(stmt);
return arr;
}

 6. — —删除数据库   

接下来就是删除数据了,根据 sid删除;

 //1. 打开数据库,返回一个数据库
sqlite3 *mmSQL =[SQLDatas openSQL];
//2. 创建一个SQL描述对象
sqlite3_stmt *stmt = nil;
//3. 通过数据库语句进行数据库连接操作 删除语句里的对象要像对应sID
int result =sqlite3_prepare_v2(mmSQL, "delete from Student where sid= ?", -, &stmt, nil);
if (result== SQLITE_OK)
{
sqlite3_bind_int(stmt, , sid);
if (SQLITE_DONE== sqlite3_step(stmt))
{
return YES;
}
}
//关闭数据库
sqlite3_finalize(stmt);
return NO;

     7. — —修改数据库    

最后一个根据参数修改数据库,因为我们存进去的是一个模型,所以我们修改的时候页是根据模型修改

 //根据sid更新数据库
+(void)updataSQL:(ModetoSQL *)mode
{
//1. 打开数据库,返回一个数据库
sqlite3 *mmSQL =[SQLDatas openSQL];
//2. 创建一个SQL描述对象
sqlite3_stmt *stmt = nil;
//3. 通过数据库语句进行数据库连接操作 删除语句里的对象要像对应sID
int result =sqlite3_prepare_v2(mmSQL, "update Student set name = ? ,age = ? ,image = ? where sid = ?", -, &stmt, nil); if (result ==SQLITE_OK)
{
//数字必须和问号顺序相对应;
sqlite3_bind_int(stmt, , mode.sid);
sqlite3_bind_text(stmt, , [mode.name UTF8String], -, nil);
sqlite3_bind_int(stmt, , mode.age);
sqlite3_bind_blob(stmt, , [mode.image bytes], (int)[mode.image length], nil);
if (sqlite3_step(stmt) == SQLITE_DONE)
{ }
}
sqlite3_finalize(stmt); //关闭数据库
}

根据两个参数修改其中的值"  update gooodsInfo set number = 11 where goodsid = 19  and  price = 66 "

< 关于数据库的相关操作大致就这些!>

iOS 数据库sqlite完整增删改查操作的更多相关文章

  1. 【Python + Mysql】之用pymysql库连接Mysql数据库并进行增删改查操作

    用pip下载pymysql并引用 具体请参考文章: <Python之MySQL数据库增删改查操作> <python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删 ...

  2. 48.Python中ORM模型实现mysql数据库基本的增删改查操作

    首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...

  3. 利用SQLiteOpenHelper创建数据库,进行增删改查操作

    Android中提供SQLiteOpenHelper类,在该类的构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象.继承和扩展SQLiteOpenHelper类主要做的工作就是重写 ...

  4. java连接mysql数据库 三 实现增删改查操作

    同以前一样,先写一个数据库打开和关闭操作类 public class DBConnection { String driver = "com.mysql.jdbc.Driver"; ...

  5. (转)SQLite数据库增删改查操作

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  6. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  7. PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码

    PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...

  8. MySQL数据库的权限问题操作及基本增删改查操作

    前面我们讲了mysql的基本内容,现在我们详细的了解一下mysql中的具体操作. what's the SQl SQL(Structured Query Language 即结构化查询语言) SQL语 ...

  9. python web.py操作mysql数据库,实现对数据库的增删改查操作

    使用web.py框架,实现对mysql数据库的增删改查操作: 该示例代码中连接的是本地数据库testdb,user表,表结构比较简单,只有两个字段:mobile和passwd,类型均为字符型 实际应用 ...

随机推荐

  1. this四种绑定方式之间的奇淫技巧

    写在前面 上一篇中,我们对于JavaScript中原始值.复杂值以及内存空间进行了一个深入浅出的总结,这次我们来聊一聊JavaScript中this关键字的深入浅出的用法. 在 JavaScript ...

  2. How to map Actions to a certain RibbonPage and RibbonGroup using the Application Model or in code

    https://www.devexpress.com/Support/Center/Question/Details/S134617/how-to-map-actions-to-a-certain-r ...

  3. monkey测试入门3

    本文要感谢一起战斗过的点时小伙伴,程童鞋 打开开始 输入cmd 看到它的目录地址 然后把adb压缩包解压到该地址 插入数据线 打开手机设置打开开发者选项 打开USB调试 右键点击我的电脑 选择管理 左 ...

  4. [Unity] unity5.3 assetbundle打包及加载

    Unity5.3更新了assetbundle的打包和加载api,下面简单介绍使用方法及示例代码. 在Unity中选中一个prefab查看Inspector窗口,有两个位置可以进行assetbundle ...

  5. 初学node.js-nodejs安装运行(1)

    1.Node.js中文官网http://nodejs.cn/download/下载node.js 学习node.js需要有javascript基础,没有基础的可以在http://www.w3schoo ...

  6. 使用spring整合Quartz实现—定时器

    使用spring整合Quartz实现—定时器(Maven项目做演示) 不基于特定的基类的方法 一,开发环境以及依赖的jar包 Spring 4.2.6.RELEASE Maven 3.3.9 Jdk ...

  7. 使用vbox构建局域网络

    update: 也可以启用DHCP自动分配IP地址.(看到过的某一篇博文写过要使用这个服务还得自己搭--就没有动手去实践一下直接手动分配了静态的IP.偶然尝试了一下发现动态IP分配和手动静态IP分配都 ...

  8. sublime编写markdownm

    sublime编写markdownm 以前用有道云笔记,找了半天更改字体大小,结果还找不 到,那个字实在是太小了,像我这种有强迫症的患者,实 在受不了简约风格的有道云,所以上网找了与和诺插件并 受到一 ...

  9. Scrum Meeting 11.06

    成员 今日任务 明日计划 用时 徐越 学习ListView+simpleAdapter,actionBar.阅读并修改前端代码 继续修改前端代码.完善数据库 4h 赵庶宏  构建后端数据库,进行完善 ...

  10. OO第三阶段作业总结

    调研:        最早的程序设计是直接采用机器语言来编写的,或者使用二进制码来表示机器能够识别和执行的指令和数据.机器语言的优点在于速度快,缺点在于写起来实在是太困难了,编程效率低,可读性差,并且 ...