SQLite使用(二)

sqlite3_exec虽然好用,但是一般不推荐直接使用。

常用的一组操作是:

关于sqlite3_exec和sqlite3_prepare_v2的使用场景,建议如下:

一个小DEMO:

#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char **argv)
{
    sqlite3 *db;
    int rc;

    rc = sqlite3_open("test.db", &db);

    if (rc) {
        printf("Can‘t open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    } else {
        printf("Open database successfully\n");
    }

    sqlite3_stmt *stmt = NULL;

    const char *sql = "SELECT * FROM COMPANY";
//    const char *sql = "SELECT * FROM COMPANY WHERE AGE=?;";

    sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);

//    sqlite3_bind_int(stmt, 1, 25);

    int col_count = sqlite3_column_count(stmt);
    printf("该条记录共%d列\n", col_count);

    while (SQLITE_ROW == sqlite3_step(stmt)) {
        int column0_type = sqlite3_column_type(stmt, 0);
        const char *column0_name = sqlite3_column_name(stmt, 0);
        int column0_value = sqlite3_column_int(stmt, 0);
        printf("col: 0 type: %d name: %-10s value: %d\n", column0_type, column0_name, column0_value);

        int column1_type = sqlite3_column_type(stmt, 1);
        const char *column1_name = sqlite3_column_name(stmt, 1);
        const unsigned char *column1_value = sqlite3_column_text(stmt, 1);
        printf("col: 1 type: %d name: %-10s value: %s\n", column1_type, column1_name, column1_value);

        int column2_type = sqlite3_column_type(stmt, 2);
        const char *column2_name = sqlite3_column_name(stmt, 2);
        int column2_value = sqlite3_column_int(stmt, 2);
        printf("col: 2 type: %d name: %-10s value: %d\n", column2_type, column2_name, column2_value);

        int column3_type = sqlite3_column_type(stmt, 3);
        const char *column3_name = sqlite3_column_name(stmt, 3);
        const unsigned char *column3_value = sqlite3_column_text(stmt, 3);
        printf("col: 3 type: %d name: %-10s value: %s\n", column3_type, column3_name, column3_value);

        int column4_type = sqlite3_column_type(stmt, 4);
        const char *column4_name = sqlite3_column_name(stmt, 4);
        double column4_value = sqlite3_column_double(stmt, 4);
        printf("col: 4 type: %d name: %-10s value: %.2f\n", column4_type, column4_name, column4_value);

        printf("\n");
    }
    sqlite3_finalize(stmt);

//    char *zErrMsg = 0;
//    sqlite3_stmt *stmt_insert;
//    const char *sql_insert = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  //    "VALUES (5, ‘Logan‘, 26, ‘California‘, 20000.00 );";
//    sqlite3_prepare_v2(db, sql_insert, -1, &stmt_insert, NULL);
//    if (sqlite3_step(stmt_insert) != SQLITE_DONE) {
//        printf("Insert Table Failed\n");
//        sqlite3_free(zErrMsg);
//    }
//    sqlite3_finalize(stmt_insert);

    sqlite3_close(db);
    return 0;
}

参考资料:

sqlite3_prepare_v2 / sqlite3_exec

[转载] Sqlite c/c++ api学习

时间: 2024-10-10 19:20:24

SQLite使用(二)的相关文章

android数据存储之Sqlite(二)

SQLite学习笔记 前言:上一章我们介绍了sqlite的一些基本知识以及在dos命令下对sqlite进行的增删改查的操作,这一章我们将在android项目中实际来操作sqlite. 1. SQLiteDatabase的介绍 Android提供了创建和是用SQLite数据库的API.SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法.在 Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库.创建表和执行一些SQL语句.下面是SQLiteDatabas

FireDAC中的SQLite(二)

