本地存储Sqlite的用法:
.h文件声明:
// 把这个类写成单例, 方便外部使用
+ (DataBaseHandle *)shareDataBaseHandle;
//打开数据库
- (void)openDB;
// 关闭数据库
- (void)closeDB;
// 创建表
- (void)createTable;
// 插入数据
- (void)insertName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age;
// 通过uid去更新数据
- (void)updateWithUID:(NSInteger)uid;
// 通过uid去删除数据
- (void)deleteWithUID:(NSInteger)uid;
// 查找所有数据
- (void)searchAll;
// 根据名字去查找相关的数据信息
- (void)searchWithName:(NSString *)name;
====================================== .m 实现
// 引入数据库操作的头文件
#import <sqlite3.h>
// 延展
@interface DataBaseHandle ()
// 数据库的存储路径
@property (nonatomic, copy) NSString *dbPath;
@end
static DataBaseHandle *dataBase = nil;
@implementation DataBaseHandle
+ (DataBaseHandle *)shareDataBaseHandle
{
if (dataBase == nil) {
dataBase = [[DataBaseHandle alloc] init];
}
return dataBase;
}
// 懒加载需要给数据库路径赋值
- (NSString *)dbPath
{
if (_dbPath == nil) {
// 需求: 路径存储在Documents文件夹下,数据库文件为person.sqlite
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
_dbPath = [documentPath stringByAppendingPathComponent:@"person.sqlite"];
}
return _dbPath;
}
// 好多地方都会使用到数据库,所以初始化一个数据库的静态变量
static sqlite3 *db = nil;
//打开数据库
- (void)openDB
{
//打开数据库,使用int去接受打开的结果
//第一个参数: filename代表数据库的存储路径
//第二个参数: 二级指针,数据库的地址
int result = sqlite3_open([self.dbPath UTF8String], &db);
//result是个枚举值,有很多种情况
if (result == SQLITE_OK) {
NSLog(@"数据库打开成功");
} else {
NSLog(@"数据库打开失败");
}
}
// 关闭数据库
- (void)closeDB
{
int result = sqlite3_close(db);
if (result == SQLITE_OK) {
NSLog(@"数据库关闭成功");
} else {
NSLog(@"数据库关闭失败");
}
}
// 创建一个表
- (void)createTable
{
// 创建一个person表,字段: uid integer类型主键 自增 不能为空, name text类型,gender text类型,age integer类型
NSString *createStr = @"create table if not exists person(uid integer primary key autoincrement not null,name text, gender text, age integer)";
// 第一个参数: 数据库
// 第二个参数: sql语句, 需要进行编码
// 第三个参数: 结果回调的一个函数
// 第四个参数: 回调函数的一个参数
// 第五个参数: 错误信息
int result = sqlite3_exec(db, [createStr UTF8String], NULL, NULL, NULL);
if (result == SQLITE_OK) {
NSLog(@"创建成功");
} else {
NSLog(@"创建失败");
}
// 打印数据库的路径,检查表是否创建成功
NSLog(@"_dbPath = %@", self.dbPath);
}
// 插入数据
- (void)insertName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age
{
//当values不确定的情况下使用?代替,之后会进行其绑定的过程
NSString *insertStr = @"insert into person(name,gender,age)values(?,?,?)";
//伴随指针
sqlite3_stmt *stmt = nil;
// 预执行语句
// 第一个参数: 数据库
// 第二个参数: sql语句
// 第三个参数: 有正负之分,例如:1,代表只往后读一个字节,如果为负值,遇到特殊符号才会结束读取(\000,u000)
// 第四个参数: 伴随指针,会随着数据库的相关操作确定其中?的值
// 第五个参数: 取值的时候取不全,剩下的值都存在这里
int result = sqlite3_prepare(db, insertStr.UTF8String, -1, &stmt, NULL);
// 判断执行结果
if (result == SQLITE_OK) {
//在操作成功的方法里进行?值的一些绑定设置
// 第一个参数: 伴随指针
// 第二个参数: ?的位置,从1开始
// 第三个参数: 表示要插入的值
// 第四个参数: 有正负之分,例如:1,代表只往后读一个字节,如果为负值,遇到特殊符号才会结束读取(\000,u000)
// 第五个参数: 回调函数
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
sqlite3_bind_text(stmt, 2, gender.UTF8String, -1, NULL);
sqlite3_bind_int64(stmt, 3, age);
//sql语句执行完毕
// 执行伴随指针,根据伴随指针的情况判定是否插入成功[SQLITE_DONE代表伴随指针执行数据成功]
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败");
}
} else {
NSLog(@"result = %d", result);
}
// 一定要释放伴随指针
sqlite3_finalize(stmt);
}
// 通过uid去更新数据
- (void)updateWithUID:(NSInteger)uid
{
NSString *updateStr = @"update person set name = '悟空' where uid = ?";
// 预执行语句
//伴随指针
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare(db, updateStr.UTF8String, -1, &stmt, NULL);
if (result == SQLITE_OK) {
sqlite3_bind_int64(stmt, 1, uid);
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@"更新数据成功");
} else {
NSLog(@"更新数据失败");
}
} else {
NSLog(@"result = %d", result);
}
// 一定要释放伴随指针
sqlite3_finalize(stmt);
}
// 通过uid去删除数据
- (void)deleteWithUID:(NSInteger)uid
{
NSString *deleteStr = [NSString stringWithFormat:@"delete from person where uid = %ld", uid];
int result = sqlite3_exec(db, deleteStr.UTF8String, NULL, NULL, NULL);
if (result == SQLITE_OK) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
}
// 查找所有数据
- (void)searchAll
{
NSString *searchAllStr = @"select *from person";
// 预执行
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare(db, searchAllStr.UTF8String, -1, &stmt, NULL);
if (result == SQLITE_OK) {
// 查询数据的时候当不知道执行多少次的时候使用while循环
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 第一个参数: 伴随指针
// 第二个参数: 代表这个字段的位置[只有带? 的是从1开始,其余所有都是从0开始]
int uid = sqlite3_column_int(stmt, 0);
NSLog(@"uid = %d", uid);
//在OC代码中要使用C语言的相关内容应该使用UTF8String
NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
NSLog(@"name = %@", name);
NSString *gender = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 2)];
NSLog(@"gender = %@", gender);
int age = sqlite3_column_int(stmt, 3);
NSLog(@"age = %d", age);
}
} else {
NSLog(@"result = %d", result);
}
sqlite3_finalize(stmt);
}
// 根据名字去查找相关的数据信息
- (void)searchWithName:(NSString *)name
{
NSString *selectStr = @"select uid,gender,age from person where name = ?";
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare(db, selectStr.UTF8String, -1, &stmt, NULL);
if (result == SQLITE_OK) {
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
while (sqlite3_step(stmt) == SQLITE_ROW) {
int uid = sqlite3_column_int(stmt, 0);
NSString *gender = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1)];
int age = sqlite3_column_int(stmt, 2);
NSLog(@"++++uid = %d,gender = %@,age = %d",uid,gender,age);
}
}
sqlite3_finalize(stmt);
}
转载于:https://www.cnblogs.com/leikun1113/p/5488122.html
本地存储Sqlite的用法:相关推荐
- 本地存储localStorage的用法总结
一.什么是localStorage? 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cook ...
- 【JS缓存技术】-本地存储
JS缓存技术-本地存储 本地存储 window.sessionStorage window.localStorage 记住用户名案例 本地存储 window.sessionStorage 用法示例: ...
- C#数据本地存储方案之SQLite
即使是做网络应用,在断线情况下,也需要考虑数据的本地存储.在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储.ACCESS不支持事务原子性,在断电情况下(这种情况 ...
- C#数“.NET研究”据本地存储方案之SQLite
即使是做网络应用,在断线情况下,也需要考虑数据的本地存储.在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储.ACCESS不支持事务原子性,在断电情况下(这种情况 ...
- Vue本地存储及用法
目录 1.本地存储是什么? 2.本地存储的应用场景 3.存储的使用 4. 练习用法 1.本地存储是什么? 以文件的方式存储在本地,通过把数据存在浏览器中,用户不必每次都向服务器请求 获取同一个信息.在 ...
- 本地存储localStorage用法详解
一.什么是localStorage? 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cook ...
- java localstorage_本地存储localStorage用法详解
一.什么是localStorage? 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cook ...
- localStorage本地存储的用法
localStorage.getItem(key):获取指定key本地存储的值 localStorage.setItem(key,value):将value存储到key字段 localStorage. ...
- android模拟器的数据存放,Android模拟器在哪里存储SQLite数据库?
Android模拟器在哪里存储SQLite数据库? 我正在开发一个将数据存储在SQLite数据库中的Android应用程序. 我的问题是,当您使用模拟器时,此数据库文件存储在文件系统中的哪个位置? 我 ...
- iOS开发-------Sqlite3实现本地存储简易通讯录
最近几天整了下Sqlite3,也就是iOS的另外一种储存方式,那么coreData是有什么不足么,不是,一般数据比较简易的时候是不会用coreData的,反而会用自身的sqlte3来实现本地的存储,这 ...
最新文章
- C#时间格式化(Datetime)用法详解
- 每日一皮:这个不要轻易尝试,执行有生命危险
- uboot移植9个步骤_不知道具体的新房装修步骤?9个步骤教你吃透装修
- python中比较运算符怎么使用_实例说明Python中比较运算符的使用
- Robot Framework自动化测试(一)--- 安装
- 第一次CODING附parentElement.insertBefore使用详解
- Fixjs——显示基类DisplayObject
- Illustrator中文版教程,如何在 Illustrator 中添加文字?
- matlab引擎下载,安装用于 Python 的 MATLAB 引擎 API
- 显示器黑屏的原因解析及解决方法
- day12 函数高级
- 自然语言处理和python_Python与自然语言处理搭建环境
- win10红警遇到的各种问题
- html奇偶选择器,css奇偶后代选择器
- 官方scratch3.0正式发布,全面支持移动设备在线编程!
- 安卓隐藏摄像_隐藏拍摄app
- 如何用C语言对文件进行简单加密
- BUUCTF MISC刷题笔记(一)
- 简单介绍API分类接口
- java极光推送实例