c语言sqliteupdate的简单介绍

发布时间:2023-01-08

本文目录一览:

  1. C语言访问SQLite数据库报错
  2. 怎么用C语言更新mysql中的数据?
  3. 如何在Linux下用C/C++语言操作数据库sqlite3
  4. 用C语言做个sqlite数据库~

C语言访问SQLite数据库报错

我用 sqlite3.7.10 都没有任何问题,不过我没试过楼主直接用 dos 的这个方法。 另外就是自己做的 lib 文件要放倒 lib 文件夹里,sqlite3.dll 文件要放到 system32 文件夹里,64 位操作系统要放到 syswow64 文件夹里,这里要注意并不是每个版本的 sqlite3.dll 文件都适合自己的机器,我也是试了好多次才成功。 不知道能不能帮到你,刚才是我的全部理解了。

怎么用C语言更新mysql中的数据?

更改数据库值 和语言关系不大,这是对数据库的操作 你只需按照 mysql 操作方法 update 表 set 字段=新值 where 条件id=1; 就可以更改数据库内某个指定的值了。至于怎么显示 怎么赋值 那些才是语言的事情,只要对数据库数据的操作 都是 数据库的事情

如何在Linux下用C/C++语言操作数据库sqlite3

SQLite数据库特点

  1. SQLite 数据库是开源的嵌入式数据库,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过 API,应用程序可以直接操作它。
  2. 事务的处理是原子的,一致的,独立的,可持久化的 (ACID),即使在系统崩溃和掉电后。
  3. SQLite 数据库通过独占性与共享锁来实现事务的独立处理。
  4. 一个单独的跨平台的磁盘文件就能够存储一个数据库。
  5. 能支持 2TB 级的数据。
  6. 自包含,无外部依赖性。
  7. 支持 NULL,INTEGER, NUMERIC, REAL, TEXT 和 BLOG 等数据类型。
  8. SQLite 数据库没有用户帐户的概念。数据库的权限仅依赖于文件系统。

SQLite数据库的基本操作

  1. 建立数据库
    sqlite3 data.sqlite3
    
    在当前目录下建立了名为 data.sqlite3 的数据库。
  2. 建立数据表
    create table call_list(
        id INTEGER PRIMARY KEY,
        type NUMERIC,
        telnum NUMERIC,
        bttime TEXT,
        tcount NUMERIC,
        charge_rate NUMERIC,
        charge_sum NUMERIC
    );
    
    建立了名为 call_list 的数据表,有 7 个字段,分别为 id, type, telnum, bttime, tcount, charge_sum, charge_rate
  3. 向数据表中插入数据
    insert into call_list values($num, 1, 2, 'new', 4, 5, 6);
    
  4. 查询数据表中的数据
    select * from call_list;
    
  5. 修改 call_list 表中的数据
    update call_list set id=00001000 where id=10001;
    
  6. 删除表中的数据记录
    delete from call_list where id=1000;
    
  7. SQLite 中的其它常用命令
    • .tables - 列出所有的数据库中的数据表
    • .schema tablename - 列出指定数据表的结构
    • .quit - 离开数据库
  8. SQLite 数据库的导入与导出 a. 将 data.sqlite 数据库的数据全部导出:
    sqlite3 data.sqlite .output dd.sql
    .dump
    
    这样,数据就保存在 dd.sql 的文件中,注意这个文件不是数据库,而是 SQL 语句。然后再把这些数据导入到另外一个数据库 data1.sqlite 数据库中。
    sqlite3 data1.sqlite .read dd.sql
    
    这样,数据就从 data.sqlite 数据库复制到 data1.sqlite 数据库中去了。 b. 将数据表中的数据导出到 a.txt 中去。
    .output a.txt
    select * from call_list;
    
    c. 将导出的表中的数据导入到另一个数据库的新建的表中去如:当从 data.sqlite 中的 call_list 表中导出了数据,再导入到另外一个数据库表 call 中去。首先建立表 call。然后:
    .import a.txt call
    

C语言操作Sqlite数据库API

  • int sqlite3_open(const char *filename, sqlite3 **ppdb);
    第一个参数用来指定数据库文件名。第二个参数是一个数据库标识符指针。如果打开数据库成功,则返回 0,否则返回一个错误代码。
  • int sqlite3_close(sqlite3 *);
    传递的参数是数据库标识符指针用来关闭数据库,操作成功是返回 0,否则返回一个错误代码。
  • int sqlite3_errcode(sqlite3 *db);
    const char *sqlite3_errmsg(sqlite3 *db);
    const char *sqlite3_errmsg16(sqlite3 *db);
    这三个函数都是返回错误信息,第一个函数返回的是最近调用数据库接口的错误代码,第二,第三个函数是返回最近调用数据库接口的错误信息。第二个函数返回的错误信息是用 UTF-8 编码的,第三个函数返回的错误信息是用 UTF-16 编码的。
  • int sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, **errmsg);
    这个函数非常重用,是用来执行 SQLite 数据库的 SQL 语句的。第一个参数是 sqlite 数据库标识符指针。第二个参数是要执行的 SQL 语句。第三个参数是一个回调函数,在执行查询操作时用到,其它的操作可以传空值即 NULL。第四个参数是传递给回调函数第一个参数的实参。第五个参数是一个错误信息。 回调函数:
    int callback(void *, int argc, char **argv, char **cname);
    
    第一个参数是从 sqlite3_exec 传递过来的参数,可以为任意的类型。第二个参数是查询的列数。第三个参数是查询结果集的值。第四个参数是列名。
  • int sqlite3_get_table(sqlite3 *db, const char *sql, char ***result, int *row, int *col, char **errmsg);
    这个函数主要是用来查询的。第一个参数是数据库描述符指针。第二个参数是 SQL 语句。第三个参数是查询的结果集。第四个参数是结果集中的行数。第五个参数是结果集中的列数。第六个参数是错误信息。它查询出的行数是从字段名开始的。即第 0 行是字段名。

