美文网首页数据库
iOS SQLite使用

iOS SQLite使用

作者: J_mine | 来源:发表于2017-07-26 09:49 被阅读0次

    SQLite简介
    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。

    SQLite3
    在XCode工程中,打开targets,在Build Phases下导入Libsqlite.tbd,在需要使用sqlite3的位置导入头文件即可。

    使用SQLite的时候我们要注意语法格式的规范,按照要求来:

    掌握常用的SQL语句:
    创建表:"create table if not exists 表名(id intager primary key, 数据对象1 对象类型text,数据对象2 对象类型BLOB)"
    添加数据:"insert into 表名 values(null,?,?)"
    删除数据 : "delete from 表名 where intTeger = ?"
    修改数据: "update 表名 set 数据对象1 = ?,数据对象2 = ? where intTeger"
    查询获取数据:"select *from 表名"

    具体的代码实现如下:

    我们先创建要被它使用到的数据对象类型

    #import <Foundation/Foundation.h>
    
    @interface ClassRoom : NSObject
    
    @property(nonatomic,assign)NSInteger intTeger;
    @property(nonatomic,strong)NSString *name,*age;
    
    
    

    之后 我们要在业务处理层的.h文件中写下具体的语法格式

    // 导入数据对象
    #import "ClassRoom.h"
    // 导入库
    #import <sqlite3.h>
    
    @interface DataBase : NSObject
    {
        sqlite3 *sqliteDB;
    }
    
    // 单列
    +(instancetype)initDataBase;
    
    // 初始数据库
    -(void)initData;
    // 创建数据库表格
    -(void)creatTable;
    // 添加数据
    -(void)addSqlite:(ClassRoom *)theData;
    // 删除数据
    -(void)deleteData:(NSInteger *)theId;
    // 修改数据
    -(void)changeData:(ClassRoom *)theData;
    // 查询数据
    -(NSMutableArray *)dataArray;
    // 关闭数据库
    -(void)closeData;
    
    

    接着 在业务处理层的.m文件中为其写下具体的代码

    @implementation DataBase
    
    // 创建单例变量
    static DataBase *database;
    // 单列
    +(instancetype)initDataBase
    {
        if (!database)
        {
            database = [[DataBase alloc] init];
        }
        return database;
    }
    // 初始数据库
    -(void)initData
    {
        // 创建Document目录
        NSString *theStrPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
        // 创建数据库表名的路径
        NSString *theStr = [theStrPath stringByAppendingString:@"/1508E.db"];
        
        if (sqlite3_open([theStr UTF8String],&sqliteDB) == SQLITE_OK)
            
        {
            NSLog(@"数据库打开成功");
            // 创建表格
            [self creatTable];
        }
        else
        {
            NSLog(@"打开失败");
        }
    }
    // 创建数据库表格
    -(void)creatTable
    {
        // 创建sql语句 格式: creat table if not exists 表名 (主键id integer primary key, 加上所有的用到的数据)
        const char *sql = "creat table if not exists classroom(inTeger integer primary key,name text, age text)";
        NSLog(@"sql>>>>%s",sql);
        
        // 预编译指针
        sqlite3_stmt *stmt;
        // 绑定预编译指针
        sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
        
    }
    // 添加数据
    -(void)addSqlite:(ClassRoom *)theData
    {
       // 创建sql语句
        const char *sql = "insert into classroom values(null,?,?)";
        // 预编译指针
        sqlite3_stmt *stmt;
        // 绑定预编译指针
        sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
        // 绑定占位符
        sqlite3_bind_text(stmt, 1, [theData.name UTF8String], -1, SQLITE_TRANSIENT);
        
        sqlite3_bind_text(stmt, 2, [theData.age UTF8String], -1, SQLITE_TRANSIENT);
        
        //执行预编译指针
        sqlite3_step(stmt);
        // 销毁预编译指针
        sqlite3_finalize(stmt);
    
        
    }
    // 删除数据
    -(void)deleteData:(NSInteger *)theId
    {
        // 创建sql语句
        const char *sql = "delete from classroom where inTeger = ?";
        
        // 预编译指针
        sqlite3_stmt *stmt;
        // 绑定预编译指针
        sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
        // 绑定占位符
        sqlite3_bind_int(stmt, 1, (int) theId);
        
        //执行预编译指针
        sqlite3_step(stmt);
        // 销毁预编译指针
        sqlite3_finalize(stmt);
    }
    // 修改数据
    -(void)changeData:(ClassRoom *)theData
    {
        // sql语句
        const char *sql = "updata classroom set name = ?,age = ? where inTeger";
        // 预编译指针
        sqlite3_stmt *stmt;
        // 绑定预编译指针
        sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
        // 绑定占位符
        sqlite3_bind_text(stmt, 1, [theData.name UTF8String], -1, SQLITE_TRANSIENT);
        
        sqlite3_bind_text(stmt, 2, [theData.age UTF8String], -1, SQLITE_TRANSIENT);
        
        sqlite3_bind_int(stmt, 3, (int)theData.intTeger);
    
        
        //执行预编译指针
        sqlite3_step(stmt);
        // 销毁预编译指针
        sqlite3_finalize(stmt);
        
    }
    // 查询数据
    -(NSMutableArray *)dataArray
    {
        
        const char *sql = "select *from classroom";
        
        // 预编译指针
        sqlite3_stmt *stmt;
        // 绑定预编译指针
        sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
        NSMutableArray *arr = [NSMutableArray array];
        
        // 绑定占位符
        
        //执行预编译指针
        while (sqlite3_step(stmt)== SQLITE_ROW)
     
        {
            ClassRoom *room = [[ClassRoom alloc] init];
            
            room.intTeger = sqlite3_column_int(stmt, 0);
            
            room.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
            room.age = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
            
            [arr addObject:room];
        }
       
        // 销毁预编译指针
        sqlite3_finalize(stmt);
        
        return arr;
    }
    // 关闭数据库
    -(void)closeData
    {
        sqlite3_close(sqliteDB);
    }
    
    
    

    相关文章

      网友评论

        本文标题:iOS SQLite使用

        本文链接:https://www.haomeiwen.com/subject/dtsnkxtx.html