sqlite api使用代码实例

值得注意的是,sqlite2和sqlite3的数据格式不兼容。我用的sqlite是版本2的,导致次程序一直调不通。后来发现才该过来。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
#include <iconv.h>

int main()
{
    sqlite3* pdb = 0;
    sqlite3_stmt* pstmt = 0;
    
    int l1, l2, ret;
    char *p1, *p2;

    char* file1 = "test.db";
    char  file2[32];

    char* sql_sel1 = "select * from test";
    char  sql_sel2[64];
    const char* ptr = 0;
   
    iconv_t cd;

    cd = iconv_open("UTF8", "ASCII");
    if (cd == (iconv_t)-1)
    {
        printf("iconv_open error!/n");
        exit(0);
    }
   
    bzero(file2, 32);
    l1 = strlen(file1);
    l2 = 32;
    p1 = file1;
    p2 = file2;
    while (l1 > 0)
    {
        if (iconv(cd, &p1, &l1, &p2, &l2) == -1)
            break;
    }

    bzero(sql_sel2, 64);
    l1 = strlen(sql_sel1);
    l2 = 64;
    p1 = sql_sel1;
    p2 = sql_sel2;
    while (l1 > 0)
    {
        if (iconv(cd, &p1, &l1, &p2, &l2) == -1)
            break;
    }

    iconv_close(cd);

    if (sqlite3_open(file2, &pdb) != SQLITE_OK)
    {
        printf("sqlite3_open:%s/n", sqlite3_errmsg(pdb));
        exit(0);
    }

    if (sqlite3_prepare(pdb, sql_sel2, strlen((char*)sql_sel2), &pstmt, &ptr) != SQLITE_OK)
    {
        printf("sqlite3_prepare:%s/n", sqlite3_errmsg(pdb));
        exit(0);
    }

    printf("id/tname/n");   
   
    while ((ret = sqlite3_step(pstmt)) != SQLITE_DONE)
    {
        if (ret == SQLITE_BUSY)
            continue;

        if (ret == SQLITE_ERROR)
            break;

        printf("%d/t%s/n", sqlite3_column_int(pstmt, 0), sqlite3_column_text(pstmt, 1));
    }

    sqlite3_finalize(pstmt);

    sqlite3_exec(pdb, "insert into test values(NULL, 'god')", 0, 0, 0);

    sqlite3_close(pdb);

    printf("ok!/n");
}

#compile
gcc -o test -lsqlite3 test.c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQLiteC是一个SQLite数据库的C语言封装库,它允许开发人员使用C语言编写应用程序与SQLite数据库进行交互。SQLiteC提供了多个API函数,用于创建、打开、关闭数据库,执行SQL语句,以及处理结果集等操作。 在使用SQLiteC开发应用程序时,首先需要引入SQLiteC库并初始化该库。然后,可以使用sqlitec_open函数打开一个数据库文件,如果该文件不存在则会创建一个新的数据库。接着,使用sqlitec_exec函数执行SQL语句,实现对数据库的增删改查等操作。 例如,以下代码段打开一个名为test.db的数据库文件,并创建一个名为test_table的表: #include "sqlitec.h" sqlitec_open("test.db"); sqlitec_exec("CREATE TABLE test_table(id INTEGER PRIMARY KEY, name TEXT);"); 当需要插入数据时,可以使用sqlitec_bind_系列函数来设置SQL语句中的占位符,例如以下代码段插入一条数据: sqlitec_stmt stmt = NULL; sqlitec_prepare("INSERT INTO test_table(id, name) VALUES(?, ?);", &stmt); sqlitec_bind_int(stmt, 1, 1); sqlitec_bind_text(stmt, 2, "test"); sqlitec_step(stmt); sqlitec_finalize_stmt(stmt); 上述代码中,使用sqlitec_prepare函数预处理SQL语句,并将结果保存在stmt变量中。使用sqlitec_bind_xxx函数设置占位符的值,其中第一个参数为上述SQL语句中的占位符的位置(从1开始编号),第二个参数为该占位符对应的值。最后,使用sqlitec_step函数执行SQL语句,使用sqlitec_finalize_stmt函数结束预处理。 除了插入数据外,SQLiteC还支持更新、删除和查询操作。例如,以下代码段查询test_table表中所有数据并打印出来: sqlitec_stmt stmt = NULL; sqlitec_prepare("SELECT * FROM test_table;", &stmt); while(sqlitec_step(stmt) == SQLITEC_ROW) { int id = sqlitec_column_int(stmt, 0); const char* name = sqlitec_column_text(stmt, 1); printf("id=%d, name=%s\n", id, name); } sqlitec_finalize_stmt(stmt); 上述代码中,使用sqlitec_column_xxx函数获取每行数据中对应列的值,第一个参数为该列的位置(从0开始编号)。使用while循环遍历结果集,直到sqlitec_step函数返回值不为SQLITEC_ROW,即已遍历完所有行。最后,使用sqlitec_finalize_stmt函数结束预处理。 ### 回答2: SQLite是一款轻量级的关系型数据库,它的使用非常简单和灵活,同时还具有高效、可靠和可扩展的特性。而其中,SQLitc则是SQLite的C语言接口库,可以帮助开发者在自己的应用程序中集成SQLite,从而实现数据存储、查询、更新等操作。 在使用SQLiteC时,需要先创建数据库并打开其中一个或多个连接,然后可以执行各种SQL语句以操作其中的数据。例如,可以使用sqlite3_open()函数打开一个数据库连接,使用sqlite3_exec()函数执行SQL语句,使用sqlite3_prepare_v2()和sqlite3_step()函数执行预编译的SQL语句等等。此外,还可以使用SQLiteC中提供的一系列函数来控制事务、查询表结构、清空表数据等。 值得注意的是,SQLiteC在处理数据时,需要开发者自己注意内存管理和类型转换等问题,以避免出现错误和漏洞。同时,还需要注意数据库连接的线程安全性和异步操作等问题,以确保应用程序的可靠性和性能。 总之,SQLiteC是一款简单、灵活、高效、可靠的C语言接口库,对于需要进行数据存储和查询的应用程序开发者而言,是一款非常实用和有价值的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值