SQLite在iOS中的使用

先导入sqlite3.h的头文件

#import "ViewController.h"
//导入SQLite3的头文件
#import 
//宏定义数据库文件路径
#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;

你可能感兴趣的:(iOS高级)