当前位置: 首页 > article >正文

ubuntu 下的sqlite3

What Is SQLite?

SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world

 ps:SQLite Home Page

sqlite3 的安装:

user@user-virtual-machine:~$ sqlite3

Command 'sqlite3' not found, but can be installed with:

sudo apt install sqlite3

user@user-virtual-machine:~$ sudo apt install sqlite3

还需要安装开发库呢

sudo apt-get update
sudo apt-get install libsqlite3-dev

可视化工具:sudo apt-get install sqlitebrowser

 命令行方式创建表:

$ sqlite3 ex1
SQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
sqlite> create table tbl1(one text, two int);
sqlite> insert into tbl1 values('hello!',10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>

ps:Command Line Shell For SQLite :  Command Line Shell For SQLite

程序方式创建数据库与表:

Below is a simple C program that demonstrates how to use the C/C++ interface to SQLite. The name of a database is given by the first argument and the second argument is one or more SQL statements to execute against the database. The function calls to pay attention to here are the call to sqlite3_open() on line 22 which opens the database, sqlite3_exec() on line 28 that executes SQL commands against the database, and sqlite3_close() on line 33 that closes the database connection

01  #include <stdio.h>
02  #include <sqlite3.h>
03  
04  static int callback(void *NotUsed, int argc, char **argv, char **azColName){
05    int i;
06    for(i=0; i<argc; i++){
07      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
08    }
09    printf("\n");
10    return 0;
11  }
12  
13  int main(int argc, char **argv){
14    sqlite3 *db;
15    char *zErrMsg = 0;
16    int rc;
17  
18    if( argc!=3 ){
19      fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
20      return(1);
21    }
22    rc = sqlite3_open(argv[1], &db);
23    if( rc ){
24      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
25      sqlite3_close(db);
26      return(1);
27    }
28    rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
29    if( rc!=SQLITE_OK ){
30      fprintf(stderr, "SQL error: %s\n", zErrMsg);
31      sqlite3_free(zErrMsg);
32    }
33    sqlite3_close(db);
34    return 0;
35  }

打开数据库连接   sqlite3_open(dbname,sqlite3 * db)

                查询、操作;   sqlite3_exec(sqlite3 * db,argv[2],callback,)

               处理查询操作结果的地方

关闭数据库连接   sqlite3_close(sqlite3 * db)

去掉行号的版本: 

  #include <stdio.h>
  #include <sqlite3.h>
  
  static int callback(void *NotUsed, int argc, char **argv, char **azColName){
    int i;
    for(i=0; i<argc; i++){
      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");
    return 0;
  }
  
  int main(int argc, char **argv){
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;
  
    if( argc!=3 ){
      fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
      return(1);
    }
    rc = sqlite3_open(argv[1], &db);
    if( rc ){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      sqlite3_close(db);
      return(1);
    }
    rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
    if( rc!=SQLITE_OK ){
      fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
    }
    sqlite3_close(db);
    return 0;
  }

 测试:

./testSqlite hslg "create table tbl1(one text, two int)"

An Introduction To The SQLite C/C++ Interface:An Introduction To The SQLite C/C++ Interface

c连接sqlite  内容不多:

有兴趣的同学自己查官网去。

这里只对sqlite3_exec() 回调函数做个说明:

int sqlite3_exec(
  sqlite3*,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);

 sqlite3_exec 函数是 SQLite 库中的一个重要函数,用于执行一条或多条 SQL 语句。这个函数允许用户指定一个回调函数,以便在 SQL 语句执行过程中(比如查询结果返回时),对每一行数据或特定的 SQL 命令执行结果进行处理。下面是对回调函数的详细说明:

回调函数原型

int callback(void *NotUsed, int argc, char **argv, char **azColName);

 参数说明

  • void *NotUsed
    • 这是一个传递给回调函数的用户定义指针,通常用于传递一些上下文信息或状态信息给回调函数。在 sqlite3_exec 的调用中,这个参数对应于第四个参数(void * 类型)。
    • 虽然在回调函数中这个参数被命名为 NotUsed(意味着在某些情况下可能不被使用),但它是非常有用的,特别是当你需要在回调函数中访问一些外部变量或对象时。
  • int argc
    • 表示当前行的列数。对于查询语句,这个值等于 SELECT 语句中选择的列数。
    • 对于非查询语句(如 INSERT、UPDATE、DELETE),这个值通常为 0,因为这些语句不返回数据行。
  • char **argv
    • 这是一个指向字符串数组的指针,数组中的每个元素都是一个指向列值的字符串。
    • argv[0] 到 argv[argc-1] 包含了当前行的所有列值。
    • 对于非查询语句,argv 通常是 NULL。
  • char **azColName
    • 这是一个指向字符串数组的指针,数组中的每个元素都是一个指向列名的字符串。
    • azColName[0] 到 azColName[argc-1] 包含了当前结果集的列名。
    • 这个数组对于在回调函数中区分不同的列非常有用。

返回值

  • 回调函数应该返回一个整数。如果返回非零值,sqlite3_exec 会立即停止执行,并返回这个非零值给它的调用者。这允许在回调函数内部基于某些条件提前终止 SQL 语句的执行。
  • 如果返回 0,sqlite3_exec 会继续执行下一条 SQL 语句(如果有的话),或者完成当前的执行。

使用场景

  • 当你需要处理查询结果集中的每一行数据时,可以在回调函数中实现逻辑。
  • 当你需要在执行某些 SQL 语句(如 INSERT、UPDATE、DELETE)后执行一些后处理逻辑时,也可以利用这个回调机制(尽管对于这类语句,argc 和 argv 通常是 0)。
int myCallback(void *NotUsed, int argc, char **argv, char **azColName) {
    for(int i = 0; i < argc; i++) {
        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");
    return 0; // 返回0表示继续执行
}

// 调用 sqlite3_exec
sqlite3_exec(db, "SELECT * FROM my_table;", myCallback, 0, &errmsg);

        在这个示例中,myCallback 函数被用作 sqlite3_exec 的回调函数,用于打印查询结果集中的每一行数据。

test 方法:

1 插入值

2 调用查询 观察终端输出结果

./testSqlite hslg "select * from tbl1"

运行效果:


http://www.kler.cn/a/442434.html

相关文章:

  • 【进程与线程】进程的状态
  • Web3D交互展示:重塑产品展示的新维度
  • 嵌入式系统Linux实时化(四)Xenomai应用开发测试
  • Python文件操作中编码解码问题
  • 微信小程序实现个人中心页面
  • django在线考试系统
  • 4、基于SpringBoot网页时装购物系统
  • linux - 软硬链接
  • 小程序-基于java+SSM+Vue的模拟考试管理系统设计与实现
  • 青少年编程与数学 02-004 Go语言Web编程 01课题、Web应用程序
  • 5分钟掌握nodejs所有功能使用
  • 【UE5】pmx导入UE5,套动作。(防止“气球人”现象。
  • 【信息系统项目管理师-论文真题】2017上半年论文详解(包括解题思路和写作要点)
  • 二、windows环境下vscode使用wsl教程
  • 2019陕西ICPC-Grid with Arrows
  • Webpack常见的loader有哪些?
  • uniapp 微信小程序 均分数据展示
  • 递归:原理、应用与最佳实践
  • Android显示系统(13)- 向SurfaceFlinger提交Buffer
  • golang 使用gzip对json例子
  • 使用LSTM神经网络对股票日线行情进行回归训练(Pytorch版)
  • SpringBoot3-整合WebSocket指南
  • milvus 支持向量化索引的方法
  • 【Linux学习】十五、Linux/CentOS 7 用户和组管理
  • P8772 [蓝桥杯 2022 省 A] 求和
  • “包” 管理工具