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数据库相关总结的更多相关文章

  1. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  2. Android Sqlite数据库相关——实现将 Sqlite 数据库复制到SD 卡

    确定 sqlite 数据库所在位置(一般在data/data/com.pagename/databases/ 下,其中 com.pagename为当前项目包名) 确定 sqlite 数据库名称,拼接到 ...

  3. Android——SQLite/数据库 相关知识总结贴

    android SQLite简介 http://www.apkbus.com/android-1780-1-1.html Android SQLite基础 http://www.apkbus.com/ ...

  4. sqlite 数据库 相关知识

    一基本简单介绍 SQLite 是一个自持的(self-contained).无server的.零配置的.事务型的关系型数据库引擎.由于他非常小,所以也能够作为嵌入式数据库内建在你的应用程序中. SQL ...

  5. SQLite数据库相关操作

    一.创建数据库 这里创建了note便签数据表,字段有noteId.noteTitle.noteTime.noteInfo );  // TODO Auto-generated constructor ...

  6. Android Sqlite数据库相关——实现 Sqlite 数据库版本升级

    继承SQLiteOpenHelper类后,实现其中的onUpgrade 方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVer ...

  7. 【Win 10 应用开发】Sqlite 数据库的简单用法

    如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...

  8. Android之SQLite数据库使用

    转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...

  9. Android数据库相关整理

    今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅.主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一.原生数据库 ...

随机推荐

  1. plist文件的读写

    参考资料 http://blog.csdn.net/totogo2010/article/details/7634185

  2. Linux find 用法示例

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  3. SpringMVC学习(三)整合SpringMVC和MyBatis

    工程结构 导入jar包 配置文件 applicationContext-dao.xml---配置数据源.SqlSessionFactory.mapper扫描器 applicationContext-s ...

  4. 8.Java格式化输出

    JAVA中字符串输出格式 1.使用format函数 System.out.format("%d  %f",10,10.5); 2.使用Formatter类 构造函数Formatte ...

  5. 比较典型的带case的group by语句

    2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果 ...

  6. jrebel实现tomcat热部署

    -noverify -javaagent:D:\jrebel.jar 注:频繁切换工程的时候,热部署可能会失效; 解决办法是:先把项目拖到tomcat下发布,然后在没有配置上面这行代码的情况下,让项目 ...

  7. 【转】Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs

    http://www.cnblogs.com/carbon3/p/5930803.html 之前VPS侦探曾经介绍过流量带宽相关的工具如:iftop.vnstat,这几个都是统计和监控网卡流量的.但是 ...

  8. 2015ACM/ICPC亚洲区上海站

    5573 Binary Tree(构造) 题意:给你一个二叉树,根节点为1,子节点为父节点的2倍和2倍+1,从根节点开始依次向下走k层,问如何走使得将路径上的数进行加减最终结果得到n. 联想到二进制. ...

  9. [spring源码学习]五-BeanPostProcessor的使用

    一.接口描述 spring提供了一个接口类-BeanPostProcessor,我们叫他:bean的加工器,应该是在bean的实例化过程中对bean做一些包装处理,里边提供两个方法 public in ...

  10. Codeforces Round #352 (Div. 2)

    模拟 A - Summer Camp #include <bits/stdc++.h> int a[1100]; int b[100]; int len; void init() { in ...