我们接下来将要使用FDDemo.sdb数据库进行访问,开始我们的第一个SQLite访问例子. 我们的FDDemo.sdb存放目录在:C:\Program Files (x86)\Embarcadero\Studio\14.0\Samples\Data 新建VCL Forms Application 在XE6 IDE中按 Ctrl + . 键,快速输入 VCL Forms Application,回车后新建了一个VCL Forms Application应用程序. 添加FireDAC相关组件 继续

Android中用文件初始化sqlite 数据库(二)

博 androidsqlite启动时数据库初始化 方法1已经讲述了一种初始化数据库的方法 它的数据库初始化不是用sql语句,而是用一个现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径中.我一方面不太放心这种二进制文件的直接copy,另一方面,如果sqlite数据库的二进制结构有所升级或变动,我的程序就无法对所有sqlite版本兼容了. 方法2:在启动时,执行sql文件进行数据库初始化. SQLiteOpenHelper的onCreate仅在程序第一次使用数据库时执行

SQLite基础-8.子句(二)

目录 SQLite子句(二) 1. GROUP BY子句 2. HAVING子句 3. LIMIT 子句 SQLite子句(二) 1. GROUP BY子句 GROUP BY子句与SELECT语句一起使用,对数据进行分组. 位置:放在WHERE子句后,放在ORDER BY子句之前. -- 语法 SELECT * FROM table_name WHERE [condition] GROUP BY column1,, column2,.. ORDER BY column1 DESC; -- 实例

SQLite学习笔记(六)&amp;&amp;共享缓存

介绍 通常情况下,sqlite中每个连接都会一个独立的pager对象,pager对象中管理了该连接的缓存信息,通过pragma cache_size指令可以设置缓存大小,默认是2000个page,每个page是1024B.这样导致了对于同一个数据文件,多个连接各自维护了自己的一份缓存,在高并发情况下,可能导致使用大量的内存.而sqlite作为一个嵌入式数据库,通常用于嵌入式设备,内存可能比较有限,为了应对这种问题,sqlite提供了一种方法,通过让多个连接公用一个pager对象,共享同一份缓存.

Sqlite嵌入式数据库的安装、建库、建表、更新表结构以及数据导入导出等等详细过程记录

简介: SQLite 是实现了SQL 92标准的一个大子集的嵌入式数据库.其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中而著名.我觉得SQLite的功能一定程度上居于MySQL 和PostgreSQL之间.尽管如此,在性能上面,SQLite常常快2-3倍 (甚至更多).这利益于其高度调整了的内部架构,因为它除去了服务器端到客户端和客户端到服务器端的通信. 而令人印象深刻的特点是你可将你的整个数据库系统放在其中.利用非常高效的内存组织,SQLite只需在很小的内存中维护其很小的

sqlite 数据库 相关知识

一基本简单介绍 SQLite 是一个自持的(self-contained).无server的.零配置的.事务型的关系型数据库引擎.由于他非常小,所以也能够作为嵌入式数据库内建在你的应用程序中. SQLite 被应用在 Solaris 10操作系统.Mac OS 操作系统.iPhone 和 Skype 中. QT4 .Python . PHP 都默认支持 SQLite ,Firefox Amarok 等流行的应用程序在内部也使用了 SQLite. SQLite   数据库引擎实现了基本的 SQL-

ios开发学习笔记--数据持久化之数据库(SQLite.swift)

数据持久化之SQLite数据库(SQLite.swift使用) 一.     简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还快.SQLite提供的是一些C函数接口,你可以用这些函数操作数据库.通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 SQLite函数,SQLite就会为你操作数据库 一个数据库中的表就算是一个文件,一般是将这个文件放

简单的Sqlite使用方法

Sqlite的作用不言而喻,就是帮助开发者建立本地数据库,存储一些基本信息.不做过多阐述,需要的深入了解的可以找度娘,本文是针对Sqlite小白在使用上提供一些实例. 一.导入Sqlite.swift pod 'SQLite.swift' 二.建立数据库实例 以下表字段做实例说明. (1)与数据库建立连接 //与数据库建立连接 mutating func connectDataBase(filePath:String = "/Documents") -> Void { let s