iOS SQLite3数据库操作

iOS中数据持久化分为四种:属性列表、对象归档、SQLite3和Core Data,SQLite3数据库操作是一个必不或缺的技术。

SQLite3简介

SQLite3数据库是移动端(iOS、Android、嵌入式)上认定的关系型数据库,与MySQL、Oracle等数据库相比,具有轻量级的优势,这就造成了体积小、迅速、简单功能依旧强大等优势。

SQLite3语句特点

  • 不区分大小写
  • 每一句以;结尾

SQLite字段类型

  • integer:整型
  • real:浮点值
  • text:文本字符串
  • blob:二进制类型

    注意:严格意义上说,SQLite字符类型是没有类型,即integer类型的也能存储其他类型的。但为了编程规范,建议严格遵守各个类型

SQLite3语句的种类

DDL语句(create、drop)

创表

create 表名(字段名1 字段类型,字段名2 字段类型,字段名3 字段类型,....);
create table t_Student(id integer name text,age integer,addr text);

拓展:

主键约束

为了方便准确记录数据便于区分每组数据,保证每组数据中有唯一区别的地方就需要添加一个主键约束用来标识记录的唯一性

create table t_Student(id integer primary key autoincrement name text,age integer,addr text);
autoincrement 自动增长

简单约束

  • not null :规定字段的值不能为null
  • unique:规定字段的值必须唯一
  • default:指定字段的默认值

删表

drop table 表名;
drop table t_Student;

DML语句(insert update delete)

insert into 表名(字段1,字段2,字段3,...)values(字段1的值,字段2的值,字段3的值,...);
insert into t_Student(name,age,addree)values('唐伯虎',788,'宋朝');
update 表名 set 字段1= 字段1的值 where 条件;
update t_Student set age = 1000 where name='唐伯虎';
delete from 表名 where 条件;
delete from t_Student where age < 100;

DQL语句(select)

select 字段1,字段2,...from表名;
select *from 表名;
select * from t_Student;
select name,age,addree from t_Student;
select name from t_Student where age<100;
select count(字段)from 表名;
select count(*)from t_Student;
select count(age)from t_Student;

其他边角知识点

  • 创建表时加 if not exists 是为了防止重复创建表,当表存在就不会创建表,若不存在就会创建,类似变量的懒加载
  • 条件句中where 字段可以用>、<、=、is、!=、is not、or、and、它们表达的意思跟上学时代的英语数学课堂意思一样,再这里不再赘述。
  • as可以给表起别名,利用点语法可以访问表内的字段

让我们创建一个信息系统吧

技术准备

sqlite3          *db, 数据库句柄,跟文件句柄FILE很类似

sqlite3_stmt      *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句

sqlite3_open(),   打开数据库,没有数据库时创建。

sqlite3_exec(),   执行非查询的sql语句

sqlite3_bind_text(),设置占位符的内容

sqlite3_prepare_v2(),检测查询语句合法性

Sqlite3_step(), 在调用sqlite3_prepare后,使用这个函数在记录集中移动。

Sqlite3_close(), 关闭数据库文件

sqlite3_column_text(), 取text类型的数据。

sqlite3_column_blob(),取blob类型的数据

sqlite3_column_int(), 取int类型的数据
  1. 创建工程、添加sqlite3类库包
  2. 在storyboard中添加几个控件

    3.
//在沙盒中创建数据库
    NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];
    int result =sqlite3_open(filename.UTF8String,&db);
    if (result==SQLITE_OK) {
        NSLog(@"成功创建数据库并打开");
     //创建一个张表
        const char *sql="create table if not exists t_Student(id integer primary key autoincrement,name text,age integer,addr text);";
        char *errorMesg=NULL;
        int result=sqlite3_exec(db,sql,NULL,NULL,&errorMesg);
        if (result==SQLITE_OK) {
            NSLog(@"成功创建表");
        }
        else
        {
            NSLog(@"创建表失败%s",errorMesg);
        }

        }
    else
    {
        NSLog(@"打开数据库失败");
    }
  1. 增加数据
 NSString *sql=[NSString stringWithFormat:@"insert into t_Student(name,age,addr)values(%@,%@,'%@');",_nameTF.text,_ageTF.text,_addreeTF.text];
    char *errorMesg=NULL;
    int result=sqlite3_exec(db,sql.UTF8String,NULL,NULL,&errorMesg);
    if (result==SQLITE_OK) {
        NSLog(@"添加成功");
    }
    else
    {
        NSLog(@"添加失败%s",errorMesg);
    }
  1. 查询数据
const char *sql = "select * from t_Student;";
    // 2.定义一个stmt存放结果集
    sqlite3_stmt *stmt = NULL;
    // 3.检测SQL语句的合法性
    int result = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"查询语句是合法的");
        sqlite3_bind_text(stmt,1,"student",-1,NULL);
        while (sqlite3_step(stmt)==SQLITE_ROW) {
            int sid=sqlite3_column_int(stmt,0);
            const unsigned char *sname=sqlite3_column_text(stmt,1);
            int sage=sqlite3_column_int(stmt,2);
            NSLog(@"%d,%s,%d",sid,sname,sage);
        }
    }
    else
    {
        NSLog(@"查询语句不合法");
    }

