SQLite的应用

1》打开数据库并创表:

 // 获得数据库文件的路径
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filename = [doc stringByAppendingPathComponent:@"students.sqlite"];
    // 将OC字符串 转成 C语言字符串
    const char *cfilename = filename.UTF8String;
    // 1.打开数据库(如果数据库文件不存在,sqlite3_open函数会自动创建数据库文件)
    int result = sqlite3_open(cfilename, &_db);
    if (result == SQLITE_OK) { // 打开成功
        NSLog(@"成功打开数据库");
        
        // 2.创表
        const char *sql = "CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);";
        char *erroMsg = NULL;
        result = sqlite3_exec(self.db, sql, NULL, NULL, &erroMsg);
        if (result == SQLITE_OK) {
            NSLog(@"成功创表");
        } else {
//            printf("创表失败--%s--%s-%d", erroMsg, __FILE__, __LINE__);
            NSLog(@"创表失败--%s--%@-%d", erroMsg, [NSString stringWithUTF8String:__FILE__], __LINE__);
        }
    } else {
        NSLog(@"打开数据库失败");
    }

2》操作数据库

<1>插入数据:

for (int i = 0; i<20; i++) {
        // 1.拼接SQL语句
        NSString *name = [NSString stringWithFormat:@"Jack-%d", arc4random_uniform(100)];
        int age = arc4random_uniform(20) + 30;
        NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name, age) VALUES ('%@', %d);", name, age];
        
        // 2.执行SQL语句
        char *erroMsg = NULL;
        sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &erroMsg);
        if (erroMsg) {
            NSLog(@"插入数据失败--%s", erroMsg);
        } else {
            NSLog(@"成功插入数据");
        }
    }

<2>查询数据

 const char *sql = "SELECT id, name, age FROM t_student WHERE age <= 30;";
    // 进行查询前的准备工作
    // -1 代表系统会自动计算SQL语句的长度
    // sqlite3_stmt:用来取数据
    sqlite3_stmt *stmt = NULL;
    if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL) == SQLITE_OK) { // SQL语句没有问题
        NSLog(@"查询语句没有问题");
        
        // 每调一次sqlite3_step函数,stmt就会指向下一条记录
        while (sqlite3_step(stmt) == SQLITE_ROW) { // 找到一条记录
            // 取出数据
            
            // 取出第0列字段的值(int类型的值)
            int ID = sqlite3_column_int(stmt, 0);
            
            // 取出第1列字段的值(tex类型的值)
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            
            // 取出第2列字段的值(int类型的值)
            int age = sqlite3_column_int(stmt, 2);
            
            NSLog(@"%d %s %d", ID, name, age);
        }
    } else {
        NSLog(@"查询语句有问题");
    }
原文地址:https://www.cnblogs.com/Fc-ios/p/3896131.html