• c++之SQLite的增删改查


    sqlite3 *db;
    sqlite3_stmt * stmt;
    const char *zTail;

    //创建Table
    sqlite3_prepare(db, "create....", -1, &stmt, &zTail);
    sqlite3_step();
    sqlite3_finalize(stmt);

    //插入数据: 注意绑定时候的索引从0开始; 最好加入事务处理
    sqlite3_transaction trans(db);
    sqlite3_prepare(db, "INSERT INTO players (name,num) VALUES(?,?);", -1, &stmt, &zTail);
    sqlite3_bind_text(stmt, 1, str, -1, SQLITE_STATIC);
    sqlite3_bind_int(stmt, 2, n);
    sqlite3_step(stmt);
    sqlite3_reset(stmt); // 重置后可继续插入第二行记录

    sqlite3_bind_text(stmt,1,str2,-1,SQLITE_STATIC);
    sqlite3_bind_int(stmt,2,n2);
    sqltie3_step(stmt);
    sqlite3_finalize(stmt);
    trans.commit();

    //查询所有数据:列的下标是从0开始
    sqlite3_prepare(db,"SELECT ID, name, num FROM players ORDER BY num;", -1,&stmt,&zTail);
    sqlite3_step(stmt);
    while( r == SQLITE_ROW ) {
        int id = sqlite3_column_int( stmt, 0 );
        char* name = sqlite3_column_text( stmt,1 );
        number = sqlite3_column_int( stmt, 2 );
        sqlite3_step(stmt);
    }
    sqlite3_finalize(stmt);

    // 注释说明
    ** 调用sqlite3_prepare()将SQL语句编译为sqlite内部一个结构体(sqlite3_stmt).该结构体中包含了将要执行的的SQL语句的信息.
    ** 如果需要传入参数,在SQL语句中用'?'作为占位符, 再调用bind_传入参数
         sqlite3_bind_XXX()函数将对应的参数传入
         sqlite3_reset()来清楚已经绑定的参数
    ** 调用sqlite3_step()这时候SQL语句才真正执行;注意它只返回一行数据!!
    ** 调用sqlite3_finalize()来释放stmt占用的内存,该内存是在sqlite3_prepare()时分配的.

  • 相关阅读:
    SDWebImage缓存下载图片
    NSMutableUrlRequest自定义封装网络请求
    第152题:乘积最大子序列
    第142题:环形链表II
    第17题:电话号码的组合
    第129题:求根到叶子节点数字之和
    第125题:验证回文串
    第122题:买卖股票的最佳时机II
    第121题:买卖股票的最佳时机
    第120题:三角形最小路径和
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693657.html
Copyright © 2020-2023  润新知