一、什么是SQLite

SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,处理速度快,非常适合用于移动端开发。
二、使用
  创建DataBaseHandle.h   &    DataBaseHandle.m
DataBaseHandle.h
#import <Foundation/Foundation.h>
#import "Student.h"
@interface DataBaseHandle : NSObject
+ (DataBaseHandle *)shareDataBase;
- (void)openDB;
- (void)closeDB;
//添加数据
- (void)insertNewStudent:(Student *)student;
/***  根据学号查询学生*/
- (Student *)selectStudentWithNumber:(NSInteger)number;
/***  查询表中所有数据*/
- (NSMutableArray *)selectAllStudents;
/***  根据学号删除*/
- (void)deleteStudentWithNumber:(NSInteger)number;
- (void)updateStudent:(NSString *)gender WithNumber:(NSInteger)number;
@end

DataBaseHandle.m

+ (DataBaseHandle *)shareDataBase {@synchronized (self){if (handle == nil) {handle = [[DataBaseHandle alloc] init];//            [handle closeDB];}}return handle;
}
sqlite3 *db = nil;

  打开数据库

- (void)openDB {NSString *str = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];NSString *path = [str stringByAppendingPathComponent:@"student.sqlite"];NSLog(@"%@",path);//打开数据库//UTF8String 将oc字符串转化为C语言字符串//方法执行完会返回一个数据库对象,这个对象已被初始化int result = sqlite3_open([path UTF8String], &db);//如果等于SQLITE_OK说明sql语句执行成功if (result == SQLITE_OK) {NSLog(@"数据库打开成功");//创建表格NSString *sqlString = @"create table if not exists Student (number integer primary key autoincrement,name text,gender text,age integer)";int result =  sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, NULL);if (result == SQLITE_OK) {NSLog(@"见表成功");}} else {NSLog(@"数据库打开失败");}
}

  关闭数据库

- (void)closeDB {int result = sqlite3_close(db);if (result == SQLITE_OK) {NSLog(@"关闭成功");}else {NSLog(@"关闭失败");}
}

  插入数据

- (void)insertNewStudent:(Student *)student {[self openDB];//准备sql语句NSString *sqlString = @"insert into Student (name,gender, age) values (?, ?, ?)";/*第一个参数,数据库指针,第二个参数,sql语句第三个参数,sql语句的长度,写成-1,自动计算第四个参数,创建管理sql语句的类,statement第五个参数,预留参数*/sqlite3_stmt *stmt = nil;int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"添加语句成功");//绑定参数//绑定的参数:1.管理类指针,2.第几个问号,3.绑定的数据, 4.绑定数据的长度 -1   5.sqlite3_bind_text(stmt, 1, [student.name UTF8String], -1, NULL);sqlite3_bind_text(stmt, 2, [student.gender UTF8String], -1, NULL);sqlite3_bind_int(stmt, 3, (int)student.age);/**/sqlite3_step(stmt);} else {NSLog(@"添加语句失败");}sqlite3_finalize(stmt);[self closeDB];
}

  查询数据

- (NSMutableArray *)selectAllStudents {[self openDB];NSString *sqlString = @"select * from student";sqlite3_stmt *stmt = nil;int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, nil);if (result == SQLITE_OK) {NSLog(@"查询全部成功");//循环的条件:下一行还有数据,这时就能一直循环下去NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];while (sqlite3_step(stmt) == SQLITE_ROW) {NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];NSInteger age = sqlite3_column_int(stmt, 3);Student *stu = [[Student alloc] init];stu.name = name;stu.age = age;stu.gender = gender;[array addObject:stu];[stu release];}sqlite3_finalize(stmt);[self closeDB];return array;} else {NSLog(@"error");return nil;}
}

  

- (Student *)selectStudentWithNumber:(NSInteger)number {[self openDB];NSString *sqlString = @"select * from Student where number = ?";sqlite3_stmt *stmt = nil;int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"查询成功");//绑定参数sqlite3_bind_int(stmt, 1, (int)number);Student *student = [[[Student alloc] init]autorelease];while (sqlite3_step(stmt) == SQLITE_ROW) {student.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];student.gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];student.age = sqlite3_column_int(stmt, 3);}sqlite3_finalize(stmt);[self closeDB];return student;} else {NSLog(@"不OK");return nil;}
}

  删除数据

- (void)deleteStudentWithNumber:(NSInteger)number {[self openDB];NSString *sqlString = @"delete from Student where number = ?";sqlite3_stmt *stmt = nil;int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);if (result == SQLITE_OK) {sqlite3_bind_int(stmt, 1, (int)number);//执行sql语句sqlite3_step(stmt);}//释放stmt的内存资源sqlite3_finalize(stmt);[self closeDB];
}

  修改数据

