sqlite数据库相关总结
1.
sqlite是轻量型、关系型管理系统,是嵌入式的,占用资源低、可移植性强,比mySql处理速度快,现在主流的版本是sqlite3
2.
sqlite中的数据类型有TEXT(字符串,采用UTF-8,UTF-16编码)、(REAL)浮点型、(INTEGER)有符号的整型、(BLOB)大二进制数据,能存放任何二进制数据、还有其他几个不常用的( (VARCHAR、CHAR、CLOB)会转化成TEXT的类型 (FLOAT DOUBLE)转化成REAL类型 (NUMERIC)转化成INTEGER)
注:sqlite中没有布尔型,可以用integer的0和1代替,也没有时间和日期的类型,可以用TEXT,REAL等代替
3.
常用的基本的sql语句有:
------创建表:
creat table 表名 (字段1,字段2,字段3.......);
-------如果表不存在,再创建
creat table if not exists 表名 (字段1,字段2,字段3.......)
--------删除整张表:
drop table 表名
--------插入数据:
insert into 表名 (字段1,字段2,字段3.......)values (值1,值2,值3......)
---------查询:
select 字段名 from 表名 ---------》查询某一字段的数据
select * from 表名 ---------》查询所有字段的所有数据
----------修改:
update 表名 set 字段名 = '新值' where 查询条件
4.写代码之前需要在link frameWorks and libraries 里面添加sqlite3的动态库,在数据库相关操作的类中添加头文件,就可以了。
一般数据库我们要在沙盒的document文件夹下创建一个文件,来作为数据库的保存路径。
5.创建sqlite3 * db 这样一个数据库的对象。sqlite是c语言的类库,函数都为c语言的函数
打开数据库的方法:
sqlite3_open([filePath UTF8String], &DB); -------------》第一个参数为数据库的存储路径,第二个参数为数 据库取地址,是有返回值的,若返回值为SQLITE_OK即打开成功。
如果数据库打开成功,就可以创建表了,先写sql语句,再用执行函数进行执行:
例如:
NSString * creatSql = @"CREATE TABLE IF NOT EXISTS StudentNum (idNum TEXT PRIMARY KEY,name TEXT);";
char * err;
/**
第一个参数 DB对象
第二个参数 sql语句
第三个和第四个参数 回调函数和回调函数传递的参数
第五个参数 是一个错误信息
*/
if (sqlite3_exec(DB, [creatSql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
//失败
}else{
//创建表成功
}
在打开数据库、创建表失败等的情况下 也需要关闭数据库,也可以抛出错误信息:
sqlite3_close(DB);
NSAssert(NO, @"创建表失败");
最后数据库操作完毕之后也要关闭数据库
6.查询数据:
在数据库打开成功的情况下就可以进行查询了。
这条sql语句中的?是占位符。
NSString * sql = @"SELECT idNum,name FROM StudentNum where idNum = ?";
sqlite3_stmt * statement;//语句对象
//预处理函数
/*
第一个参数:数据库对象
第二个参数:sql语句
第三个参数:执行语句的长度-1指全部长度
第四个参数:语句对象
第五个参数:没有执行的语句部分
*/
if (sqlite3_prepare_v2(DB, [sql UTF8String], -1, &statement, NULL) == SQLITE_OK) {
NSString * idNum = model.idNum;
//绑定函数,绑定占位符要代替的内容
/*
第一个参数:语句对象
第二个参数:数据开始执行的序号
第三个参数:我们要绑定的值
第四个参数:绑定的字符串的长度
第五个参数:指针 NULL
*/
sqlite3_bind_text(statement, 1, [idNum UTF8String], -1, NULL);
//遍历去查询结果 返回值为SQLITE_ROW时代表查询出结果了,但是不能保证所有的数据都遍历了
if (sqlite3_step(statement) == SQLITE_ROW) {
//提取数据
/*
第一个参数:语句对象
第二个参数:字段的索引
*/
char * idNum = (char *)sqlite3_column_text(statement, 0)
;
NSString * idNumStr = [[NSString alloc]initWithUTF8String:idNum];
char * name = (char *)sqlite3_column_text(statement, 1);
NSString * nameStr = [[NSString alloc]initWithUTF8String:name];
studentModel * selectModel = [[studentModel alloc]init];
selectModel.idNum = idNumStr;
selectModel.name = nameStr;
//查询到数据之后释放语句对象,并关闭数据库
sqlite3_finalize(statement);
sqlite3_close(DB);
}
}
相同,当打开数据库失败的时候也是要关闭数据库,抛出异常语句
增删改的顺序和上面查询的代码顺序是一样的,先打开数据库,然后进行预处理,然后绑定,然后遍历数据,然后提取数据,然后释放对象、关闭数据库。
sqlite数据库相关总结的更多相关文章
- android中与SQLite数据库相关的类
为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...
- Android Sqlite数据库相关——实现将 Sqlite 数据库复制到SD 卡
确定 sqlite 数据库所在位置(一般在data/data/com.pagename/databases/ 下,其中 com.pagename为当前项目包名) 确定 sqlite 数据库名称,拼接到 ...
- Android——SQLite/数据库 相关知识总结贴
android SQLite简介 http://www.apkbus.com/android-1780-1-1.html Android SQLite基础 http://www.apkbus.com/ ...
- sqlite 数据库 相关知识
一基本简单介绍 SQLite 是一个自持的(self-contained).无server的.零配置的.事务型的关系型数据库引擎.由于他非常小,所以也能够作为嵌入式数据库内建在你的应用程序中. SQL ...
- SQLite数据库相关操作
一.创建数据库 这里创建了note便签数据表,字段有noteId.noteTitle.noteTime.noteInfo ); // TODO Auto-generated constructor ...
- Android Sqlite数据库相关——实现 Sqlite 数据库版本升级
继承SQLiteOpenHelper类后,实现其中的onUpgrade 方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVer ...
- 【Win 10 应用开发】Sqlite 数据库的简单用法
如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...
- Android之SQLite数据库使用
转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...
- Android数据库相关整理
今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅.主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一.原生数据库 ...
随机推荐
- ASM:《X86汇编语言-从实模式到保护模式》第16章:Intel处理器的分页机制和动态页面分配
第16章讲的是分页机制和动态页面分配的问题,说实话这个一开始接触是会把人绕晕的,但是这个的确太重要了,有了分页机制内存管理就变得很简单,而且能直接实现平坦模式. ★PART1:Intel X86基础分 ...
- Git学习总结
master主分支合并dev分支,代码 :git merge dev ,跳出如下界面.输入:wq,(:wq命令是LINUX命令,强制写入文件并结束),可以强制合并.但为什么会跳出该界面,我也没搞清楚. ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- button按钮波纹,箭头特效css
波纹特效: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- mybatis动态sql
MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素. if choose(when,otherwise) trim(where,set) foreach 例子(2): &l ...
- Java基本数据类型与位运算
>>赋值运算符 赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个值就行).但左值必须是一个明 ...
- linux日志文件
linux日志文件 在系统运行正常的情况下学习了解这些不同的日志文件有助于你在遇到紧急情况时从容找出问题并加以解决. /var/log/messages — 包括整体系统信息,其中也包含系统启动期间的 ...
- Zookeeper分布式集群搭建
实验条件:3台安装linux的机子,配置好Java环境. 步骤1:下载并分别解包到每台机子的/home/iHge2k目录下,附上下载地址:http://mirrors.cnnic.cn/apache/ ...
- CodeForces 444C 分块
题目链接:http://codeforces.com/problemset/problem/444/C 题意:给定一个长度为n的序列a[].起初a[i]=i,然后还有一个色度的序列b[],起初b[i] ...
- jquery 使用需要注意
jquery选择器,层选择器等多个选择器,jquery生成对象,jquery遍历对象, jquery ajax调用不要进行方法封装返回值方式调用,会取不到值. jquery使用要注意很多细节点才能将其 ...