ios 查询mysql数据库操作系统_iOS 数据库sqlite完整增删改查操作

本文详细介绍了如何在iOS应用中使用SQLite进行数据库操作,包括创建数据库表格、打开和关闭数据库、创建数据模型以及实现数据的添加、查询、删除和更新。通过具体的代码示例,演示了如何在Objective-C中执行SQL语句,帮助开发者掌握iOS应用中的SQLite数据库管理。
摘要由CSDN通过智能技术生成

1: 创建数据库表格

1.1 — 表格创建使用一个数据库软件快速创建 《SQLiteManager》;

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

828b9d3728b6b531d6550ae9cc6391ad.png

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

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

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

c3fe045efba89281e64cd9f560d7016f.png

2.  —打开和关闭数据库

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

SQLDatas.h 文件

1 #import

2 #import

3

4 @interfaceSQLDatas : NSObject5

6 //打开数据库

7 +(sqlite3 *)openSQL;8

9 //关闭数据库

10 +(void)closeSQL;11

12 @end

SQLDatas.m 实现文件

1 #import "SQLDatas.h"

2

3 //定义一个全局数据库

4 static sqlite3 *mySQL =nil;5

6 @implementationSQLDatas7

8 //打开数据库

9 +(sqlite3 *)openSQL10 {11 if(mySQL)12 {13 returnmySQL;14 }15 /**16 //将bundle上的数据库转移到沙盒17 */

18 //获取bundle路径 数据库文件名 数据库名和创建的表名一样

19 NSString *bundlepath = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"sqlite"];20 //获取沙盒路径

21 NSString *docupath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];22 //拼接文件完整路径

23 NSString *filePath =[docupath stringByAppendingPathComponent:@"Student.sqlite"];24

25 //管理沙盒的对象

26 NSFileManager *fm =[NSFileManager defaultManager];27

28 //判断是否已经存在这个文件,如果不存在就拷贝到沙盒

29 if ([fm fileExistsAtPath:filePath] ==NO)30 {31 [fm copyItemAtPath:bundlepath toPath:filePath error:nil];32 }33 //打开数据库

34 sqlite3_open([filePath UTF8String], &mySQL);35

36 returnmySQL;37 }38

39 //关闭数据库

40 +(void)closeSQL41 {42 if(mySQL)43 {44 //置空

45 mySQL=nil;46 sqlite3_close(mySQL);47 }48 }49

50 @end

3.  ——创建数据模型

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

ModetoSQL.h 头文件

1 #import

2

3 @interfaceModetoSQL : NSObject4

5 @property(assign,nonatomic)intsid;6 @property(strong,nonatomic)NSString *name;7 @property(assign,nonatomic)intage;8 @property(assign,nonatomic)NSData *image;9

10 //添加信息到数据库

11 +(BOOL)addInfoToSQL:(ModetoSQL *)stu;12

13 //查询数据

14 +(NSMutableArray *)findAllInfo;15

16 //根据条件查找

17 +(ModetoSQL *)finByID:(int)ID;18

19 //删除数据

20 +(BOOL)deleByID:(int)sid;21

22 //根据id更新数据库

23 +(void)updataSQL:(ModetoSQL*)mode;24

25 @end

4. —添加数据库

ModetoSQL.m 文件

