SQLite嵌入式数据库
1.支持时间,不需要配置,不需要安装,不需要管理员;
2.支持大部分SQL92;
3.完整的数据库保存在磁盘上面的一个文件,同一个数据库文件可以在不同机器上面使用.最大支持数据库到2T;
4.占用内存少;
// 如果你使用数据库的话 要引入一个框架
// libsqlite3.0.dylib框架
 
 创建一个studentmodel类
#import <Foundation/Foundation.h> @interface LanOuStudent : NSObject // 名字
@property (nonatomic, retain) NSString *name;
// 性别
@property (nonatomic, retain) NSString *gender;
// 年龄
@property (nonatomic, assign) NSInteger age;
// 学号
@property (nonatomic, assign) NSInteger number; @end 创建一个SQliteMananger类
.h文件
// 使用的话需要引入头文件#import <sqlite3.h>
#import <Foundation/Foundation.h>
#import <sqlite3.h>
#import "LanOuStudent.h" @interface SQliteMananger : NSObject // 初始化方法
+ (SQliteMananger *)shareManager; // 如果你使用数据库的话 要引入一个框架
// libsqlite3.0.dylib框架
// 使用的话 需要引入头文件#import <sqlite3.h> // 打开数据库
// sqlite3 * 表示咱们的数据库
- (sqlite3 *)openDB; // 关闭数据库
- (void)closeDB; // 创建一个表
- (void)createTable; // 插入数据
- (void)insertWith:(LanOuStudent *)student;
// 删除成功 删除20岁以上的
- (void)deleteStudentWithAge:(NSInteger)age;
// 更新数据 根据名字修改年龄
- (void)updateName:(NSString *)name setAge:(NSInteger)age; // 查询数据 根据名字和年龄查询学生
- (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age;
// 查询所有学生的信息
- (NSArray *)queryAllStudents; @end
.m文件
#import "SQliteMananger.h" @implementation SQliteMananger // 创建单例类 进行数据库 操作方法的封装 // 初始化方法
+ (SQliteMananger *)shareManager
{
static SQliteMananger *manager = nil;
if (manager == nil) {
manager = [[SQliteMananger alloc] init];
}
return manager;
} // 定义一个静态指针 负责连接数据库
// 保证数据库 直到程序结束才被释放
static sqlite3 *db = nil; // 打开数据库
// sqlite3 * 表示咱们的数据库
- (sqlite3 *)openDB
{
// 判断
// 如果不为空就说明数据库存在直接返回就行
if (db != nil) {
return db;
}
// 不存在就创建一个数据库
// 获取文件路径
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 拼接路径
// 数据库名称 Student.sqlite
NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"Student.sqlite"];
NSLog(@"%@", dbPath); // 创建数据库
// 参数1 文件路径 需要把oc的字符串转换一下类型 dbPath.UTF8String
// 参数2 数据库地址
// sqlite3_open 该函数 如果有数据库就打开 没有就创建一个出来
int result = sqlite3_open(dbPath.UTF8String, &db); // 查看命令返回结果
if (result == SQLITE_OK) {
NSLog(@"创建成功 或者打开成功");
} else {
NSLog(@"创建失败 或者打开失败");
}
return db;
} // 关闭数据库
- (void)closeDB
{
// 关闭数据库
int result = sqlite3_close(db);
if (result == SQLITE_OK) {
NSLog(@"关闭成功");
// 如果成功的话 把数据库置为空
db = nil;
} else {
NSLog(@"关闭数据库失败");
}
} // 创建一个表
- (void)createTable
{
// 1.打开数据库
db = [self openDB];
// 2.写创建表的sql语句
NSString *sql = @"create table IF NOT EXISTS lanOuStudent(number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL)";
// 3.执行sql语句
// char **errmsg 错误信息
char *error = nil;
int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, &error);
// 4.判断是否成功
if (result == SQLITE_OK) {
NSLog(@"创建表成功");
} else {
NSLog(@"@创建表失败");
}
// 5.关闭数据库
[self closeDB];
} // 插入数据
// 插入的不是model 而是 model信息
- (void)insertWith:(LanOuStudent *)student
{
// 打开数据库
db = [self openDB];
// 写sql语句
NSString *sql = [NSString stringWithFormat:@"insert into lanOuStudent(name, gender, age, number) values('%@', '%@', '%ld', '%ld')", student.name, student.gender, student.age, student.number];
// 3.执行语句
int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
// 4.判断返回值结果 判断是否执行成功
if (result == SQLITE_OK) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败");
}
// 5 关闭数据库
[self closeDB];
} // 删除成功 删除20岁以上的
- (void)deleteStudentWithAge:(NSInteger)age
{
// 1.打开数据库
[self openDB];
// 2.写sql语句
NSString *sql = [NSString stringWithFormat:@"delete from lanOuStudent where age > '%ld'", age];
// 3.执行语句
int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
// 4.判断是否成功
if (result == SQLITE_OK) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
// 关闭数据库
[self closeDB];
}
// 更新数据 根据名字修改年龄
- (void)updateName:(NSString *)name setAge:(NSInteger)age
{
// 1.打开数据库
[self openDB];
// 2.写sql语句
NSString *sql = [NSString stringWithFormat:@"update lanOuStudent set age = '%ld' where name = '%@'", age, name];
// 3.执行sql语句
int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
// 4.判断是否成功
if (result == SQLITE_OK) {
NSLog(@"更新成功");
} else {
NSLog(@"失败");
}
// 5.关闭数据库
[self closeDB];
} // 查询数据 根据名字和年龄查询学生
- (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age
{
// 1.打开数据库
db = [self openDB];
// 2.写sql语句
NSString *sql = [NSString stringWithFormat:@"select *from lanOuStudent where name = '%@' and age = '%ld'",name , age];
// 3.创建跟随指针 保存sql语句
sqlite3_stmt *stmt = nil;
// 4.执行查询语句
// int nByte 表示sql语句的长度 -1 代表无限长
// const char **pzTail 截取未执行的部分的语句
int result = sqlite3_prepare_v2(db, sql.UTF8String, -, &stmt, NULL);
// 5.判断执行语句是否成功
if (result == SQLITE_OK) {
NSLog(@"查询语句执行成功");
// 6.绑定查询条件信息
// 查询的条件是什么类型的 就算bind_啥类型
// 参数2 int 查询条件的顺序 从1开始
// 参数3 const char * 填查询条件的 字段名
// 参数4 int n 长度 -1
// 参数5 void (*)(void *) 绑定后执行的函数 // 绑定的条件1
sqlite3_bind_text(stmt, , name.UTF8String, -, NULL);
// 绑定条件2
sqlite3_bind_int(stmt, , -); // 7.开始查询
// sqlite3_step(stmt) == SQLITE_ROW
// 如果这条语句可以被找到 就返回SQLITE_ROW
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 8.获取数据
// 参数2 int iCol 在数据库表中列数 从0开始 需要打开数据库看一下在第几列
char *name = (char *)sqlite3_column_text(stmt, );
char *gender = (char *)sqlite3_column_text(stmt, );
int age = sqlite3_column_int(stmt, );
int number = sqlite3_column_int(stmt, ); // 9.给对象进行赋值
LanOuStudent *student = [[LanOuStudent alloc] init];
// 把c语言字符串 转回OC字符串
student.name = [NSString stringWithUTF8String:name];
student.gender = [NSString stringWithUTF8String:gender];
student.age = age;
student.number = number; // 10.释放跟随指针
sqlite3_finalize(stmt); // 关闭数据库
[self closeDB]; // 11 返回数据 并释放对象
return [student autorelease];
}
} else {
NSLog(@"查询语句执行失败");
}
// 12.关闭数据库
[self closeDB];
return nil;
} // 查询所有学生的信息
- (NSArray *)queryAllStudents
{
// 1.打开数据库
db = [self openDB];
// 2.写sql语句
NSString *sql = [NSString stringWithFormat:@"select *from lanOuStudent"];
// 3.创建一个跟随指针
sqlite3_stmt *stmt = nil;
// 4.执行查询语句
int result = sqlite3_prepare_v2(db, sql.UTF8String, -, &stmt, NULL);
// 5.判断是否成功
if (result == SQLITE_OK) {
NSLog(@"执行语句成功");
// 6.不用绑定查询 并创建一个数组 保存查询好的model
NSMutableArray *array = [NSMutableArray array];
// 7.开始查询
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 8.读取数据
char *name = (char *)sqlite3_column_text(stmt, );
char *gender = (char *)sqlite3_column_text(stmt, );
int age = sqlite3_column_int(stmt, );
int number = sqlite3_column_int(stmt, );
// 9.创建model并赋值
LanOuStudent *student = [[LanOuStudent alloc] init];
student.name = [NSString stringWithUTF8String:name];
student.gender = [NSString stringWithUTF8String:gender];
student.age = age;
student.number = number; // 10.把model装进数组中
[array addObject:student];
// 11.释放学生对象
[student release];
}
// 12.释放跟随指针
sqlite3_finalize(stmt);
// 13.关闭数据库
[self closeDB];
// 14. 返回数组
return array;
} else {
NSLog(@"执行失败");
}
// 15.关闭数据库
[self closeDB];
return nil;
} @end
在appdelegate.m中调用引入头文件
#import "SQliteMananger.h"
// 创建一个操作数据库manager对象
SQliteMananger *manager = [SQliteMananger shareManager];
// 打开数据库
[manager openDB];
// 关闭数据库
[manager closeDB]; // 创建一个表
[manager createTable]; // 插入数据
LanOuStudent *student1 = [[LanOuStudent alloc] init];
student1.name = @"小芳";
student1.age = ;
student1.gender = @"女";
student1.number = ;
[manager insertWith:student1]; LanOuStudent *student2 = [[LanOuStudent alloc] init];
student1.name = @"励志";
student1.age = ;
student1.gender = @"男";
student1.number = ;
[manager insertWith:student1]; LanOuStudent *student3 = [[LanOuStudent alloc] init];
student1.name = @"体力";
student1.age = ;
student1.gender = @"男";
student1.number = ;
[manager insertWith:student1]; [manager deleteStudentWithAge:]; [manager updateName:@"小芳" setAge:]; LanOuStudent *student = [manager queryStudentWithName:@"小芳" andAge:];
NSArray *array = [manager queryAllStudents];
NSLog(@"%@", array);

