SQLite

SQLite(轻量级的数据库,关系型数据库)

辅助工具:Navicat Premium 等

原理:ios针对存储问题封装了sqlite数据库(c语言数据库).

1 app获取沙盒地址命名数据库文件名  创建数据库

2 执行sq语句,创建数据表

3 执行sq语句,从而进行数据表的增删改查操作。

ps:FMDB基于sqlite3封装了的oc库,是c方法变为oc方法,方便调用,方法参数可以接收sq语句,使之更加灵活。

一:创建数据表(不是数据库哦)  及数据类型

--------------------------------------------------------

--------------------------------------------------------

二:删除数据表

--------------------------------------------------------

三:插入数据 (增)

--------------------------------------------------------

四:更新数据 (改)

--------------------------------------------------------

五:删除数据 (删) 及条件语句)

--------------------------------------------------------

--------------------------------------------------------

六:查询语句 (查)

--------------------------------------------------------

--------------------------------------------------------

--------------------------------------------------------

--------------------------------------------------------

--------------------------------------------------------

--------------------------------------------------------

七:主键/外键

--------------------------------------------------------

--------------------------------------------------------

--------------------------------------------------------

--------------------------------------------------------

INSERT UPDATE DELETE(前三个是数据操作指令) SELETE(数据查询指令)

//英译:insex:索引 query:问题 backup:备份 Refresh:刷新 gender:性别 triggers:触发器 select:查询 avg:平均值 limit:限制 increment:增加 design:设置

数据表命名:通常前缀为"T_"

// 1: INSERT 新增语句(增)

INSERT INTO T_Person(name,age,gender,height)VALUES('王老头',60,1,165);

SQLite语句字符串用''引起

// 2: UPDATE 更新数据库内容(改)

//AND设置与条件 OR设置或条件

UPDATE T_Person SET name='王老五';

UPDATE T_Person SET name='小芳' WHERE gender=1;

UPDATE T_Person SET name='小芳',age=45 WHERE gender=1 AND height=1.65;

// 3: DELETE 删除表记录(删)

DELETE FROM T_Person;//删除表

DELETE FROM T_Person WHERE height=1.8;

// 4: SELECT 查询指令

SELECT *FROM T_Person;//查询数据表

SELECT *FROM T_Person WHERE gender=1;

SELECT *FROM T_Person WHERE age>10 AND gender=0;

SELECT count(*) FROM T_Person;//查询总数

SELECT max(height) FROM T_Person;

SELECT min(age) FROM T_Person;

SELECT avg(height) FROM T_Person WHERE gender=0;

//分页查询,从第几行查询,一共查几行

SELECT *FROM T_Person LIMIT 0,3;

//排序  ASC:升序 DESC:降序

SELECT height,name,gender,age FROM T_Person ORDER BY age ASC,height DESC;

//主键:唯一标示一条记录

-----------------------------------------

"----IOS下使用sqlite3"

在ios中使用SQLite3:需要导入库文件:libsqlit.dylib并添加库的头文件:<sqlite3.h>

//英译: handle:句柄  execute:执行 exist:存在 male:男性的 female:女性的 column:列 prepare:准备 predicate:谓词

//char *将nsstring utf8即可

//回调:某个函数执行完成后,调用的函数

步骤:

1 建立程序与与数据库交互的服务层(Services)

2 单例实现服务层对象

3 重写服务层的init方法,软加载打开数据库

4 实现打开数据库方法

5 沙盒新建空数据库

6 根据是否返回"SQLITE_OK",判断sqlite3_open打开数据库成否(先设置全局数据库句柄,参数:转码数据库,句柄地址)

7 根据是否返回"SQLITE_OK",判断sqlite_exec执行sql语句成否(参数:数据库句柄,传入的转码执行的sql语句,NULL,NULL)

8 创建数据表(就是定义sql语句GREATE TABLE,抄的),执行sql语句看建表是否成功

9 根据INSERT INTO添加模型属性,实现添加用户到数据库,执行sql语句看添加用户是否成功

9 根据是否返回"SQLITE_OK",判断sqlite3_prepare_v2查询数据库是否成功(设置查询句柄,参数:数据库句柄,要查询的转码sql语句,查询句柄地址),根据是否返回@"SQLITE_ROW"判断利用查询句柄依次查询每一行sqlite3_step是否成功,取到每行信息,在查询没每列信息(怎么找到列,是根据字段顺序),将每次查询的各个字段依次赋值到模型的各个属性,将每次产生的模型依次装进可变数组,以便供视图展示使用.