1 +(BOOL)addInfoToSQL:(ModetoSQL *)stu2 {3 //1. 打开数据库,返回一个数据库

4 sqlite3 *mmSQL =[SQLDatas openSQL];5

6 //2. 创建一个SQL描述对象

7 sqlite3_stmt *stmt =nil;8

9 //3. 通过数据库语句进行数据库连接操作 表名括号里的参数要喝表格里的一样 如果result 为1,一般都是此语句错误;

10 int result= sqlite3_prepare_v2(mmSQL, "insert into Student(sid,name,age,image) values(?,?,?,?)", -1, &stmt, nil);11 //如果返回为0,则成功,判断准备语句是否有问题

12 if (result ==SQLITE_OK)13 {14 //把四个值准备插入 1 2 3 4对应上面的问号

15 sqlite3_bind_int(stmt, 1, stu.sid);16 sqlite3_bind_text(stmt, 2, [stu.name UTF8String], -1, NULL);17 sqlite3_bind_int(stmt, 3, stu.age);18 //把OC的数据流 转成C语言的二进制流 [stu.imageD bytes]

19 sqlite3_bind_blob(stmt, 4, [stu.image bytes], (int)[stu.image length],nil);20

21 //判断操作是否成功

22 if (SQLITE_DONE ==sqlite3_step(stmt))23 {24 //关闭数据库

25 [SQLDatas closeSQL];26 returnYES;27 }28 }29

30 //如果不成功 返回NO 关闭数据库

31 sqlite3_finalize(stmt);32 returnNO;33 }

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

1 //创建一个模型对象,并赋值

2 ModetoSQL *mode =[ModetoSQL new];3 mode.sid = 1;4 mode.name =@"张三";5 mode.age = 23;6 //把图片转成数据流 添加一张本地图片01.png,png后缀可以去掉,图片的数据流一般都是网络请求的;

7 UIImage *img = [UIImage imageNamed:@"01"];8 //将图片转换成数据流 压缩0.5

9 NSData *imgData = UIImageJPEGRepresentation(img, 0.5);10 mode.image =imgData;11

12 //添加到数据库

13 BOOL isSuc =[ModetoSQL addInfoToSQL:mode];14 NSLog(@"%d",isSuc); //打印判断是否成功15

16 //打印沙盒文件路径 如果不确定数据是否真的添加 可以进入沙盒文件下的Documents查看

17 NSLog(@"%@",NSHomeDirectory());

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

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

d5d8efa7f65a577e874786e68c77dd50.png

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

5. — —查询数据库

ModetoSQL.m

1 +(NSMutableArray *)findAllInfo2 {3 //创建接收信息的数组

4 NSMutableArray *infoArr = [NSMutableArray new];5 //1. 打开数据库,返回一个数据库

6 sqlite3 *mmSQL =[SQLDatas openSQL];7

8 //2. 创建一个SQL描述对象

9 sqlite3_stmt *stmt =nil;10

11 //3. 通过数据库语句进行数据库连接操作

12 int result =sqlite3_prepare_v2(mmSQL, "select *from Student", -1, &stmt, nil);13 if (result ==SQLITE_OK)14 {15 while (SQLITE_ROW ==sqlite3_step(stmt))16 {17 //执行查询操作

18 ModetoSQL *stu =[ModetoSQL new];19 stu.sid =sqlite3_column_int(stmt, 0);//0个位置20 //C语言字符串 转OC字符串

21 stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];22 stu.age =sqlite3_column_int(stmt, 2);23 //将二进制数据流 转OC数据量

24 stu.image = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)];25 //添加进数组

26 [infoArr addObject:stu];27 }28 }29 //关闭数据库

30 [SQLDatas closeSQL];31 returninfoArr;32 }

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

//查找全部信息 创建可变数组接收

NSMutableArray *arr = [NSMutableArray new];

arr=[ModetoSQL findAllInfo];//循环遍历 取出

for (ModetoSQL *mode inarr)

{

NSLog(@"%d",mode.sid);

NSLog(@"%@",mode.name);

NSLog(@"%d",mode.age);

}

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

1 //根据条件查找

