iOS中操作SQLite数据库
来源:互联网 发布:kmp算法next例题 编辑:程序博客网 时间:2024/06/06 00:36
一般数据存储方式
- 文件读写,仅支持四种数据NSString、NSArray、NSDictionary、NSData
- 归档
NSUserDefaults偏好设置
这三种存储方式,要对某个数据作修改,都是整体覆盖操作,效率非常低。
SQLite
优点
- SQLite是以表的形式存数据,类似excel。要修改某一条数据,可以单独对其操作而不需要整体覆盖。
- 轻量级数据库,占用内存小,速度快,
- 跨平台,可以在iOS和安卓通用
命令
SQL:结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
常见的SQL语句有创建(Create),插入(Insert),更新(Update),删除(Delete),查询(Select)
SQLite具体操作
- 我这里用的是火狐浏览器的工具->附加组件中下载的SQLite manager来操作SQLite
创建
- 格式:create table 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型。。。)
- 图示创建一个Person,其中id是为了区别数据,同时要把它设置成主键,好处是主键不能为空,不能重复。写完语句点击Run SQL,就创建成功,左侧表里就多了一个Person
- 点击左侧表里的Person,点击右边structure可以查看结构
- 点击Browse&Search可以查看数据
插入
- 格式:insert into 表名称(列1,列2…)values(值1,值2…)。注意字符串一般用单引号’,双引号也可以
查询
- 格式:select 列名称 from 表名称
- 这里可以用*表示所有列
- 可以加后缀,多个条件
更新
- 格式:update 表名称 set 列名称 = 新值 where 列名称
- 如下把id = 2的列的name改成李四
删除
- 格式:delete from 表名 where 列名
在iOS中集成SQLite
- 手动导入框架:Build Phases ->Link Binary With Libraries -> + ->libsqlite3.0.tbd
- 导入头文件:sqlite3.h
- 一般创建一个管理类SQLiteManager,并且用单例模式
static SQLiteManager *_manager = nil;+ (SQLiteManager *)shareManager{ return [[self alloc] init];}+ (instancetype)allocWithZone:(struct _NSZone *)zone{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _manager = [super allocWithZone:zone]; }); return _manager;}
- 提供一个打开数据库的方法
// 建个指针sqlite3 *ppDb;- (void)open{ // document路径 NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; // 拼接数据库路径 NSString *SQLitePath = [documentPath stringByAppendingPathComponent:@"testSQLite.sqlite"]; // 打开数据库,这里需要把OC的字符串转换成C语言的字符串,第二个参数需要传入一个指针的地址 sqlite3_open(SQLitePath.UTF8String, &ppDb); // 如果成功 if (result == SQLITE_OK)...else // 如果失败}
- 提供一个关闭数据库的方法
- (void)close{ int result = sqlite3_close(ppDb); if (result == SQLITE_OK) ...}
- 创建表的方法
- (void)creatList{ // SQL语句 NSString *sqlString = @"create table Person (id integer,name text,age integer)"; // 执行sql语句 // 第一个参数是sqlite3指针,第二个参数是sql语句,需要转一下,第三个参数是回调,这里直接nul,最后一个参数是错误信息,建个指针传进去 char *error = nil; sqlite3_exec(ppDb, sqlString.UTF8String, nil, nil, &error); // 判断是否出现错误 if (error == nil) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"数据库执行结果" message:@"创建表成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil]; [alertView show]; }else{ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"数据库执行结果" message:@"创建表失败" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil]; [alertView show]; }}
- 插入数据的方法,其中执行sql语句的调用方法都是一样的
- (void)insert{ NSString *sqlString = @"insert into Person (name,age) values ('张三';18)"; char *error = nil; sqlite3_exec(ppDb, sqlString.UTF8String, nil, nil, &error); if (error == nil) 。。。
- 更新数据的方法
- (void)update{ NSString *sqlString = @"update Person set 'name' = '李四' where id = 1"; char *error = nil; sqlite3_exec(ppDb, sqlString.UTF8String, nil, nil, &error); if (error == nil) ...}
- 删除数据的方法
- (void)deleteDate{ NSString *sqlString = @"delete from Person where id = 1"; char *error = nil; sqlite3_exec(ppDb, sqlString.UTF8String, nil, nil, &error); if (error == nil) ... }}
- 查询数据的方法,这里和上面的几个操作不同
- (void)select{ NSString *sqlString = @"select * from Person"; // 准备sql语句 // 第三个参数是sql语句的长度,如果写入sqlString.length会报个警告类型不匹配,我们可以写个-1,这样系统会自动计算长度,第三个参数需要传入一个sql的语句管理者指针,最后一个参数是预留参数 sqlite3_stmt *stmt = nil; sqlite3_prepare(ppDb, sqlString.UTF8String, -1, &stmt, nil); // 单步执行语句 // 判断如果有数据,就执行语句 while (sqlite3_step(stmt) == SQLITE_ROW) { // 根据数据类型获取数据,第一个参数是语句管理者,第二个参数是第几列 int ID = sqlite3_column_int(stmt, 0); const unsigned char *nameText = sqlite3_column_text(stmt, 1); // 把获取到的C语言的字符串转成OC的字符串 NSString *name = [NSString stringWithUTF8String:(const char *)nameText]; int age = sqlite3_column_int(stmt, 2); NSLog(@"ID=%d,name=%@,age=%d",ID,name,age); } // 释放sql语句管理者 sqlite3_finalize(stmt);}
1 0
- iOS中操作SQLite数据库
- IOS sqlite数据库操作
- IOS sqlite数据库操作
- IOS数据库操作(Sqlite)
- IOS-SQLite数据库操作
- ios SQlite操作数据库
- IOS使用sqlite数据库操作
- IOS sqlite数据库升级操作
- iOS FMDB操作sqlite数据库
- android中sqlite数据库操作
- android中SQLite数据库操作
- iOS中使用SQLite数据库
- [转]iOS—数据库操作(SQLite)
- iOS开发-数据库-sqlite操作1
- iOS开发-数据库-sqlite操作2
- ios sqlite数据库的基本操作
- iOS项目笔记-sqlite数据库操作
- iOS上数据库SQLite的简单操作
- leetcode15 3Sum
- 排序算法之Bucket Sort
- 二维数组查询
- samsung s3 gt-19300 开发 键盘回车事件
- 设计模式——行为型模式
- iOS中操作SQLite数据库
- 使用struts2+MySQL做简单的登录验证
- Xcode升级到7.1出现itms-90049 错误 的解决办法
- 2006年浙江大学1019简单计算器代码(栈的使用)
- Jsoup获取网页源代码不一致的问题
- 详解Android中AsyncTask的使用
- 新手程序媛要怎么做
- UITabBarController定制
- JSP/Servlet-----11、Filter