10 模糊查询操作,建立UISearchBar,实现代理方法,通过传入name做模糊查询

NSString->const char * [str UTF8String]

c语言中空为 NULL,打印字符用%s

/*1:打开数据库(sqlite3_open参数:数据库名,句柄)

--沙盒中创建**.db数据库,创建sqlite3 *_db句柄->实现sqlite3_open方法参数:数据库文件名(UTF8转码),句柄(**写地址)->方法的返回值是int,判断是否等于SQLITE OK 成功为打开成功,反之失败

2:创建数据表

--NSString *sql=@"根据cat自动生成的代码修改",执行SQL语句,看看成功与否

3:执行SQL语句(sqlite3_exec参数:句柄,sql语句,null,null,错误地址)

--判断是否返回SQLITE_OK,来判断数据表是否创建成功

 static sqlite3 *_db;
+ (void)initialize
{ // 0.获取沙盒地址
NSString *docPth = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *filePath = [docPth stringByAppendingPathComponent:@"student.sqlite"];
// 1.创建数据库(使用open方法, 如果数据库文件不存储会自动创建并打开数据库, 如果数据文件存储仅仅打开数据)
int result = sqlite3_open(filePath.UTF8String, &_db);
if (result == SQLITE_OK) {
NSLog(@"打开成功"); // 1.1创建表添加字段
char *sql = "CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score REAL);";
char *error;
sqlite3_exec(_db, sql, NULL, NULL, &error);
if (error) {
NSLog(@"创建表失败");
}else
{
NSLog(@"创建表成功");
}
}else
{
NSLog(@"打开失败");
} }

4:增加用户(增)

--创建要添加(INSERT INTO)的sql语句,执行sql语句,看成功与否

- (IBAction)insertBtnClick {
for (int i = ; i < ; i++) {
NSString *name = [NSString stringWithFormat:@"Jonathan - %d", i];
int score = arc4random_uniform(); CZStudent *stu = [[CZStudent alloc] init];
stu.name = name;
stu.score = score;
BOOL result = [CZStudentTool addStudent:stu]; if (result) {
NSLog(@"插入成功");
}else
{
NSLog(@"插入失败");
}
} }
//插入数据
+ (BOOL)addStudent:(CZStudent *)stu
{ NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student(name, score) VALUES('%@', %.1f);", stu.name, stu.score]; char *error;
sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &error);
if (error) {
// NSLog(@"插入失败");
return NO;
}else
{
// NSLog(@"插入成功");
return YES;
} return NO;
}

5:更新用户(改)

6:删除用户(删)

7:查询用户(查)

//查询数据
+ (NSArray *)students
{
NSMutableArray *models = nil; char *sql = "SELECT id, name, score FROM t_student;"; sqlite3_stmt *stmt;// 保存查询到的数据
// 第三个参数是sql语句字符串的长度,只要写一个小于0的数, 系统会自动计算
// sqlite3_prepare_v2准备查询, (检测是否有语法错误)
int result =sqlite3_prepare_v2(_db, sql, -, &stmt, NULL);
// 判断是否准备成功
if (SQLITE_OK == result) {
NSLog(@"查询成功");
models = [NSMutableArray array]; // 提取查询到的数据
while (sqlite3_step(stmt) == SQLITE_ROW)
{
int ID = sqlite3_column_int(stmt, );
const unsigned char *name = sqlite3_column_text(stmt, );
double score = sqlite3_column_double(stmt, );
// NSLog(@"%d %s %.1f", ID, name, score); CZStudent *stu = [CZStudent alloc];
stu.ID = ID;
stu.name = [NSString stringWithUTF8String:name];
stu.score = score; [models addObject:stu];
} }else
{
NSLog(@"查询失败");
} return models; }

--创建要查询的语句(SELECT FROM),判断是否返回SQLITE OK,检查语法是否正确(sqlite3_prepare_v2)参数:句柄,查询语句,byte(-1),查询句柄地址(根据此句柄依次获得查询记录)->根据句柄依次查询每行记录->查询成功返回SQLITE ROW->逐一获取每一列信息

if(SQLITE_ROW == sqlite3_step(stmt))

int ID = sqlite3_column_int(stmt, 0);//0为顺序

*/

//设计模式(MVC)

Controller->View

|

Model(Plist/SQLite3)

|

Services(服务层)

|

DB/Plist

//UISearchBar坚挺文本交互信息

textDidChange

//模糊查询 LIKE %%%@%%

//SQLite的dynamic libaray not found!的解决办法

打开终端

输入 cd Desktop,进入桌面

