sqlite3 的基本使用 以及封装使用
1基本使用
1.打开数据库 int sqlite3_open(const char *filename, // 数据库的文件路径sqlite3 **ppDb // 数据库实例 );2.执行任何SQL语句 int sqlite3_exec(sqlite3*, // 一个打开的数据库实例const char *sql, // 需要执行的SQL语句int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调void *, // 回调函数的第1个参数char **errmsg // 错误信息 );3.检查SQL语句的合法性(查询前的准备) int sqlite3_prepare_v2(sqlite3 *db, // 数据库实例const char *zSql, // 需要检查的SQL语句int nByte, // SQL语句的最大字节长度sqlite3_stmt **ppStmt, // sqlite3_stmt实例,用来获得数据库数据const char **pzTail );4.查询一行数据 int sqlite3_step(sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW5.利用stmt获得某一字段的值(字段的下标从0开始) double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮点数据 int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据 sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据 const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // 二进制文本数据 const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串数据
1创建一个model类, .h文件 #import <Foundation/Foundation.h>@interface IWStudent : NSObject @property (nonatomic, assign) int ID; @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) int age; @end.m文件 #import "IWStudent.h"@implementation IWStudent@end2创建工具类....封装方法 .h文件 #import <Foundation/Foundation.h> @class IWStudent;@interface IWStudentTool : NSObject/*** 添加学生** @param student 需要添加的学生*/ + (BOOL)addStudent:(IWStudent *)student;/*** 获得所有的学生** @return 数组中装着都是IWStudent模型*/ + (NSArray *)students;/*** 根据搜索条件获得对应的学生** @param condition 搜索条件*/ + (NSArray *)studentsWithCondition:(NSString *)condition;@end.m文件 #import "IWStudentTool.h" #import "IWStudent.h" #import <sqlite3.h>@implementation IWStudentTool// static的作用:能保证_db这个变量只被IWStudentTool.m直接访问 static sqlite3 *_db;+ (void)initialize {// 0.获得沙盒中的数据库文件名NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];// 1.创建(打开)数据库(如果数据库文件不存在,会自动创建)int result = sqlite3_open(filename.UTF8String, &_db);if (result == SQLITE_OK) {NSLog(@"成功打开数据库");// 2.创表const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);";char *errorMesg = NULL;int result = sqlite3_exec(_db, sql, NULL, NULL, &errorMesg);if (result == SQLITE_OK) {NSLog(@"成功创建t_student表");} else {NSLog(@"创建t_student表失败:%s", errorMesg);}} else {NSLog(@"打开数据库失败");} }+ (BOOL)addStudent:(IWStudent *)student {NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age) values('%@', %d);", student.name, student.age];char *errorMesg = NULL;int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg);return result == SQLITE_OK; }+ (NSArray *)students {// 0.定义数组NSMutableArray *students = nil;// 1.定义sql语句const char *sql = "select id, name, age 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(@"查询语句是合法的");students = [NSMutableArray array];// 4.执行SQL语句,从结果集中取出数据while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到一行数据// 获得这行对应的数据 IWStudent *student = [[IWStudent alloc] init];// 获得第0列的idstudent.ID = sqlite3_column_int(stmt, 0);// 获得第1列的nameconst unsigned char *sname = sqlite3_column_text(stmt, 1);student.name = [NSString stringWithUTF8String:(const char *)sname];// 获得第2列的agestudent.age = sqlite3_column_int(stmt, 2);// 添加到数组 [students addObject:student];}} else {NSLog(@"查询语句非合法");}return students; }+ (NSArray *)studentsWithCondition:(NSString *)condition {// 0.定义数组NSMutableArray *students = nil;// 1.定义sql语句const char *sql = "select id, name, age from t_student where name like ?;";// 2.定义一个stmt存放结果集sqlite3_stmt *stmt = NULL;// 3.检测SQL语句的合法性int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"查询语句是合法的");students = [NSMutableArray array];// 填补占位符的内容NSString *newCondition = [NSString stringWithFormat:@"%%%@%%", condition]; // NSLog(@"%@", newCondition);sqlite3_bind_text(stmt, 1, newCondition.UTF8String, -1, NULL);// 4.执行SQL语句,从结果集中取出数据while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到一行数据// 获得这行对应的数据 IWStudent *student = [[IWStudent alloc] init];// 获得第0列的idstudent.ID = sqlite3_column_int(stmt, 0);// 获得第1列的nameconst unsigned char *sname = sqlite3_column_text(stmt, 1);student.name = [NSString stringWithUTF8String:(const char *)sname];// 获得第2列的agestudent.age = sqlite3_column_int(stmt, 2);// 添加到数组 [students addObject:student];}} else {NSLog(@"查询语句非合法");}return students; } @end
2.封装为工具类
转载于:https://www.cnblogs.com/shinechen/p/4109657.html
sqlite3 的基本使用 以及封装使用相关推荐
- sqlite数据库中的sql语句大全-zhuan
转载自http://hunankeda110.iteye.com/blog/1143258 2010年SQLite学习笔记之一 一. 如何获取SQLite最新版本 官方站点:http://www.sq ...
- 2010年SQLite学习笔记之三
2010年SQLite学习笔记之三 一.如何备份数据库 先打开数据库test.db E:/sqlite/tool/sqlite-3_6_22>sqlite3 D:/Test/debug/tes ...
- php 仓储 sqlite_详解php封装db类连接sqlite3
sqlite3_open是sqlite数据库的api函数(C/C++),作用是打开(或创建)一个数据库文件.本文主要和大家分享php封装db类连接sqlite3 的知识,希望能帮助到大家.<?p ...
- Cocos2dx 下对sqlite3 的简单封装
DBUtil.h: class DBUtil{public:/************************************************************封装 sqlite ...
- 使用C++将sqlite3数据库访问封装成dsn类
使用sqlite3数据库在嵌入式系统中作为本地状态机,替代以往使用一系列配置文件作为本地状态存储是一种结构化程度更强的方式. 要访问sqlite3数据库,首先要建立本地状态机对应的多个表,然后构造sq ...
- 【iOS】sqlite3的使用(増删改查)
目录: 一.sqlite3常用函数 二.将sqlite3集成到项目,实现増删改查 三.封装DBManager 四.Demo 一.sqlite3常用函数及解释 (1)sqlite3_open: 用来创建 ...
- sqlite3 多线程 c语言,sqlite3 c语言编程 之 三个基本函数
sqlite3 编程只需要一个头文件与一个库文件,安装请看 sqlite3 在linux系统上的安装/* filename: insert.c */ #include #include int mai ...
- swift 连接mysql数据库_Swift - 操作SQLite数据库(引用SQLite3库)
重要事项(2015-11-23日):SQLiteBD原作者又继续更新了,现在已经完美支持Swift2.0.所以大家可以直接使用,本文使用样例也已同步更新. 重要事项(2016-10-31日):SQLi ...
- Windows Mobile下访问Sqlite的Native C++封装
背景 当前移动设备开发领域,在本地数据存储方面,Sqlite几乎成了事实标准,Andriod (android.database.sqlite),iPhone (SQLite for iPhone S ...
最新文章
- Java语言概述与简单程序
- Tomcat虚拟目录配置
- 软件缘-网友个人精心打造的精品软件收集
- python tkinter计算器实例_python小实例——tkinter实战(计算器)
- python datetime.date 和数据库date_Python成为专业人士笔记-date 对象、time 对象及datetime用法深度剖析...
- 鸿蒙系统被泼冷水,给鸿蒙泼冷水:见不得同行的好,是人间最可恶的蠢和恶
- cad快捷键文件路径_你知道CAD图纸如何才能画得更快嘛?CAD快速绘图技巧!
- Unity3D基础25:AudioSource声音组件
- 做了6年的Java,java简历包装项目经验
- 张子阳:如何在30岁前年薪超过30万
- 传奇世界开服教程-地图编号与小地图编号查找方法
- 公考复盘(一)——第三季第四季
- Veeam Availability Suite 9.5安装和配置
- 那些裸辞的人后来都怎么样了?
- 《Text Mining and Analytics》学习笔记——第一周
- 单细胞文献学习(part6)--ForestFireClustering for sc sequencing combines iterative label propagation with ...
- STM32学习笔记--DAC
- 西门子DR系统怎么进计算机管理器,西门子Select DR操作规程
- 河南省第五届acm大学生程序设计竞赛总结
- Android 二维码 生成和识别
热门文章
- git 取消head的游离状态
- python yield理解_Python3 中 Yield 理解与使用
- 虚拟服务器的密码忘记了,忘记虚拟密码
- python的chr可以转换中文吗,chr()在python中怎么实现编码的转换
- 鼠标悬停显示图片html5,JavaScript 鼠标悬停图片,显示隐藏文本
- 中怎么提取时间中的月份_怎么提取图片中的文字?花上1分钟学会,轻松提取,按时下班...
- 2018年全国计算机二级vb真题,2017年计算机二级VB考试试题
- ajax瀑布流 dede,dedecms加载更多,无限下拉瀑布流插件
- MySQL中锁的必要性_MySQL中的锁之一:锁的必要性及分类
- groupdel 删除组_如何在Linux中删除组– groupdel命令