- (void)updateStudent:(NSString *)gender WithNumber:(NSInteger)number {[self openDB];NSString *sqlString = @"update Student set gender = ? where number = ?";sqlite3_stmt *stmt = nil;int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);if (result == SQLITE_OK) {sqlite3_bind_int(stmt, 2, (int)number);sqlite3_step(stmt);}sqlite3_finalize(stmt);[self closeDB];
}

  

转载于:https://www.cnblogs.com/code-cd/p/4810261.html

iOS数据持久化(二)SQLite相关推荐

  1. 【iOS数据持久化】数据库(SQLite.swift)和FMDB

    数据持久化之SQLite数据库(SQLite.swift使用) 一.     简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速 ...

  2. 【iOS数据持久化】Plist使用

    iOS数据持久化Plist使用 iOS 端数据持久化就是把数据保存在本地,常用于基本信息储存,应用配置,应用支持数据源,网络请求缓存等.主要有如下几种方式: 方式 介绍 特点 Plist文件 属性列表 ...

  3. iOS数据持久化方案

    技术由来 数据持久化是iOS开发中必不可少的一项技能.因为开发中我们多会涉及到用户信息存储.文件存储.应用内容缓存中的一个或者几个场景. 数据持久化的几种方式 NSUserDefaults plist ...

  4. iOS 数据持久化 -- Core Data (2)

    2019独角兽企业重金招聘Python工程师标准>>> 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里, ...

  5. iOS - 数据持久化之 FMDB 的使用

    前言 上一篇文章「iOS - 使用 SQLite 数据库实现数据持久化」,介绍了如何使用 sqlite3 操作 SQLite 数据库实现增删改查.但是在代码编写的过程中,我们发现 sqlite3 需要 ...

  6. iOS 数据持久化方式 - 归档 反归档

    所谓归档:将复杂对象转化为NSData类型数据(复杂-->归档-->NSData--->WriteToFile) 注意:归档是将对象转化为数据字节,以文件的形式存储在磁盘上, 所谓反 ...

  7. 【iOS数据持久化】偏好设置(UserDefaults)

    官网文档:NSUserDufaultClass Reference 关于偏好设置:AboutPreferences and Settings UserDefualts是一种便利的,通过key-valu ...

  8. IOS应用之二--sqlite的创建数据库,表,插入查看数据

    转自:http://blog.csdn.net/totogo2010/article/details/7702207 转载于:https://www.cnblogs.com/jwblogmj/p/42 ...

  9. iOS中持久化存储SQLite(一)

    在iOS中做持久化存储有多种方案,其中包括plist, preference, sqlite, core data,其中: (1)plist, preference适合小型数据存储,因为每次存储前都必 ...

  10. iOS 数据持久化-- FMDB

    一.简介 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...

最新文章

  1. Java 多线程(六) synchronized关键字详解
  2. 20175212童皓桢 Java实验二-面向对象程序设计实验报告
  3. USB共享网络:android手机通过USB与Ubuntu进行socket网络通信
  4. 炸了!刚刚数学家获得了2020年诺贝尔物理学奖!没想到诺奖也能蝉联.......
  5. MySQL数据导入导出(一)
  6. 信息学奥赛一本通(1133:输出亲朋字符串)
  7. vue :style 设置背景图片 backgroundImage
  8. oppo手机维语字体_老年人上网困难重重?学会OPPO这几个功能无后顾之忧
  9. php和js搜索框,利用PHP+JS实现搜索自动提示(实例)_php技巧
  10. sap系统搭建教程_手把手安装SAP ERP系统
  11. 浅学transcad(与表格链接以及创建矩阵OD并显示期望线)
  12. idea 安装本地插件
  13. 一本通题解——1436:数列分段II
  14. 字体:等宽字体与比例字体 - Monospaced font Proportional font
  15. linux创建lvm分区命令,CentOS下LVM的创建与使用
  16. namesilo修改域名服务器,Namesilo, godaddy和万网域名修改NS的方法
  17. 语音输入是计算机在哪个领域的应用,语音识别技术是什么_语音识别技术应用领域介绍...
  18. win7防火墙无法启动的代码修复
  19. 强强联手 加速商用电脑技术革命
  20. 优酷弱网平台落地实践

热门文章

  1. 十四周二次课(3月27日)
  2. 采用C#泛型实现数据库之间的切换
  3. 行尸走肉第八季/全集The Walking Dead迅雷下载
  4. Jupyter Notebook 作图显示中文
  5. c++中static关键字的用法总结
  6. 黄聪:基于jQuery+JSON的省市区三级地区联动
  7. Linux的环境变量总结
  8. Android文件资源(raw/data/asset)的存取
  9. linux服务器优化
  10. 单链表逆置-java(递归与非递归)