输入 sqlite3 my.db

会进入sqlite3的命令行

输入 .tables,可以创建my.db数据库文件

输入.quit,退出sqlite3的命令行

然后再Navicat中,选择现有数据库,并选择刚刚创建的数据库文件即可.

数据存储--sqlite总结的更多相关文章

  1. 4、安卓数据存储——sqlite

    朋友圈里的每一个消息体里面的数据,当下拉刷新从服务器下载数据包后,存入sqlite:用户名.图片url.点赞.评论等等.上拉加载的时候,从数据库里取出最近的5条数据加载到朋友圈上. Android通过 ...

  2. Android数据存储——SQLite数据库(模板)

    本篇整合Android使用数据库,要保存一个实体类的样本. 首先看一下数据库语句: ORM:关系对象映射 添加数据: ContentValues values = new ContentValues( ...

  3. Unity本地数据存储---Sqlite和JSON

    2014-05-04更新 SqliteDatabase.cs这个文件的初始方法有问题,具体是如果指定URL已经存在了DB文件,就不会重新覆盖DB文件. 这导致我们修改之后的DB文件无法产生效果. 本人 ...

  4. Android笔记(四十四) Android中的数据存储——SQLite(六)整合

    实现注册.登录.注销账户 MainActivity.java package cn.lixyz.activity; import android.app.Activity; import androi ...

  5. Android笔记(四十三) Android中的数据存储——SQLite(五)delete

    SQLite通过delete()方法删除数据 delete()方法参数说明: delete()方法参数 对应sql部分 描述 table delte from table_name 要删除的表 whe ...

  6. Android笔记(四十二) Android中的数据存储——SQLite(四)update

    update方法的四个参数: update()方法参数 对应的sql部分 描述 table update table_name 更新的表名 values set column=xxx ContentV ...

  7. Android笔记(四十一) Android中的数据存储——SQLite(三)select

    SQLite 通过query实现查询,它通过一系列参数来定义查询条件. 各参数说明: query()方法参数 对应sql部分 描述 table from table_name 表名称 colums s ...

  8. Android笔记(四十) Android中的数据存储——SQLite(二) insert

    准备工作: 我们模拟一个注册的页面,先看UI 我们需要创建一个数据库:user,数据库包含表user,user表包含字段id.username.password.mobilephone MainAct ...

  9. 数据存储--SQLite

    SQLite是一个开源嵌入式关系数据库,实现自包容,零配置,单个文件就是数据库,方便存储和转移,在window不用安装,直接解压到文件夹,并设置path. Ubuntu下安装:sudo apt ins ...

随机推荐

  1. 关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条

    关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条 关于<iframe>可以通过设置属性scrolling="no" 去掉iframe的两个滚动条. 如何只去掉水 ...

  2. Java中Runnable和Thread

    java中有两种实现多线程的方式:一种是继承Thread类,一种是实现Runnable接口. 1.java启动线程为什么使用start函数呢? 在JDK的安装路径下,src.zip是全部的java源程 ...

  3. iOS开发——UI进阶篇(九)block的巧用

    前面有提到通知.代理.kvo等方法来协助不同对象之间的消息通信,今天再介绍一下用block来解决这个问题 接着前面的例子 这里将功能在复述一遍 我把用block和通知放在一起比较,当然代理和kvo如何 ...

  4. 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。

    split() 方法将字符串分割为字符串数组,并返回此数组. stringObject.split(separator,limit) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...

  5. javascript中数组concat()join()split()

    concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 所以 <script type="text/javascript" ...

  6. Android中的四种动画(一)

    TweenAnimation 变换动画(也叫作"补间动画"),有四种(alpha scale translate rote). FrameAnimation(也叫DrawableA ...

  7. JVM(java 虚拟机)内存设置

    一.设置JVM内存设置 1. 设置JVM内存的参数有四个: -Xmx   Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定: -Xms   Ja ...

  8. php中set_time_limit()函数运用

    当你的页面有大量数据时,建议使用set_time_limit()来控制运行时间,默认是30s,所以需要你将执行时间加长点. 如 set_time_limit(800)  ,其中将秒数设为0 ,表示持续 ...

  9. Sublime text2 插件推荐

    HTML-CSS-JS Prettify:  前端插件,使用 ctrl+shift+h 格式化代码

  10. python程序打包成.exe----pyinstaller工具

    1. 环境 windows 2. 安装 准备文件:PyWin32 or pypiwin32 运行如下安装命令:  pip install pyinstaller==3.0 不要使用3.2版本,编译完成 ...