Demo地址为:点击进入下载

SQLite3可视化工具

  • Navicat Premium

Navicat Premium 内部集成了SQLite3可以很友好的进行数据的创建,增添、修改、删除等操作。
下面介绍一下 Navicat Premium的用法(由于CSDN上传附件不能超过60M需要Navicat Premium软件的可以在下面给我留言,私下发给你)
1. 打开Navicat Premium 软件
2. 点击左上角选择SQLite选项 ,在对话框上填写数据库名字选择数据类型、数据库存放地址,如下图:

点击OK。
3.点击main下的Tables,右击选择New Table创建一个表文件

注意:

  1. id 设置为Key(唯一标示),并勾选了Auto increment自增长按钮
  2. age设置了默认值为20,如果不输入数字就初始化为默认值

4.点击按钮后设置表的名字为t_Student
5.双击t_Student后点击 +号 添加几组数据

可以观察到我们不为id和age赋值的时候会有默认值
另外我们还可以用数据库语句创建表和添加数据以及查询数据

INSERT into t_Student(name,age,addree)VALUES('乔布斯',64,'苹果公司')

时间: 2024-08-03 11:33:50

iOS SQLite3数据库操作的相关文章

Python SQLite3数据库操作类分享_python

接触Python时间也不是很长的,最近有个项目需要分析数据,于是选用Python为编程语言,除了语言特性外主要还是看重Python对于SQLite3数据库良好的支持能力了,因为需要灵活处理大量的中间数据. 刚开始一些模块我还乐此不疲的写SQL语句,后来渐渐厌倦了,回想到以前捣鼓C#的时候利用反射初步构建了个SQL查询构造器,直到发现linq,于是放弃了这个计划,当然微软后来又推出了Entity Framework,这些都是后话了,而且现在我对微软的东西兴趣不是很大的,好了,扯多了,下面继续正文.

使用 SQLiteManager 操作 sqlite3 数据库

SQLiteManager   https://github.com/misato/SQLiteManager4iOS       本人以前从事过嵌入式开发,后来转职为iOS开发,即使如此,也绝不想去碰C语言级别的面向过程的 sqlite3 来操作数据库,做高级语言开发还去折腾面向过程的东西,一个小小的nil没判断好就导致程序崩溃, 这就是 sqlite3 APIs 给你带来的问题,只有封装成面向对象的接口才有可能会去用.有一个封装得挺好的 FMDB 是不二的选择,但这个 SQLiteManag

iOS数据库操作之FMDB

SQLite一种轻量级关系数据库,在嵌入式系统中使用比较广泛. 在iOS中使用SQLite需要添加库libsqlite3.0.dylib,并引入头文件#import <sqlite3.h> FMDB对sqlit接口进行了高级封装,使用上更加友好简洁. https://github.com/ccgus/fmdb FMDB包含以下文件: FMDatabase.h FMDatabase.m FMDatabaseAdditions.h FMDatabaseAdditions.m FMDatabaseP

iOS学习笔记(十六)——详解数据库操作(使用FMDB)_IOS

iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁.易用的封装库,这一篇文章简单介绍下FMDB的使用. 在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包. FMDB同时兼容ARC和非ARC工

iOS - SQLite 数据库存储

1.SQLite 数据库 SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库.它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了.他的处理速度比 Mysql.PostgreSQL 这两款著名的数据库都要快.数据库的存储和 Excel 很像,以表(table)为单位.表由多个字段(列.属性.column)组成,表里面的每一行数据称为记录.数据库操作包含打开数据库.创建表,表的增.删.改.查. SQL(Structured Query La

SQLite数据库操作实践

 SQLite数据库操作实践 SQLite存储类型 null - 空值  integer - 有符号整数,自增列定义 id integer primary key autoincrement real - 浮点数,存储为8-byte IEEE浮点数  text - 文本字符串 使用数据库编码(UTF-8, UTF-16BE 或 UTF-16LE)进行存储 blob - 二进制数据,如图片.声音等等  也可以接受其它数据类型例如datetime,varchar,nvarchar,decimal,f

[学习收藏]SQLite数据库操作学习

用Python进行SQLite数据库操作 原文参见:http://www.cnblogs.com/yuxc/archive/2011/08/18/2143606.html 简单的介绍       SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Window

ios coredata数据操作-iOS coredata数据操作

问题描述 iOS coredata数据操作 各位大大求指导:用coredata做个新闻类的APP,每次从服务器上请求的数据和本地coredata里面的数据进行对比(有一个专门id来区别每条信息),如果有相同的id就不对本地数据进行更新,如果本地coredata的数据库里面没有从网上请求最新的id,删除本地数据,插入新id的数据. 最终结果就是本地数据库信息条数不会变化,求指导

iOS开发数据库篇—SQLite简单介绍

一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyedArchiver (2)偏好设置:NSUserDefaults (3)Plist存储:writeToFile 提示:上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题. 举例:使用归档 两个问题: (1)数据的存取都必须是完整的,要求写入的时候要一次性写入,读取的时候要一次性