ios数据库SQLite实现的更多相关文章

  1. iOS 数据库sqlite完整增删改查操作

    1: 创建数据库表格 1.1 — 表格创建使用一个数据库软件快速创建:软件大小14.3M; 下载地址:http://pan.baidu.com/s/1qWOgGoc; 表格创建-> 打开软件,点 ...

  2. iOS开发数据库SQLite的使用

    iOS系统自带Core Data来进行持久化处理,而且Core Data可以使用图形化界面来创建对象,但是Core Data不是关系型数据库,对于Core Data来说比较擅长管理在设备上创建的数据持 ...

  3. iOS基础 - 数据库-SQLite

    一.iOS应用数据存取的常用方式 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data(以面向对象的方式操作数据 ...

  4. [深入浅出iOS库]之数据库 sqlite

    一,sqlite 简介 前面写了一篇博文讲如何在 C# 中使用 ADO 访问各种数据库,在移动开发和嵌入式领域也有一个轻量级的开源关系型数据库-sqlite.它的特点是零配置(无需服务器),单磁盘文件 ...

  5. IOS 数据库管理系统(SQLite)

    嵌入式数据库 SQLite嵌入式数据库的优势 1.支持事件,你并不需要配置,无需安装,不需要管理员 2.支持部分脂肪SQL92 3.完整的数据库被存储在磁盘上的文件的顶部,相同的数据库文件可以在不同机 ...

  6. Android学习---如何创建数据库,SQLite(onCreate,onUpgrade方法)和SQLiteStudio的使用

    一.android中使用什么数据库? SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式庫中.它是D.RichardHipp建立的公有领域项目.SQLite 是一个软件库,实现 ...

  7. [转载]Unity3D 游戏引擎之使用C#语言建立本地数据库(SQLITE)

    以前在开发中一直使用IOS源生的数据库,通过传递消息的形式在与Unity3D中进行交互.本文我在详细说说如何使用C#语言来在MAC 操作系统下创建Unity本地数据库,我是C#控哇咔咔--- 首先你需 ...

  8. iOS中SQLite知识点总结2

    数据库(SQLite) 01-多表查询 格式:select 字段1,字段2,... from 表名1,表名2; 别名:select 别名1.字段1 as 字段别名1,别名2.字段2 as 字段别名2, ...

  9. iOS中SQLite知识点总结1

    数据库(SQLite) 01-数据库简介 1.什么是数据库 数据库(Database)是按照数据结构来组织,存储和管理数据的仓库 2.数据库的分类 关系型数据库(主流) PC端:Oracle/MySQ ...

随机推荐

  1. BZOJ3723 : PA2014Final Gra w podwajanie

    暴力搜索出所有可行的形状,可以发现本质不同的形状数只有6000个左右. 对于每个形状,它的大小不超过$8\times 8$,故可以按照右下角为原点重建坐标系,用一个unsigned long long ...

  2. SCOI 2013 密码 & 乱搞

    题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...

  3. <fieldset>

    legend{text-align:center;} <fieldset> <legend>爱好<legend>(为fieldset定义标题) <input ...

  4. ACM 素数

    素数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 走进世博园某信息通信馆,参观者将获得前所未有的尖端互动体验,一场充满创想和喜悦的信息通信互动体验秀将以全新形式呈 ...

  5. BZOJ 1034 题解

    1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2613  Solved: 1334[Submit][St ...

  6. iphone H5 input type="search" 不显示搜索 解决办法

    H5 input type="search" 不显示搜索 解决办法 H5 input type="search" 不显示搜索 解决方法 在IOS(ipad iP ...

  7. GO语言练习:多返回值函数

    1.代码 2.运行 1.代码 package main import ( "fmt" "strconv" ) func getValue(n int) (flo ...

  8. tomcat 设置根目录访问

    from http://nj-apple-tree.iteye.com/blog/1635953 1,设置跟路径时,三种方式 在Tomcat默认安装后,tomcat的主目录是webapps/root目 ...

  9. Oracle基础及三层分页查询

    一.数据库表空间和数据文件 解析:一个数据库下可以开N个表空间,一个表空间可以包含N个数据文件.表空间是逻辑概念. 二.关于listener.ora位置 修改该界面上的数据,会影响指定路径的监听配置文 ...

  10. JSP内置对象---request和 response

    <%@page import="java.net.URLEncoder"%> <%@page import="com.hanqi.web.CardDAO ...