SQLite在iOS中的使用

来源:互联网 发布:淘宝怎么开直播卖衣服 编辑:程序博客网 时间:2024/05/22 17:38

先导入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_OKsqlite3_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_DONEsqlite3_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_ROWsqlite3_step(stmt) == SQLITE_ROW;
0 0
原创粉丝点击