实例

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
int _call_back(void* arg, int argc, char** argv, char** cname);
int main() {
    int res;
    const char* dbfile = "data.sqlite1";
    char* errmsg = NULL;
    sqlite3* db;
    res = sqlite3_open(dbfile, &db);
    if (res != 0) {
        perror("数据库打开失败");
        exit(EXIT_FAILURE);
    }
    // 创建一张数据表
    const char* sqlcreate = "create table call_list(id INTEGER PRIMARY KEY, type NUMERIC, telnum NUMERIC, bttime TEXT, tcount NUMERIC, charge_rate NUMERIC, charge_sum NUMERIC)";
    res = sqlite3_exec(db, sqlcreate, NULL, NULL, &errmsg);
    if (res != 0) {
        perror("建立数据表失败");
        exit(EXIT_FAILURE);
    }
    // 插入100000条数据
    int num = 0;
    struct timeval tv;
    gettimeofday(&tv, NULL);
    long old = tv.tv_sec;
    while (num < 100000) {
        const char* sqlinsert = "insert into call_list values($num, 1, 2, 'new', 4, 5, 6)";
        res = sqlite3_exec(db, sqlinsert, NULL, NULL, &errmsg); // 插入时不需要用到回调函数
        if (res != 0) {
            perror("插入失败");
            exit(EXIT_FAILURE);
        }
        num++;
    }
    gettimeofday(&tv, NULL);
    printf("插入100000条数据的时间为:%d秒\n", (tv.tv_sec - old));
    // 更新
    const char* sqlupdate = "update call_list set id=00001000 where id=10001";
    res = sqlite3_exec(db, sqlupdate, NULL, NULL, &errmsg);
    if (res != 0) {
        perror("更新数据失败");
        exit(EXIT_FAILURE);
    }
    // 删除
    const char* sqldelete = "delete from call_list where id=1000";
    res = sqlite3_exec(db, sqldelete, NULL, NULL, &errmsg);
    if (res != 0) {
        perror("删除数据失败");
        exit(EXIT_FAILURE);
    }
    // 查询
    const char* sqlquery = "select * from call_list";
    res = sqlite3_exec(db, sqlquery, _call_back, NULL, &errmsg);
    if (res != 0) {
        printf("%s\n", errmsg);
        perror("执行失败\n");
        exit(EXIT_FAILURE);
    }
    res = sqlite3_close(db);
    if (res != 0) {
        perror("数据库关闭失败");
        exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
}
int _call_back(void* arg, int argc, char** argv, char** cname) {
    int i;
    // 二重指针可以看成指针数组
    for (i = 0; i < argc; i++) {
        printf("%s = %s\n", cname[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");
    return 0;
}

用C语言做个sqlite数据库~

  1. 打开 VC 新建一个“Win32 Dynamic-Link Library”工程,命名为: sqlite3
  2. 在接下来的对话框中选择 "An empty DLL project", 点 FINISH-OK
  3. 将源码中所有的 *.c *.h *.def 复制到工程文件夹下
  4. 在工程的 Source File 中添加你下载到的 SQLite 源文件中所有 *.c 文件,注意这里不要添加 shell.ctclsqlite.c 这两个文件。
  5. 将 SQLite 源文件中的 sqlite3.def 文件添加到在工程的 Source File 中
  6. 在 Header File 中添加你下载到的 SQLite 源文件中所有 *.h 文件
  7. 开始编译, Build(F7) 也许到这里会遇到一个错误:
e:\zieckey\sqlite\sqlite3\sqlite3ext.h(22) : fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory

经检查发现,源码中包含 sqlite3.h 都是以 #include <sqlite3.h> 方式包含的,这就是说编译器在系统默认路径中搜索,这样当然搜索不到 sqlite3.h 这个头文件啦,这时可以改为 #include "sqlite3.h",让编译器在工程路径中搜索,但是如果还有其他地方也是以 #include <sqlite3.h> 方式包含的,那么改源码就显得有点麻烦,好了,我们可以这样,在菜单栏依次选择:Tools -> Options... -> Directories,在下面的 Directories 选项中输入你的 sqlite3.h 的路径,这里也就是你的工程目录。 添加好后,我们在编译一下就好了,最后我们在工程目录的 Debug 目录生成了下面两个重要文件:

  • 动态链接库文件 sqlite3.dll
  • 引入库文件 sqlite3.lib

使用动态链接库

下面我们来编写个程序来测试下我们的动态链接库。在 VC 下新建一个空的 "Win32 Console Application" Win32 控制台程序,工程命名为: TestSqliteOnWindows 再新建一个 test.cpp 的 C++ 语言源程序,源代码如下:

// name: test.cpp
// This prog is used to test C/C++ API for sqlite3 .It is very simple, ha !
// Author : zieckey
// data : 2006/11/28
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_
int main(void) {
    sqlite3 *db = NULL;
    char *zErrMsg = 0;
    int rc;
    rc = sqlite3_open("zieckey.db", &db); // 打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
    if (rc) {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return (1);
    } else {
        printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^\n");
    }
    // 其他数据库操作...
    sqlite3_close(db);
    return 0;
}