iOS- SQLite3的基本使用
- iOS- 简单说说iOS移动客户端SQLite3的基本使用
- 1.为什么要使用SQLite3?
-
•大量数据需要存储•管理数据,存储数据SQLite是一种关系型数据库(也是目前移动客户端的主流数据库)2.SQLite3的几种存储类型a.NULL: 表示该值为NULL值b.INTEGER: 无符号整型值c.REAL: 浮点值d.TEXT: 文本字符串e.BLOB: 二进制数据(比如文件)•实际上SQLite是无类型的,建表时声明或不声明类型都可以,也就意味着创表语句可以这么写:create table t_student(name, age);但为了保持良好的编程规范,方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型3.SQLite3的具体实现3.1•在iOS中要使用SQLite3,需要添加库文件:libsqlite3.dylib并导入主头文件,这是一个C语言的库3.2创建数据库(sqlite3_opendb)复制代码1 // 设置沙盒中的文件路径2 // 提示:在自己开发中,不要用.db结尾的sqlite数据库文件名3 NSString *dbPath = [@"readme.db" appendDocumentDir];4 NSLog(@"%@", dbPath);56 /**7 sqlite3_open89 1) 如果数据库存在,直接打开10 2) 如果数据库不存在,先创建数据库文件,再打开11 */12 _db = NULL;1314 if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {15 NSLog(@"数据库打开成功");16 } else {17 NSLog(@"数据库打开失败");18 }复制代码3.31.单步执行操作(sqlite3_exec)复制代码#pragma mark 单步执行SQL- (void)execSQL:(NSString *)sql message:(NSString *)message{// 执行SQL语句char *errmsg = NULL;if (SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {NSLog(@"%@成功!", message);} else {// C语言中字符串输出应该用%sNSLog(@"%@失败 - %s", message, errmsg);}}复制代码2.创建数据表复制代码1 // 1. 检查沙盒,判断数据库文件是否存在,如果存在就不再建表;2 // 2. 数据库的方法:IF NOT EXISTS,放在表名之前即可3 // 定义SQL语句4 NSString *sql = @"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, gender INTEGER, age INTEGER, height REAL)";56 [self execSQL:sql message:@"创建数据表"];复制代码4.插入数据1 // 1. SQL2 NSString *sql = [NSString stringWithFormat:@"INSERT INTO T_Person (name, gender, age, height) VALUES ('%@', %d, %d, %f)", person.name, person.gender, person.age, person.height];34 [self execSQL:sql message:@"新增个人记录"];5.更新数据复制代码1 //修改2 - (void)updatePerson:(Person *)person{345 NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID];67 [self execSQL:sql msg:@"修改"];89 }复制代码6.删除数据复制代码1 //删除2 - (void)removePerson:(NSInteger)personID{345 NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID];67 [self execSQL:sql msg:@"删除"];89 }复制代码7.查询操作–sqlite3_prepare_v2检查sql的合法性–sqlite3_step逐行获取查询结果–sqlite3_coloum_xxx获取对应类型的内容–sqlite3_finalize释放stmt复制代码1 // 1. SQL2 NSString *sql = @"SELECT id, name, age, gender, height FROM T_Person";34 // 2. 查询语句通常是使用字符串拼接出来的5 // 因此,在正常使用查询语句之前,需要检查SQL语句的语法正确!6 sqlite3_stmt *stmt = NULL;78 if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {9 NSLog(@"语法正确");10 // 利用句柄,逐一查询符合条件的数据11 // sqlite3_step 每次提取一条查询的记录行,不断重复,一直取到最后一条记录位置12 while (SQLITE_ROW == sqlite3_step(stmt)) {13 // 取到行信息,逐一获取每一列的内容14 // iCol对应的就是SQL语句中字段的顺序,从0开始15 // 根据实际查询字段的属性,使用sqlite3_column_xxx取得对应的内容即可16 int ID = sqlite3_column_int(stmt, 0);17 const unsigned char *name = sqlite3_column_text(stmt, 1);18 int age = sqlite3_column_int(stmt, 2);19 int gender = sqlite3_column_int(stmt, 3);20 CGFloat height = sqlite3_column_double(stmt, 4);2122 // const unsigned char *直接输出看不出结果,需要转换23 NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];2425 Person *p = [Person personWithID:ID name:nameUTF8 age:age gender:gender height:height];2627 NSLog(@"%@", p);28 }29 } else {30 NSLog(@"语法错误");31 }复制代码
iOS- SQLite3的基本使用的更多相关文章
- iOS sqlite3 的基本使用(增 删 改 查)
iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...
- iOS sqlite3数据库解析
看来从版本3.3.1基本上已经支持线程句柄的传递功能.具体限制我标记了一下.(6) Is SQLite threadsafe?SQLite is threadsafe. We make this co ...
- iOS Sqlite3 Demo 及 FMDB Demo
本文是主要实现了三个函数: testSQLite3 是测试系统自带的sqlite3的demo testFMDB是测试FMDB存取简单的数据类型的 的demo testFMDB2是将任意对象作为一个整体 ...
- ios sqlite3的简单使用
第一:创建表格 //创建表格 -(void)creatTab{ NSString*creatSQL=@"CREATE TABLE IF NOT EXISTS PERSIONFO(ID INT ...
- iOS——sqlite3的使用(iOS嵌入式关系数据库)
1>添加sqlite3动态库:libsqlite3.dylib,CoreGraphics.framework,UIKit.framework,Foundation.framework 2> ...
- iOS SQLite3的使用
1.创建可修改的数据库文件 //应用包内的内容是不可写的,所以需要把应用包内的数据库拷贝一个副本到资源路径去 - (void)createEditableDatabase{ BOOL success; ...
- iOS FMDB的使用(增,删,改,查,sqlite存取图片)
iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...
- iOS数据持久化-OC
沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...
- iOS 数据存储之SQLite3的使用
SQLite3是iOS内嵌的数据库,SQLite3在存储和检索大量数据方面非常有效,它使得不必将每个对象都加到内存中.还能够对数据进行负责的聚合,与使用对象执行这些操作相比,获得结果的速度更快. SQ ...
- IOS 使用wxsqlite3为sqlite3数据库加密
1,下载wxsqlite3 地址http://jaist.dl.sourceforge.net/project/wxcode/Components/wxSQLite3/wxsqlite3-3.1.1. ...
随机推荐
- CMake编译linux C++
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...
- USB的四种传输类型
USB协议规定了4种传输类型:批量(bulk)传输,等时传输(同步传输),中断传输和控制传输.
- listview的tag
tag,记录一行数据的唯一标识,小DEMO: lsShow.Items.Add("洗衣机"); lsShow.Items[].Tag = "我不愿让你一个人"; ...
- hdu1166-敌兵布阵(线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=1166 区间更新,区间求和 // File Name: hdu1166.cpp // Author: bo_jwo ...
- CodeForces 709A Juicer (水题, 模拟)
题意:给定 n 个桔子的大小,一个杯子的容积,一个最大限度,挨着挤桔子汁,如果大小大于限度,扔掉,如果不杯子满了倒掉,问你要倒掉多少杯. 析:直接按要求模拟就好,满了就清空杯子. 代码如下: #pra ...
- Android 通过ViewFlipper实现广告轮播功能并可以通过手势滑动进行广告切换
为了实现广告轮播功能,在网上找了很多方法,有的效果很好,但是代码太麻烦,并且大多是用的viewpager,总之不是很满意. 于是看了一下sdk有个控件是ViewFlipper,使用比较方便,于是尝试了 ...
- 专门查看阻塞和死锁情况以及引起的SQL语句,你可以创建后,直接运行之。
CREATE procedure sp_who_lock as begin declare @spid int declare @blk int declare @count int declare ...
- 20140102-lua binder另一只轮子的雏形
书接上一回,说到要继续丰富对类型的处理.那么如何才能做到呢,应该是要支持自定义的,所以这一回要讲的就是在前面的基础上,增加支持自定义部分,其中包含以下几个部分 函数的默认参数设置,包括有几个默认参数和 ...
- 网页布局:float与position的区别
网页开发中布局是一个永恒的话题.巧妙的布局会让网页具有良好的适应性和扩展性.css的布局主要涉及两个属性——position和float.它们俩看上去很容易被弄混,可是仔细分析一下,它们的区别还是很明 ...
- Spring Bean生命周期
1.Bean的建立:BeanFactory容器寻找Bean的定义信息,读取Bean定义文件,并将其实例化,生成各个Bean实例.2.属性注入:使用依赖注入,Spring按照Bean定义信息配置Bean ...