iOS疯狂讲解之SQLite语句
来源:互联网 发布:mysql查询系统表 编辑:程序博客网 时间:2024/05/14 09:06
import “SQLiteManager.h”
import “LanOuStudent.h”
@implementation SQLiteManager
// 初始化方法
// 创建单例类 进行对数据库操作方法的封装
- (SQLiteManager *)shareManeger
{
static SQLiteManager *manager = nil;
if (manager == nil) {
manager = [[SQLiteManager alloc] init];
}
return manager;
}
// 定义一个 静态指针 负责连接数据库 保证数据库 直到程序结束 才会被释放
static sqlite3 *db = nil;
// 打开数据库
// sqlite3 * 表示咱们的数据库
- (sqlite3 *)openDB
{
// 判断 如果db 不为空nil 就说明数据库存在 直接返回数据库就行
if (db != nil) {
return db;
}
// 不存在 就创建一个数据库
// 获取路径文件路径
NSString *docunmentpath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 拼接路径 数据库的名称 Student.sqlite
NSString *path = [docunmentpath stringByAppendingPathComponent:@”Student.sqlite”];
NSLog(@”%@”, path);
// 创建数据库
// 参数1 文件的路径 需要把oc的字符串转化一下类型 path.UTF8String
// 参数2 数据库的地址
// sqlite3_open 该函数如果有数据库存在就打开 没有就创建一个出来
int result = sqlite3_open(path.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 错误信息 可以填NULL
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
{ // 1, 打开数据库
db = [self openDB];// 2,写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];
}
// 删除数据
- (void)deleteStudentWithAge:(NSInteger)age
{
// 打开数据库
db = [self openDB];
// 写sql语句
NSString *sql = [ NSString stringWithFormat:@” delete from LanOuStudent where age > ‘%ld’”, age];
// 执行语句
int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
// 判断成功与否
if (result == SQLITE_OK) {
NSLog(@”删除成功”);
} else {
NSLog(@”删除失败”);
}
// 关闭数据库
[self closeDB];
}
// 更新数据 根据名字修改年龄
- (void)updateWithName:(NSString *)name setAge:(NSInteger)age
{
db = [self openDB];
NSString *sql = [NSString stringWithFormat:@”update LanOuStudent set age =’%ld’ where name = ‘%@’”, age, name];
int relust = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
if (relust == SQLITE_OK) {
NSLog(@”更新成功”);
} else {
NSLog(@”更新失败”);
}
[self closeDB];
}
// 查询数据 根据名字和年龄查询数据
- (LanOuStudent )searchStudentWithName:(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, -1, &stmt, NULL);// 5, 判断 执行语句 是否成功if (result == SQLITE_OK) { NSLog(@"查询语句执行成功"); // 6, 绑定查询条件信息 // 查询的条件是什么类型的 就选bind什么类型 这里查询的是text类型 // 第一个参数: 查询指针 // 第二个参数 查询条件的顺序 从1开始 // 参数3 查询条件的 字段名 // 参数四 长度 // 参数五 绑定后执行的函数 // 绑定的条件1 sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL); // 绑定条件2 age sqlite3_bind_int(stmt, 2, -1); // 7, 开始查询 // sqlite3_step(stmt) == SQLITE_ROW 如果这条语句可以被找到就返回 SQLITE_ROW while (sqlite3_step(stmt) == SQLITE_ROW) { // 8,获取数据 // 参数二<#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, 给对象model进行赋值 LanOuStudent *model = [[LanOuStudent alloc] init]; // 把c语言字符串转回oc字符串 model.name = [NSString stringWithUTF8String:name]; model.gender = [NSString stringWithUTF8String:gender]; model.age = age; model.number = number; // 10. 释放跟随指针 sqlite3_finalize(stmt); // 11, 关闭数据库 [self closeDB]; // 12, 返回数据 并释放对象 return [model autorelease]; }} else { NSLog(@"查询语句执行失败");}// 13, 关闭数据[self closeDB];return nil;
}
// 查询所有的学生信息 返回值是一个数组
1. (NSArray *)searchAllStudents
{
// 打开数据库
db = [self openDB];
// 写sql语句
NSString *sql = [NSString stringWithFormat:@”select *from LanOuStudent”];
// 创建一个跟随指针 保存sql语句
sqlite3_stmt *stmt = nil;
// 执行sql语句
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 [student release]; } // 12 .释放跟随指针 sqlite3_finalize(stmt); // 13,关闭数据库 [self closeDB]; // 14, 返回数组 return array;} else { NSLog(@"查询所有失败");}// 15,关闭数据库[self closeDB];return nil;
}
- 2.
#import "SQLiteManager.h"#import "LanOuStudent.h"@implementation SQLiteManager// 初始化方法// 创建单例类 进行对数据库操作方法的封装+ (SQLiteManager *)shareManeger{ static SQLiteManager *manager = nil; if (manager == nil) { manager = [[SQLiteManager alloc] init]; } return manager;}// 定义一个 静态指针 负责连接数据库 保证数据库 直到程序结束 才会被释放static sqlite3 *db = nil;// 打开数据库// sqlite3 * 表示咱们的数据库- (sqlite3 *)openDB{ // 判断 如果db 不为空nil 就说明数据库存在 直接返回数据库就行 if (db != nil) { return db; } // 不存在 就创建一个数据库 // 获取路径文件路径 NSString *docunmentpath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 拼接路径 数据库的名称 Student.sqlite NSString *path = [docunmentpath stringByAppendingPathComponent:@"Student.sqlite"]; NSLog(@"%@", path); // 创建数据库 // 参数1 文件的路径 需要把oc的字符串转化一下类型 path.UTF8String // 参数2 数据库的地址 // sqlite3_open 该函数如果有数据库存在就打开 没有就创建一个出来 int result = sqlite3_open(path.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 错误信息 可以填NULL 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{ // 1, 打开数据库 db = [self openDB]; // 2,写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];}// 删除数据- (void)deleteStudentWithAge:(NSInteger)age{ // 打开数据库 db = [self openDB]; // 写sql语句 NSString *sql = [ NSString stringWithFormat:@" delete from LanOuStudent where age > '%ld'", age]; // 执行语句 int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL); // 判断成功与否 if (result == SQLITE_OK) { NSLog(@"删除成功"); } else { NSLog(@"删除失败"); } // 关闭数据库 [self closeDB];}// 更新数据 根据名字修改年龄- (void)updateWithName:(NSString *)name setAge:(NSInteger)age{ db = [self openDB]; NSString *sql = [NSString stringWithFormat:@"update LanOuStudent set age ='%ld' where name = '%@'", age, name]; int relust = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL); if (relust == SQLITE_OK) { NSLog(@"更新成功"); } else { NSLog(@"更新失败"); } [self closeDB];}// 查询数据 根据名字和年龄查询数据- (LanOuStudent *)searchStudentWithName:(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, -1, &stmt, NULL); // 5, 判断 执行语句 是否成功 if (result == SQLITE_OK) { NSLog(@"查询语句执行成功"); // 6, 绑定查询条件信息 // 查询的条件是什么类型的 就选bind什么类型 这里查询的是text类型 // 第一个参数: 查询指针 // 第二个参数 查询条件的顺序 从1开始 // 参数3 查询条件的 字段名 // 参数四 长度 // 参数五 绑定后执行的函数 // 绑定的条件1 sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL); // 绑定条件2 age sqlite3_bind_int(stmt, 2, -1); // 7, 开始查询 // sqlite3_step(stmt) == SQLITE_ROW 如果这条语句可以被找到就返回 SQLITE_ROW while (sqlite3_step(stmt) == SQLITE_ROW) { // 8,获取数据 // 参数二<#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, 给对象model进行赋值 LanOuStudent *model = [[LanOuStudent alloc] init]; // 把c语言字符串转回oc字符串 model.name = [NSString stringWithUTF8String:name]; model.gender = [NSString stringWithUTF8String:gender]; model.age = age; model.number = number; // 10. 释放跟随指针 sqlite3_finalize(stmt); // 11, 关闭数据库 [self closeDB]; // 12, 返回数据 并释放对象 return [model autorelease]; } } else { NSLog(@"查询语句执行失败"); } // 13, 关闭数据 [self closeDB]; return nil;}// 查询所有的学生信息 返回值是一个数组- (NSArray *)searchAllStudents{ // 打开数据库 db = [self openDB]; // 写sql语句 NSString *sql = [NSString stringWithFormat:@"select *from LanOuStudent"]; // 创建一个跟随指针 保存sql语句 sqlite3_stmt *stmt = nil; // 执行sql语句 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 [student release]; } // 12 .释放跟随指针 sqlite3_finalize(stmt); // 13,关闭数据库 [self closeDB]; // 14, 返回数组 return array; } else { NSLog(@"查询所有失败"); } // 15,关闭数据库 [self closeDB]; return nil;}
- iOS疯狂讲解之SQLite语句
- iOS 疯狂讲解之CocoaPods
- iOS疯狂讲解之手势识别器
- iOS疯狂详解之SQlite数据库增删改查
- iOS疯狂讲解之Xcode菜单及快捷键大全
- iOS疯狂讲解之KVO键值观察者(key- values-observer)
- iOS疯狂讲解之加载视图的好处
- iOS疯狂讲解之单例模式的简单应用
- 疯狂讲解之GCD线程
- iOS SQLite语句
- iOS-Sqlite语句
- iOS疯狂讲解之复杂对象的归档与反归档
- iOS疯狂讲解之单例模式传值的简单介绍
- iOS疯狂讲解之 NSOperationQueue与GCD的使用原则和场景
- IOS疯狂基础之UILabel
- IOS疯狂基础之UIButton
- IOS疯狂基础之UITextField
- IOS疯狂基础之UIColor
- android获取当前焦点的位置,查找焦点的位置
- iOS中的三种定时器使用方法
- 如何卸载ubantu自带的jdk
- uva 232 - Crossword Answers
- 错误代码: 1109 Unknown table 'ename' in MULTI DELETE
- iOS疯狂讲解之SQLite语句
- ASP.NET MVC 入门介绍 (上)
- java线程的同步方式
- 高并发模式之reactor原型代码
- 成功的背后!(给所有IT人)----转载:来自CSDN第一名博主
- 华为OJ题库-字符串通配符
- Android 短信验证
- Java创建/遍历二叉树
- UIScrollView学习<1>理解 contentSize、contentInset和contentOffset