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
原创粉丝点击