iOS SQLite语法基础
分享SQLite语句的基础知识,是很基础的部分,只涉及"增","删","改","查"4个语法.不涉及表链接等内容.以后我会更新表链接的随笔.
github上有一个SQL的Demo,包含增删改查. UI如图: url: --- > https://github.com/huyp/SQLite3_Demo.git
使用SQLite,首先要手动导入libsqlite3.tbd库. 点击工程 ---- Build Phases ---- Link Binary With Libraries 点击 + 号,输入libsqlite3. 你会发现两个库libsqlite3.tbd 和 libsqlite3.0.tbd ,导入其中任意一个即可. 这两个库有什么区别呢? 你可以把 libsqlite3.0.tbd 看做是一个快捷方式, libsqlite3.tbd 是真正的库.
使用SQLite之前,你需要先了解一些SQL语句.这里就写一些简单的语句,详细的语法还要认真学习才能掌握.
SQLite使用的是C语言.iOS开发要转成char类型
使用前,导入sqlite3头文件,定义一个数据库
1 #import <sqlite3.h> 2 3 @interface ViewController () 4 5 @property (assign,nonatomic)sqlite3 * database; 6 7 @end 8 9 @implementation ViewController 10 11 @synthesize database;
创建一个学生表格,表格中有ID,name,age三个属性,ID是主键.
创建表格 : create table if not exists t_student (id integer primary key autoincrement, name text, age integer)"
create table : 创建一个表格. if not exists : 如果没有被创建过. t_student : 表格名字. id integer : ID integer类型(整数). primary key : 主键. autoincreament : 自动+1. name text : name 类型(字符串) age integer类型(整数).
1 //把文本框转换成C语言 2 const char * name = [_text1.text UTF8String];//名字 3 const char * age = [_text2.text UTF8String];//年龄 4 //增加一行语句 5 char * sql = "insert into t_student (name, age) values (?,?)"; 6 /** 7 sqlite 操作二进制数据需要用一个辅助的数据类型:sqlite3_stmt * 。 8 这个数据类型 记录了一个“sql语句”。为什么我把 “sql语句” 用双引号引起来?因为你可以把 sqlite3_stmt * 所表示的内容看成是 sql语句,但是实际上它不是我们所熟知的sql语句。它是一个已经把sql语句解析了的、用sqlite自己标记记录的内部数据结构。 9 */ 10 sqlite3_stmt * stmt; 11 12 //这里要执行sqlite语句了 (数据库,SQL语句,-1,&stmt,NULL); 增删改查都是用这一句代码 13 //不同的地方就是sql语句的不同,sqlite3_bind_text()中的值不同而已. 14 int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL); 15 if (result == SQLITE_OK) { 16 sqlite3_bind_text(stmt, 1, name, -1, NULL); 17 sqlite3_bind_text(stmt, 2, age, -1, NULL); 18 } 19 else { 20 NSLog(@"准备失败"); 21 } 22 //检验是否操作完成 23 if (sqlite3_step(stmt) == SQLITE_DONE) { 24 NSLog(@"操作完成"); 25 } 26 else { 27 NSLog(@"操作失败"); 28 } 29 //每次调用sqlite3_prepare 函数sqlite 会重新开辟sqlite3_stmt空间, 30 //所以在使用同一个sqlite3_stmt 指针再次调用sqlite3_prepare 前 31 //需要调用sqlite3_finalize先释放空间 32 sqlite3_finalize(stmt);
向数据库中插入对象: insert into t_student (name, age) values (?,?)
insert into t_student : 向表t_student中插入数据. (name, age) : 数据名. values (?,?) : 值(值1,值2).
1 //把文本框转换成C语言 2 const char * name = "张三";//名字 3 const char * age = "20";//年龄 4 //增加一行语句 5 char * sql = "insert into t_student (name, age) values (?,?)"; 6 sqlite3_stmt * stmt; 7 int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL); 8 if (result == SQLITE_OK) { 9 sqlite3_bind_text(stmt, 1, name, -1, NULL); 10 sqlite3_bind_text(stmt, 2, age, -1, NULL); 11 } 12 else { 13 NSLog(@"准备失败"); 14 } 15 //检验是否操作完成 16 if (sqlite3_step(stmt) == SQLITE_DONE) { 17 NSLog(@"操作完成"); 18 } 19 else { 20 NSLog(@"操作失败"); 21 } 22 //每次调用sqlite3_prepare 函数sqlite 会重新开辟sqlite3_stmt空间, 23 //所以在使用同一个sqlite3_stmt 指针再次调用sqlite3_prepare 前 24 //需要调用sqlite3_finalize先释放空间 25 sqlite3_finalize(stmt);
删除数据库中的对象 : delete from t_student where id = ?
delete from t_sudent : 删除t_student表格中的 删除id = ? 的数据 .
1 int a = [_text1.text intValue]; 2 sqlite3_stmt * stmt; 3 char * sql = "delete from t_student where id = ?"; 4 int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL); 5 if (result == SQLITE_OK) { 6 result = sqlite3_bind_int(stmt, 1, a); 7 if (result == SQLITE_OK) { 8 result = sqlite3_step(stmt); 9 if (result == SQLITE_DONE) { 10 NSLog(@"删除成功"); 11 } 12 else { 13 NSLog(@"删除失败"); 14 } 15 } 16 } 17 else { 18 NSLog(@"删除失败"); 19 } 20 21 sqlite3_finalize(stmt);
更改数据 : update t_student set name = ? where id = ?
update t_student : 更新表格. set name = : 设置名字为. id = 多少的数据.
就是修改id = ? 的名字.
1 const char * ID = [_text1.text UTF8String]; 2 const char * newname = [_text2.text UTF8String]; 3 sqlite3_stmt * stmt; 4 char * sql = "update t_student set name = ? where id = ?"; 5 int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL); 6 if (result == SQLITE_OK) { 7 result = sqlite3_bind_text(stmt, 1, newname, -1, NULL); 8 result = sqlite3_bind_text(stmt, 2, ID, -1, NULL); 9 if (result != SQLITE_OK) { 10 NSLog(@"更新数据有问题"); 11 } 12 if (sqlite3_step(stmt) != SQLITE_DONE) { 13 NSLog(@"更新数据不成功"); 14 } 15 } 16 else { 17 NSLog(@"修改数据失败"); 18 } 19 sqlite3_finalize(stmt);
查询数据库中的所有数据 select id , name , age from t_student
select : 查询. id,name,age : ID,名字,年龄 这三个属性. from t_student : 从t_student这个表格中
1 char * sql = "select id , name , age from t_student"; 2 sqlite3_stmt * stmt; 3 int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL); 4 if (result == SQLITE_OK) { 5 //sqlite3_step(stmt) == SQLITE_ROW 查询时使用 6 while (sqlite3_step(stmt) == SQLITE_ROW) { 7 int ID = sqlite3_column_int(stmt, 0); 8 char * name = (char *)sqlite3_column_text(stmt, 1); 9 NSString * strName = [NSString stringWithUTF8String:name]; 10 int age = sqlite3_column_int(stmt, 2); 11 NSLog(@"%d,%@,%d",ID,strName,age); 12 } 13 } 14 sqlite3_finalize(stmt);
转载于:https://www.cnblogs.com/huyp/p/5139946.html
iOS SQLite语法基础相关推荐
- iOS战记 ----OC基础语法之战(一)
iOS战记 ----OC基础语法之战(一) 一个机械设计者的转行之战. 火车一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面 ...
- Android开发笔记(三十)SQLite数据库基础操作
SQLite语法 SQLite是一个小巧的嵌入式数据库,使用方便.开发简单,手机上最早由ios运用,后来android兴起同样也采用了sqlite.sqlite的多数sql语法与oracle是一样的, ...
- JavaSE笔记(语法基础篇)
文章目录 语法基础篇 第1章 概述 1.1 计算机组成部分 1.2 人机交互方式 1.3 计算机语言 1.4 软件与软件开发 1.5 Java语言介绍 1.6 Java开发环境搭建 1.7 常见错误 ...
- Java基础笔记(入门,语法基础,流程控制,数组)
Java语言入门 发展历程 三大技术体系 JavaSE 标准版 JavaEE 企业版 JavaME 嵌入式版 Java语言特点 简单性 健壮性 面向对象 分布式 多线程 动态性 可移植性(跨平台) J ...
- iOS Core Bluetooth 基础知识
原文:The Utimate Guide to Apple's Core Bluetooth – PunchThrough 本文假设您了解蓝牙低能耗(BLE)和iOS编程的基础知识(包括许多iOS原生 ...
- 给Java初学者福利——Java语法基础
Java代码基本格式 Java中所有程序代码都必须存在于一个类中,用class关键字定义类,在class之前可以有一些修饰符.格式如下: 修饰符 class 类名 { 程序代码 } 注: 1.Java ...
- python语法基础知识总结-python语法基础知识
一.数字类型及操作 1.整数类型 可正可负,无取值范围限制pow(x,y):计算x^y 2.浮点数类型 存在不确定尾数round(x,d):对x四舍五入,d为小数截取位数e/E:a*10^b 3.复数 ...
- VRML语法基础跟简介
VRML语法基础和简介 VRML简介和基础语法 -------------------------------------------- 一.VRML是什么 VRML是虚拟现实造型语言 (Virtua ...
- Web开发(一)·期末不挂之第四章·CSS语法基础(CSS选择器选择器优先级各类样式表的使用方法)
CSS语法基础 一.单纯html控制样式的缺点 二. CSS✪✪✪ CSS概述 CSS基础语法 组成 选择器 标签选择器 类选择器 id选择器 通配选择器 后代选择器 插入样式表的三种方式 行内样式 ...
最新文章
- Nature子刊:微生物来源分析包SourceTracker——结果解读和使用教程
- 最小二乘法和最大似然估计
- atom编辑器的安装
- 可恶,新网互联又出问题了
- C语言动态内存相关函数
- 2019清北学堂学习笔记
- vue项目将token存在(vuex)store和localstorage中
- 代码走查和代码审查_如何避免代码审查陷阱降低生产率
- nosql数据库之Redis集群
- django后台集成富文本编辑器Tinymce的使用
- html js格式化,Js/html格式化在线工具
- Python单例模式
- java 以2为底的对数_Java对数函数及Java对数运算
- printf(“%d \n“,printf(“%d “,printf(“%d “,i)));输出结果?
- 非常漂亮的放焰火效果的Applet程序
- Tomcat多实例与负载均衡
- 关于压缩感知的第一篇论文解析压缩感知研究新思路
- 算法设计与分析—分支限界法应用(头歌实验)
- React学习笔记(八)--- HooK
- CodeGear给卖了