iOS激情详解之SQL增删改查
来源:互联网 发布:config.inc.php 编辑:程序博客网 时间:2024/05/16 19:02
// SQliteManager.h// MySQlite//// Created by WDX on 15/9/16.// Copyright (c) 2015年 WDongXu. All rights reserved.#import <Foundation/Foundation.h>#import <sqlite3.h>#import "Student.h"@interface SQliteManager : NSObject// 1,单例类初始化+ (SQliteManager *)shareManager;// 如果你要使用数据库的话 要引入一个框架// libsqlite3.0.dylib 框架// 使用的话需要引入头文件 #import <sqlite3.h>// 2,打开数据库 有就打开没有就关闭// sqlite3 *表示咱们的数据库- (sqlite3 *)openDB;// 3,关闭数据库- (void)closeDB;// 4,创建一个表- (void)createTable;// 5,插入数据 存的是model里面的信息 (增)- (void)insertWith:(LanOuStudent *)student;// 6,删除数据 删除19岁以上的 (删)- (void)deleteStudentWithAge:(NSInteger)age;// 7,更新数据 根据名字修改年龄 (改)- (void)upDateName:(NSString *)name setAge:(NSInteger)age;// 8,查询数据 根据名字和年龄查询学生 (查)- (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age;// 9,查询所有学生信息- (NSArray *)queryAllStudents;@end// SQliteManager.m// MySQlite//// Created by WDX on 15/9/16.// Copyright (c) 2015年 WDongXu. All rights reserved.#import "SQliteManager.h"@implementation SQliteManager//一, 初始化方法// 创建单例类 进行对数据库 操作方法的封装+ (SQliteManager *)shareManager{ static SQliteManager *manager = nil; if (manager == nil) { manager = [[SQliteManager alloc] init]; } return manager;}// 三,定义一个静态指针 负责连接数据库// 保证数据库 直到程序结束才释放static sqlite3 *db = nil;// 二,实现// *****打开数据库*****有就打开,没有就创建// sqlite3 *表示咱们的数据库- (sqlite3 *)openDB{ // 判断:如果数据库不为空 说明数据库存在 直接返回 if (db != nil) { return db; } // 不存在 就创建一个数据库 // 获取文件路径 NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; // 拼接路径 NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"Student.sqlite"]; NSLog(@"%@", dbPath); // 创建数据库 //const char *filename 参数1:文件路径 UTF8String:需要把OC字符串转换一下类型 //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,打开数据库 // 2,写创建表的sql语句 // 3,执行这条语句 // 4,判断是否成功(返回值) // 5,关闭数据库 // 打开数据库 db = [self openDB]; // 1,写创建表的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)"; // 2,执行这条语句 //<#char **errmsg#> 错误信息 // 3,可以定义一个错误信息 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,打开数据库 // 2,写sql语句 // 3,执行这条语句 // 4,判断是否成功 // 5,关闭数据库 // 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];}// 六,删除数据 删除19岁以上的 (删)- (void)deleteStudentWithAge:(NSInteger)age{ // 步骤1,打开数据库 // 2,写sql语句 // 3,执行sql语句 // 4,怕段是否成功 // 5,关闭数据库 // 1,打开数据库 db = [self openDB]; // 2,写sql语句 NSString *sql = [NSString stringWithFormat:@"delete from lanOuStudent where age > '%ld'",age]; // 3,执行sql语句 int result = sqlite3_exec(db , sql.UTF8String, NULL, NULL, NULL); // 4,判断是否成功 if (result == SQLITE_OK) { NSLog(@"删除成功"); } else { NSLog(@"删除失败"); } // 5,关闭数据库 [self closeDB];}// 七,更新数据 根据名字修改年龄 (改)- (void)upDateName:(NSString *)name setAge:(NSInteger)age{ // 步骤1,打开数据库 // 2,写sql语句 // 3,执行sql语句 // 4,怕段是否成功 // 5,关闭数据库 db = [self openDB]; NSString *sql = [NSString stringWithFormat:@"update lanOuStudent set age = '%ld' where name = '%@'",age,name]; int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"更新成功"); } else { NSLog(@"更新失败"); } [self closeDB];}// 八,查询数据 根据名字和年龄查询学生 (查)- (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age{ // 步骤1,打开数据库 // 2,写sql语句 // 3,创建跟随指针 保存sql语句 // 4,执行sql语句 // 5,判断是否成功 // 6,绑定查询条件信息 // 7,开始查询 // 8,获取数据 // 9,给model对象赋值 // 10,释放跟随指针(在这关闭数据库) // 11, 返回数据 // 12, 关闭数据库 // 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,执行sql语句 <#int nByte#>:表示sql语句的长度 -1代表无限长 // <#sqlite3_stmt **ppStmt#>:截取未执行的语句 int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL); // 5,判断是否成功 if (result == SQLITE_OK) { NSLog(@"查询语句执行成功"); // 6,绑定查询条件信息 // 查询的条件是神马类型的就选bind_啥类型 // <#void (*)(void *)#>参数二:查询条件的顺序 从1开始 // <#const char *#>参数三:填查询条件的字段名 // <#int n#> 参数4:长度-1 // 参数五 绑定后执行的函数 // 绑定条件1 sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL); // 绑定条件2 sqlite3_bind_int(stmt, 2, -1); // 2是查询顺序 // 7,开始查询 // sqlite3_step(stmt) == SQLITE_ROW :如果这条语句:sqlite3_step(stmt)可以被查到就返回: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); char age = sqlite3_column_int(stmt, 3); char number = sqlite3_column_int(stmt, 0); // 9,给model对象赋值 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,打开数据库 // 2,写sql语句 // 3,创建一个跟随指针 保存sql语句 // 4,执行查询语句 // 5,判断是否成功 // 6,不用绑定查询 (因为查询所有) 并创建一个数组 保存查询好的model // 7,开始查询 // 8,获取数据 // 9,创建model,给model赋值 // 10,把model 装进数组中 // 11, 释放学生对象 // 12,释放跟随指针 // 13,关闭数据库 // 14,返回数据 // 15,再次关闭数据库 // 1,打开数据库 db = [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); char age = sqlite3_column_int(stmt, 3); char number = sqlite3_column_int(stmt, 0); // 9,创建model,给model赋值 LanOuStudent *students = [[LanOuStudent alloc] init]; students.name = [NSString stringWithUTF8String:name]; students.gender = [NSString stringWithUTF8String:gender]; students.age = age; students.number = number; // 10,把model 装进数组中 [array addObject:students]; // 11, 释放学生对象 [students release]; } // 12,释放跟随指针 sqlite3_finalize(stmt); // 13,关闭数据库 [self closeDB]; // 14,返回数据 return array; } else { NSLog(@"查询执行失败"); } // 15,再次关闭数据库 [self closeDB]; return nil;}@end// Student.h// MySQlite// Created by WDX on 15/9/16.// Copyright (c) 2015年 WDongXu. All rights reserved.#import <Foundation/Foundation.h>@interface LanOuStudent : NSObject// 名字@property (nonatomic, retain)NSString *name;// 年龄@property (nonatomic, assign)NSInteger age;// 性别@property (nonatomic, retain)NSString *gender;// 学号@property (nonatomic, assign)NSInteger number;@end
0 0
- iOS激情详解之SQL增删改查
- SQLite SQL语句之增删改查 详解举例
- iOS疯狂详解之SQlite数据库增删改查
- SQL的增删改查(详解)
- LINQ to SQL之增删改查
- sql sever之增删改查
- sql sever增删查改之--------------增加
- sql sever增删查改之--------------查询
- sql sever增删查改之--------------修改
- sql sever增删查改之--------------删除
- SQL Server 基础之增删查改
- SQL基础之增删改查
- SQL之数据处理(增删改查)
- sql增删改查之简单查询
- sql增删改查之高级查询
- iOS CoreData数据库之增删改查
- SQL增删改查
- sql 增删改查
- Tomcat 异常
- C++之const运用
- SpringMVC文件上传问题
- Python个人代码库-beanstalkd操作类
- list排序
- iOS激情详解之SQL增删改查
- ubantu配置java
- 面试 脑门上贴数字
- Android 保持键盘隐藏
- 微信公众平台开发注意事项
- 构造方法
- Linux 网络配置
- redis清理数据
- java SE复习笔记7