SQLite在iOS中的使用

先导入sqlite3.h的头文件
#import "ViewController.h"
//导入SQLite3的头文件
#import <sqlite3.h>
//宏定义数据库文件路径
#define kDatabaseFilePath [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/User.sqlite"]
创建数据库文件
- (void)createDataBase {

    NSFileManager *manager = [NSFileManager defaultManager];

    //判断是否存在数据库文件
    if (![manager fileExistsAtPath:kDataBaseFilePath]) {
        //若不存在,创建数据库文件
        [manager createFileAtPath:kDataBaseFilePath contents:nil attributes:nil];
    }
    //打印数据库文件地址
    NSLog(@"%@", kDataBaseFilePath);

}

DDL 数据定义语言

创建表格
- (void)cratteTable {

    //1打开数据库
    //创建数据库指针
    sqlite3 *sql = NULL;
    int result = sqlite3_open([kDataBaseFilePath UTF8String], &sql);
    if (result != SQLITE_OK) {

        NSLog(@"打开失败");
        return;
    }
    //2构造sql语句
    NSString *sqlString = @"CREATE TABLE user (id integer PRIMARY KEY AUTOINCREMENT, user_name text UNIQUE NOT NULL, password text NOT NULL)";
    //3执行sql语句
    /**
     *  执行DDL sql语句
     *
     *  @param sqlite3  数据库指针
     *  @param sql      SQl语句
     *  @param callback 执行完成的回调,C语言中的函数指针
     *  @param void*    回调中的第一个参数
     *  @param errmsg   错误信息
     *
     *  @return int
     */    
    char *errmsg;
    result = sqlite3_exec(sql, [sqlString UTF8String], NULL, NULL, &errmsg);
    //4判断是否执行成功
    if (result == SQLITE_OK) {
        NSLog(@"执行成功,表格创建");
    }else {
        NSLog(@"表格创建失败:%s", errmsg);
    }
    //5关闭数据库,释放内存

    sqlite3_close(sql);
}
//注:执行的DDL sql语句返回值为SQLITE_OK
sqlite3_exec(sql, [sqlString UTF8String], NULL, NULL, &errmsg) == SQLITE_OK;

DML 数据操作语言

插入数据
- (void)insertDataWithUserName:(NSString *)userName {

    //1打开数据库
    sqlite3 *sqlite = NULL;
    int result = sqlite3_open([kDataBaseFilePath UTF8String], &sqlite);

    if (result != SQLITE_OK) {
        NSLog(@"打开失败");
        return;
    }
    //2构造sql语句
    NSString *sqlString = @"INSERT INTO user (id, user_name, password) VALUES(?,?,?)";

    //3编译SQL语句
    //构建SQL句柄
    sqlite3_stmt *stmt = NULL;
    //编译处理SQL语句
    /**
     *  编译一个DML的 SQL语句
     *
     *  @param sqlite3  数据库指针
     *  @param zSql     SQl语句
     *  @param nByte    SQL语句的长度 -1表示系统自动计算字符串长度
     *  @param ppStmt   句柄二级指针
     *  @param pzTail   编译结束后,剩余的未编译字符串回传
     *
     *  @return int
     */    
    result =  sqlite3_prepare_v2(sqlite, [sqlString UTF8String], -1, &stmt, NULL);
    if (result != SQLITE_OK) {
        NSLog(@"语句编译出错");
        sqlite3_close(sqlite);
        return;
    }
    //4绑定数据
    /**
    *  绑定integer数据
    *
    *  参数1 需要绑定的SQL语句所在的句柄
    *  参数2 需要绑定的数据在SQL语句中所在的位置
    *  参数3 绑定的数据
    */
    sqlite3_bind_int(stmt, 1, 1000);
    /**
    * 绑定text数据
    *
    *  参数1 需要绑定的SQL语句所在的句柄
    *  参数2 需要绑定的数据在SQL语句中所在的位置
    *  参数3 绑定的C语言字符串
    *  参数4 字符串的长度  -1代表自动计算
    *  参数5 绑定完成的回调函数
    */
    sqlite3_bind_text(stmt, 2, [userName UTF8String], -1, NULL);
    sqlite3_bind_text(stmt, 3, [@"123456" UTF8String], -1, NULL);

    //5执行sql语句
    result = sqlite3_step(stmt);
    if (result == SQLITE_DONE) {
        NSLog(@"数据插入完成");
    }else {
        NSLog(@"数据插入失败");
    }

    //6关闭句柄和数据库
    sqlite3_finalize(stmt);
    sqlite3_close(sqlite);

}
//注:执行的DML sql语句返回值为SQLITE_DONE
sqlite3_step(stmt) == SQLITE_DONE;

DQL 数据查询语言

查询数据
- (void)searchData {

    //1打开数据库文件
    sqlite3 *sqlite = NULL;
    int result = sqlite3_open([kDataBaseFilePath UTF8String], &sqlite);
    if (result != SQLITE_OK ) {
        NSLog(@"数据库打开失败");
        return;
    }
    //2构建SQL语句
    NSString *sqlString = @"SELECT user_name, password FROM user WHERE id > ?";
    //3编译SQL语句
    //构建句柄
    sqlite3_stmt *stmt= NULL;
    //编译语句
    result = sqlite3_prepare_v2(sqlite, [sqlString UTF8String], -1, &stmt, NULL);
    if (result != SQLITE_OK) {
        NSLog(@"语句编译失败");
        sqlite3_close(sqlite);
        return;
    }
    //4绑定数据
    sqlite3_bind_int(stmt, 1, 1050);
    //while循环遍历所有符合条件的数据
    //5执行sql语句
    while (sqlite3_step(stmt) == SQLITE_ROW) {

        //从句柄中读取数据
        NSString *userName = [NSString stringWithFormat:@"%s", sqlite3_column_text(stmt, 0)];
        NSString *password = [NSString stringWithFormat:@"%s", sqlite3_column_text(stmt, 1)];
        NSLog(@"用户名:%@ 密码:%@", userName, password);
    }
    //6关闭句柄 数据库
    sqlite3_finalize(stmt);
    sqlite3_close(sqlite);

}
//注:执行的DQL sql语句返回值为SQLITE_ROW
sqlite3_step(stmt) == SQLITE_ROW;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值