一、什么是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];
}

  

iOS数据持久化(二)SQLite的更多相关文章

  1. IOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...

  2. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  3. iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

  4. iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名 ...

  5. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别

    iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...

  6. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  7. iOS数据持久化

    在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...

  8. iOS: 数据持久化方案

    数据持久化方案(如果总结不到位,或者有误的地方,敬请斧正) 一.功能: 主要是将数据持久化到本地,减少对网络请求的次数,既节省了用户的流量,也增强了App的体验效果. 二.种类:  plist存储:使 ...

  9. iOS数据持久化存储:归档

    在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用 ...

  10. 转载 -- iOS数据持久化存储

    作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方 ...

随机推荐

  1. uoj #9. 【UTR #1】vfk的数据 水题

    #9. [UTR #1]vfk的数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/9 Description ...

  2. 基于私钥加密公钥解密的RSA算法C#实现

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  3. 通达OA 公共文件柜二次开发添加管理信息(图文)

    公共文件柜当内容较多时,管理起来非常easy乱,特别是当有多个名字相近的目录时.这里通过简单的开发添加了两个管理信息,能够通过添加备注的方式加以区分. watermark/2/text/aHR0cDo ...

  4. 进程控制之fork函数

    一个现有进程可以调用fork函数创建一个新进程. #include <unistd.h> pid_t fork( void ); 返回值:子进程中返回0,父进程中返回子进程ID,出错返回- ...

  5. Android 之 权限 uses-permission 设置

    Manifest.permission 官方API说明: http://developer.android.com/reference/android/Manifest.permission.html ...

  6. Windows 7 IIS HTTP 错误 500.21 – Internal Server Error 解决方法

    错误状况: 下面内容来自网络,自己也另有补充 原因:在安装Framework v4.0之后,再启用IIS,导致Framework没有完全安装 解决办法:开始->所有程序->附件->鼠 ...

  7. 1.4.1.Documents,Fields和Schema概述

    Documents,Fields和Schema概述 solr的基本前提是非常简单,你可以给它很多信息,然后可以向它提出问题,获取你想要的问题的信息.所有信息输入的地方就叫做索引或者更新.当你提出问题时 ...

  8. MVC框架 - 高级示例

    在第一个MVC教程章中,我们学会了如何在MVC控制器和视图进行交互.在本教程中,我们将向前更进一步,学习如何使用模型创建高级应用程序来创建,编辑,删除用户,在我们的应用程序中查看列表. 下面是用来创建 ...

  9. 【阿里云产品公测】离线归档OAS,再也不用担心备份空间了

    [阿里云产品公测]离线归档OAS,再也不用担心备份空间了 作者:阿里云用户莫须有3i 1 起步  1.1 初识OAS  啥是OAS,请看官方说明: 引用: 开放归档服务(Open Archive Se ...

  10. ASP.NET页面与IIS底层交互和工作原理详解(第一回)

    引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实现某个特定 ...