2 +(ModetoSQL *)finByID:(int)sid3 {4 ModetoSQL *stu =[ModetoSQL new];5 //1. 打开数据库,返回一个数据库

6 sqlite3 *mmSQL =[SQLDatas openSQL];7 //2. 创建一个SQL描述对象

8 sqlite3_stmt *stmt =nil;9 //3. 通过数据库语句进行数据库连接操作 删除语句里的对象要像对应sID

10 int result = sqlite3_prepare_v2(mmSQL, "select * from Student where sid = ?", -1, &stmt, nil);11 if (result ==SQLITE_OK)12 {13 sqlite3_bind_int(stmt, 1, sid); //id在第一个位置

14 if (SQLITE_ROW ==sqlite3_step(stmt))15 {16 stu.sid =sqlite3_column_int(stmt, 0);17 stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];18 stu.age =sqlite3_column_int(stmt, 2);19 //将二进制数据流 转OC数据量

20 stu.image = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)];21 }22 }23 //关闭数据酷

24 sqlite3_finalize(stmt);25 returnstu;26 }

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

1 //根据条件查找

2 +(NSMutableArray *)finByID:(int)sid3 {4 NSMutableArray *arr =[NSMutableArray new];5

6 //ModetoSQL *stu =[ModetoSQL new];7 //1. 打开数据库,返回一个数据库

8 sqlite3 *mmSQL =[SQLDatas openSQL];9 //2. 创建一个SQL描述对象

10 sqlite3_stmt *stmt =nil;11 //3. 通过数据库语句进行数据库连接操作 删除语句里的对象要像对应sID

12 int result = sqlite3_prepare_v2(mmSQL, "select * from Student where sid = ?", -1, &stmt, nil);13 if (result ==SQLITE_OK)14 {15 sqlite3_bind_int(stmt, 1, sid); //id在第一个位置

16

17 while (SQLITE_ROW ==sqlite3_step(stmt))18 { ModetoSQL *stu = [ModetoSQL new];19 stu.sid =sqlite3_column_int(stmt, 0);20 stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];21 stu.age =sqlite3_column_int(stmt, 2);22 //将二进制数据流 转OC数据量

23 stu.image = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)];24 [arr addObject:stu];25 }26 }27 //关闭数据酷

28 sqlite3_finalize(stmt);29 returnarr;30 }

6. — —删除数据库

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

1 //1. 打开数据库,返回一个数据库

2 sqlite3 *mmSQL =[SQLDatas openSQL];3 //2. 创建一个SQL描述对象

4 sqlite3_stmt *stmt =nil;5 //3. 通过数据库语句进行数据库连接操作 删除语句里的对象要像对应sID

6 int result =sqlite3_prepare_v2(mmSQL, "delete from Student where sid= ?", -1, &stmt, nil);7 if (result==SQLITE_OK)8 {9 sqlite3_bind_int(stmt, 1, sid);10 if (SQLITE_DONE==sqlite3_step(stmt))11 {12 returnYES;13 }14 }15 //关闭数据库

16 sqlite3_finalize(stmt);17 return NO;

7. — —修改数据库

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

1 //根据sid更新数据库

2 +(void)updataSQL:(ModetoSQL *)mode3 {4 //1. 打开数据库,返回一个数据库

5 sqlite3 *mmSQL =[SQLDatas openSQL];6 //2. 创建一个SQL描述对象

7 sqlite3_stmt *stmt =nil;8 //3. 通过数据库语句进行数据库连接操作 删除语句里的对象要像对应sID

9 int result =sqlite3_prepare_v2(mmSQL, "update Student set name = ? ,age = ? ,image = ? where sid = ?", -1, &stmt, nil);10

11 if (result ==SQLITE_OK)12 {13 //数字必须和问号顺序相对应;

14 sqlite3_bind_int(stmt, 4, mode.sid);15 sqlite3_bind_text(stmt, 1, [mode.name UTF8String], -1, nil);16 sqlite3_bind_int(stmt, 2, mode.age);17 sqlite3_bind_blob(stmt, 3, [mode.image bytes], (int)[mode.image length], nil);18 if (sqlite3_step(stmt) ==SQLITE_DONE)19 {20

21 }22 }23 sqlite3_finalize(stmt); //关闭数据库24 }

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值