淘先锋技术网

首页 1 2 3 4 5 6 7
<div style="font-family:'Helvetica Neue';font-size:14px;"><span style="font-size:18px;">SQLite嵌入式数据库</span></div><div style="font-family:'Helvetica Neue';font-size:14px;"><span style="font-size:18px;">1.支持时间,不需要配置,不需要安装,不需要管理员;</span></div><div style="font-family:'Helvetica Neue';font-size:14px;"><span style="font-size:18px;">2.支持大部分SQL92;</span></div><div style="font-family:'Helvetica Neue';font-size:14px;"><span style="font-size:18px;">3.完整的数据库保存在磁盘上面的一个文件,同一个数据库文件可以在不同机器上面使用.最大支持数据库到2T;</span></div><div style="font-family:'Helvetica Neue';font-size:14px;"><span style="font-size:18px;">4.占用内存少;</span></div><div style="font-family:'Helvetica Neue';font-size:14px;"><span style="font-size:18px;color:#1d9421;font: 24.0px Menlo; font-variant-ligatures: no-common-ligatures;">//</span><span style="font-size:18px;"> <span style="color:#1d9421;font: 24.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures;">如果你使用数据库的话</span> <span style="color:#1d9421;font: 24.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures;">要引入一个框架</span></span></div><div style="font-family:'Heiti SC Light';font-size:24px;"><span style="font-size:18px;color:#1d9421;font: 24.0px Menlo; font-variant-ligatures: no-common-ligatures;">// libsqlite3.0.dylib</span><span style="font-size:18px;color:#1d9421;font: 24.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures;">框架</span></div><span style="font-size:18px;"><img src="https://img-blog.csdn.net/20150916222422691?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


创建一个studentmodel类
#import <Foundation/Foundation.h>

@interface LanOuStudent : NSObject

// 名字
@property (nonatomic, retain) NSString *name;
// 性别
@property (nonatomic, retain) NSString *gender;
// 年龄
@property (nonatomic, assign) NSInteger age;
// 学号
@property (nonatomic, assign) NSInteger number;

@end

创建一个SQliteMananger类
.h文件
// 使用的话需要引入头文件#import <sqlite3.h>
#import <Foundation/Foundation.h>
#import <sqlite3.h>
#import "LanOuStudent.h"

@interface SQliteMananger : NSObject

// 初始化方法
+ (SQliteMananger *)shareManager;

// 如果你使用数据库的话 要引入一个框架
// libsqlite3.0.dylib框架
// 使用的话 需要引入头文件#import <sqlite3.h>

// 打开数据库
// sqlite3 * 表示咱们的数据库
- (sqlite3 *)openDB;

// 关闭数据库
- (void)closeDB;

// 创建一个表
- (void)createTable;

// 插入数据
- (void)insertWith:(LanOuStudent *)student;
// 删除成功 删除20岁以上的
- (void)deleteStudentWithAge:(NSInteger)age;
// 更新数据  根据名字修改年龄
- (void)updateName:(NSString *)name setAge:(NSInteger)age;

// 查询数据  根据名字和年龄查询学生
- (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age;
// 查询所有学生的信息
- (NSArray *)queryAllStudents;

@end
.m文件
#import "SQliteMananger.h"

@implementation SQliteMananger

// 创建单例类 进行数据库 操作方法的封装

// 初始化方法
+ (SQliteMananger *)shareManager
{
    static SQliteMananger *manager = nil;
    if (manager == nil) {
        manager = [[SQliteMananger alloc] init];
    }
    return manager;
}

// 定义一个静态指针 负责连接数据库
// 保证数据库 直到程序结束才被释放
static sqlite3 *db = nil;

// 打开数据库
// sqlite3 * 表示咱们的数据库
- (sqlite3 *)openDB
{
    // 判断
    // 如果不为空就说明数据库存在直接返回就行
    if (db != nil) {
        return db;
    }
    // 不存在就创建一个数据库
    // 获取文件路径
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    // 拼接路径
    // 数据库名称 Student.sqlite
    NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"Student.sqlite"];
    NSLog(@"%@", dbPath);

    // 创建数据库
    // 参数1 文件路径 需要把oc的字符串转换一下类型  dbPath.UTF8String
    // 参数2 数据库地址
    // sqlite3_open 该函数 如果有数据库就打开 没有就创建一个出来
    int result = sqlite3_open(dbPath.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 错误信息
    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
{
    // 打开数据库
    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(@"删除失败");
    }
    // 关闭数据库
    [self closeDB];
}
// 更新数据  根据名字修改年龄
- (void)updateName:(NSString *)name setAge:(NSInteger)age
{
    // 1.打开数据库
    [self openDB];
    // 2.写sql语句
    NSString *sql = [NSString stringWithFormat:@"update lanOuStudent set age = '%ld' where name = '%@'", age, name];
    // 3.执行sql语句
    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.打开数据库
    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_啥类型
        // 参数2 int 查询条件的顺序 从1开始
        // 参数3 const char * 填查询条件的 字段名
        // 参数4 int n 长度 -1
        // 参数5 void (*)(void *) 绑定后执行的函数

        // 绑定的条件1
        sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
        // 绑定条件2
        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.给对象进行赋值
            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.打开数据库
    db = [self openDB];
    // 2.写sql语句
    NSString *sql = [NSString stringWithFormat:@"select *from lanOuStudent"];
    // 3.创建一个跟随指针
    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];
        // 14. 返回数组
        return array;
    } else {
        NSLog(@"执行失败");
    }
    // 15.关闭数据库
    [self closeDB];
    return nil;
}

@end
在appdelegate.m中调用引入头文件
#import "SQliteMananger.h"
// 创建一个操作数据库manager对象
    SQliteMananger *manager = [SQliteMananger shareManager];
    // 打开数据库
    [manager openDB];
    // 关闭数据库
    [manager closeDB];

    // 创建一个表
    [manager createTable];

    // 插入数据
    LanOuStudent *student1 = [[LanOuStudent alloc] init];
    student1.name = @"小芳";
    student1.age = 18;
    student1.gender = @"女";
    student1.number = 120908042;
    [manager insertWith:student1];

    LanOuStudent *student2 = [[LanOuStudent alloc] init];
    student1.name = @"励志";
    student1.age = 20;
    student1.gender = @"男";
    student1.number = 1;
    [manager insertWith:student1];

    LanOuStudent *student3 = [[LanOuStudent alloc] init];
    student1.name = @"体力";
    student1.age = 23;
    student1.gender = @"男";
    student1.number = 2;
    [manager insertWith:student1];

    [manager deleteStudentWithAge:20];

    [manager updateName:@"小芳" setAge:23];

    LanOuStudent *student = [manager queryStudentWithName:@"小芳" andAge:18];
    NSArray *array = [manager queryAllStudents];
    NSLog(@"%@", array);</span>
注释很详细,一起学习交流.