iOS疯狂讲解之SQLite语句

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;

}

  1. 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;
}























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值