zoukankan      html  css  js  c++  java
  • SQLite编码

    •SQLite编码
    •讲师:李明杰
    •技术博客:http://www.cnblogs.com/mjios
    •SQLite3
    •在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件
    •创建、打开、关闭数据库
    •创建或打开数据库

    // path为:~/Documents/person.db

    sqlite3 *db = NULL;

    int result = sqlite3_open([path UTF8String], &db);

    •代码解析:
    usqlite3_open()将根据文件路径打开数据库,如果不存在,则会创建一个新的数据库。如果result等于常量SQLITE_OK,则表示成功打开数据库
    usqlite3 *db:一个打开的数据库实例
    u数据库文件的路径必须以C字符串(而非NSString)传入
    •关闭数据库:sqlite3_close(db);
    •执行不返回数据的SQL语句
    •执行创表语句

    char *errorMsg = NULL;  // 用来存储错误信息

    char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";

    int result = sqlite3_exec(db, sql, NULL, NULL, &errorMsg);

    •代码解析:
    usqlite3_exec()可以执行任何SQL语句,比如创表、更新、插入和删除操作。但是一般不用它执行查询语句,因为它不会返回查询到的数据
    usqlite3_exec()还可以执行的语句:
    ①开启事务:begin transaction;
    ②回滚事务:rollback;
    ③提交事务:commit;
    •带占位符插入数据

    char *sql = "insert into t_person(name, age) values(?, ?);";

    sqlite3_stmt *stmt;

    if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {

        sqlite3_bind_text(stmt, 1, "母鸡", -1, NULL);

        sqlite3_bind_int(stmt, 2, 27);

    }

    if (sqlite3_step(stmt) != SQLITE_DONE) {

        NSLog(@"插入数据错误");

    }

    sqlite3_finalize(stmt);

    •代码解析:
    usqlite3_prepare_v2()返回值等于SQLITE_OK,说明SQL语句已经准备成功,没有语法问题
    •带占位符插入数据
    usqlite3_bind_text():大部分绑定函数都只有3个参数
    ①第1个参数是sqlite3_stmt *类型
    ②第2个参数指占位符的位置,第一个占位符的位置是1,不是0
    ③第3个参数指占位符要绑定的值
    ④第4个参数指在第3个参数中所传递数据的长度,对于C字符串,可以传递-1代替字符串的长度
    ⑤第5个参数是一个可选的函数回调,一般用于在语句执行后完成内存清理工作
    usqlite_step():执行SQL语句,返回SQLITE_DONE代表成功执行完毕
    usqlite_finalize():销毁sqlite3_stmt *对象
    •查询数据

    char *sql = "select id,name,age from t_person;";

    sqlite3_stmt *stmt;

    if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {

        while (sqlite3_step(stmt) == SQLITE_ROW) {

            int _id = sqlite3_column_int(stmt, 0);

            char *_name = (char *)sqlite3_column_text(stmt, 1);

            NSString *name = [NSString stringWithUTF8String:_name];

            int _age = sqlite3_column_int(stmt, 2);

            NSLog(@"id=%i, name=%@, age=%i", _id, name, _age);

        }

    }

    sqlite3_finalize(stmt);

    •代码解析
    usqlite3_step()返回SQLITE_ROW代表遍历到一条新记录
    usqlite3_column_*()用于获取每个字段对应的值,第2个参数是字段的索引,从0开始
  • 相关阅读:
    国内各地图API坐标系统比较与转换
    ubuntu下安装程序的三种方法
    使用微信公众平台测试账号开发“网页授权获取用户基本信息”功能
    centos中crontab(计时器)用法详解
    vb随机移动鼠标
    js中对函数设置默认参数值的3种方法
    Ubuntu 16.04安装配置VSFTPD(支持TLS/SSL加密)
    Spark scheduler
    Spark shuffle
    Spark存储体系
  • 原文地址:https://www.cnblogs.com/niexiaobo/p/4888682.html
Copyright © 2011-2022 走看看