ios巅峰之SQ数据库
2015-09-17 17:53
232 查看
// SQlietManager 单例类
.h
// 初始化方法
+ (SQlietManager *)shareManager;
// 如果你要使用数据库的话, 要引入一个框架
// libsqlite3.0.dylib 框架
// 使用的话需要引入头文件 #import <sqlite3.h>
// 打开数据库
// sqlite3 *表示数据库
- (sqlite3 *)openDB;
// 关闭数据库
- (void)closeDB;
// 创建一个表
- (void)createTable;
// 插入数据
- (void)insertWith:(LanOuStudent *)student;
// 删除数据, 删除20岁以上
- (void)deleteStudentWithAge:(NSInteger) age;
// 更新数据, 根据名字修改年龄
- (void)updateStudentWithName:(NSString *)name setAge:(NSInteger)age;
// 查询数据, 根据名字和年龄查询
- (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age;
// 查询所有的学生信息
- (NSArray *)queryAllStudents;
.m
// 初始化
// 创建一个单例类, 进行对数据库, 操作方法的封装
+ (SQlietManager *)shareManager
{
static SQlietManager *manager = nil;
if (manager == nil) {
manage = [[SQlietManager alloc] init];
}
return manager;
}
// 定义一个静态指针, 负责连接数据库
// 保证数据库, 直到程序结束, 才会被释放
static sqlite3 *db = nil;
// 打开数据库
// sqlite3 * 表示数据库
- (sqlite3 *)openDB
{
// 判断
// 如果不为空的话, 就说明数据库存在, 直接返回就行
if (db != nil) {
return db;
}
// 不存在, 就创建一个数据库
// 获取文件路径
NSString *documentsPath = [NSSearcPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 拼接路径
// 数据库的名称, Student.sqlite
NSString *dbPath = [documentsPath stringByAppendingPathCompoent:@“Student.sqlite”];
// 创建数据库
// const char *filename(参数1)文件的路径, 需要把OC的字符串, 转换一下类型 dbPath.UTF8String
// sqlite3 **ppDb(参数2)数据库的地址
// sqlite3_open该函数如果有数据库存在就打开, 如果没有, 就创建一个出来
int result = sqlite3_open(dbPath.UTF8String, &db);
// 查看命令返回结果
// SQLITE_OK 表示成功
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 *error = nil;
int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, &error);
// 4.判断是否成功
if (result == SQLITE_OK) {
NSLog (@“创建表成功”);
} else {
NSLog(@“创建表失败”);
}
// 关闭数据库
[self closeDB];
}
// 插入数据
// 插入的不是model而是model信息
- (void)insertWith:(LanOuStudent *)student
{
// 1.打开数据库
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(@“删除不成功”);
}
// 5.关闭数据库
[self closeDB];
}
// 更新数据, 根据名字修改年龄
- (void)updateStudentWithName:(NSString *)name setAge:(NSInteger)age
{
// 1.打开数据库
[self openDB];
// 2.sql语句
NSString *sql = [NSString stringWithFormat:@“update lanOuStudent set age = ‘%ld’ where name = ‘%@‘“, age, name];
// 3.执行语句
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.打开数据库
[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, -1, &stmt, NULL);
// 5.判断是否成功
if (result == SQLITE_OK) {
NSLog (@“查询语句执行成功”);
// 6.绑定查询条件信息
// 查询的条件是什么类型, 就选bind_什么类型
// 参数2:查询条件的顺序, 从1开始
// 参数3:填查询条件的字段名
// 参数4:长度 -1
// 参数5:绑定后执行的函数
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
sqlite3_bind_int(stmt, 2, -1);
// 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, 1);
char *gender = (char *)sqlite3_column_text(stmt, 2);
int age = sqlite3_column_int(stmt, 3);
int number = sqlite3_column_int(stmt, 0);
// 9.给对象进行赋值
// 把C语言字符串转回OC字符串
LanOuStudent *student = [[[LanOuStudent alloc] init] autorelease];
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;
}
} else {
NSLog(@“查询语句执行失败”);
}
// 12.关闭数据库
[self closeDB];
return nil;
}
// 查询所有的学生信息
- (NSArray *)queryAllStudents
{
// 1.打开数据库
[self openDB];
// 2.写入sql语句
NSString *sql = [NSString stringWithFormat:@“select *from lanOuStudent”];
// 3.创建一个跟随指针保存sql语句
sqlite3_stmt *stmt = nil;
// 4.执行查询语句
int result = sqlite3_prepare_v2(db, sql.UTF8String, - 1, &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, 1);
char *gender = (char *)sqlite3_column_text(stmt, 2);
int age = sqlite3_column_int(stmt, 3);
int number = sqlite3_column_int(stmt, 0);
// 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];
return array;
} else {
NSLog (@“查询所有失败”);
}
[self closeDB];
return nil;
}
.h
// 初始化方法
+ (SQlietManager *)shareManager;
// 如果你要使用数据库的话, 要引入一个框架
// libsqlite3.0.dylib 框架
// 使用的话需要引入头文件 #import <sqlite3.h>
// 打开数据库
// sqlite3 *表示数据库
- (sqlite3 *)openDB;
// 关闭数据库
- (void)closeDB;
// 创建一个表
- (void)createTable;
// 插入数据
- (void)insertWith:(LanOuStudent *)student;
// 删除数据, 删除20岁以上
- (void)deleteStudentWithAge:(NSInteger) age;
// 更新数据, 根据名字修改年龄
- (void)updateStudentWithName:(NSString *)name setAge:(NSInteger)age;
// 查询数据, 根据名字和年龄查询
- (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age;
// 查询所有的学生信息
- (NSArray *)queryAllStudents;
.m
// 初始化
// 创建一个单例类, 进行对数据库, 操作方法的封装
+ (SQlietManager *)shareManager
{
static SQlietManager *manager = nil;
if (manager == nil) {
manage = [[SQlietManager alloc] init];
}
return manager;
}
// 定义一个静态指针, 负责连接数据库
// 保证数据库, 直到程序结束, 才会被释放
static sqlite3 *db = nil;
// 打开数据库
// sqlite3 * 表示数据库
- (sqlite3 *)openDB
{
// 判断
// 如果不为空的话, 就说明数据库存在, 直接返回就行
if (db != nil) {
return db;
}
// 不存在, 就创建一个数据库
// 获取文件路径
NSString *documentsPath = [NSSearcPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 拼接路径
// 数据库的名称, Student.sqlite
NSString *dbPath = [documentsPath stringByAppendingPathCompoent:@“Student.sqlite”];
// 创建数据库
// const char *filename(参数1)文件的路径, 需要把OC的字符串, 转换一下类型 dbPath.UTF8String
// sqlite3 **ppDb(参数2)数据库的地址
// sqlite3_open该函数如果有数据库存在就打开, 如果没有, 就创建一个出来
int result = sqlite3_open(dbPath.UTF8String, &db);
// 查看命令返回结果
// SQLITE_OK 表示成功
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 *error = nil;
int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, &error);
// 4.判断是否成功
if (result == SQLITE_OK) {
NSLog (@“创建表成功”);
} else {
NSLog(@“创建表失败”);
}
// 关闭数据库
[self closeDB];
}
// 插入数据
// 插入的不是model而是model信息
- (void)insertWith:(LanOuStudent *)student
{
// 1.打开数据库
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(@“删除不成功”);
}
// 5.关闭数据库
[self closeDB];
}
// 更新数据, 根据名字修改年龄
- (void)updateStudentWithName:(NSString *)name setAge:(NSInteger)age
{
// 1.打开数据库
[self openDB];
// 2.sql语句
NSString *sql = [NSString stringWithFormat:@“update lanOuStudent set age = ‘%ld’ where name = ‘%@‘“, age, name];
// 3.执行语句
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.打开数据库
[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, -1, &stmt, NULL);
// 5.判断是否成功
if (result == SQLITE_OK) {
NSLog (@“查询语句执行成功”);
// 6.绑定查询条件信息
// 查询的条件是什么类型, 就选bind_什么类型
// 参数2:查询条件的顺序, 从1开始
// 参数3:填查询条件的字段名
// 参数4:长度 -1
// 参数5:绑定后执行的函数
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
sqlite3_bind_int(stmt, 2, -1);
// 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, 1);
char *gender = (char *)sqlite3_column_text(stmt, 2);
int age = sqlite3_column_int(stmt, 3);
int number = sqlite3_column_int(stmt, 0);
// 9.给对象进行赋值
// 把C语言字符串转回OC字符串
LanOuStudent *student = [[[LanOuStudent alloc] init] autorelease];
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;
}
} else {
NSLog(@“查询语句执行失败”);
}
// 12.关闭数据库
[self closeDB];
return nil;
}
// 查询所有的学生信息
- (NSArray *)queryAllStudents
{
// 1.打开数据库
[self openDB];
// 2.写入sql语句
NSString *sql = [NSString stringWithFormat:@“select *from lanOuStudent”];
// 3.创建一个跟随指针保存sql语句
sqlite3_stmt *stmt = nil;
// 4.执行查询语句
int result = sqlite3_prepare_v2(db, sql.UTF8String, - 1, &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, 1);
char *gender = (char *)sqlite3_column_text(stmt, 2);
int age = sqlite3_column_int(stmt, 3);
int number = sqlite3_column_int(stmt, 0);
// 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];
return array;
} else {
NSLog (@“查询所有失败”);
}
[self closeDB];
return nil;
}
相关文章推荐
- mysql日期格式化
- Mysql提示you need the SUPER privilege for this operation的解决办法
- SQL书写规范及常用SQL语句
- oracle中 connect by prior 递归算法
- 如何使用plsql导出oracle数据建表语句,存储过程,视图。以及表中数据
- SQL 学习资源汇总
- SQL 学习资源汇总
- 动态SQL(拼接)
- oracle 里 插入空字符串会被转成null插入
- Sql 把Xml字符串转换成一张表
- 数据库的最简单实现【转】
- SqlServer 取得行号且保持数据的原序列【分组定义序号】
- 采用oracle官方文件(11G)——初步Concept
- 关于SQL 行转列的办法
- SQL基础教程之其他
- SQL基础教程之函数
- SQL基础教程之SQL指令
- redis缓存的安装和使用
- mysql导出csv格式去除字段中的\n\r
- Oracle笔记——子查询