数据库编程——sqlite3

打印 上一主题 下一主题

主题 881|帖子 881|积分 2645

目次
一、启动与退出
二、数据库创建与维护
三、尺度 SQL 语句
创建表:
删除表:
向表中增长数据:
查询表中的数据:
修改表中数据:
删除表中数据:
四、补充内容
数据库编程 
一、sqlite3_open
二、sqlite3_exec
三、sqlite3_close
代码示例 


一、启动与退出


  • 启动 SQLite3:

    • 使用命令sqlite3 xxx.db可以打开一个名称为xxx.db的本地数据库。出现sqlite>提示符表明数据库管理系统启动。
    • 比方:sqlite3 test.db。

  • 退出数据库:

    • 使用.q命令退出。如果不停出现...>符号,则写;结束当前输入后再使用.q命令退出。

二、数据库创建与维护


  • 创建一个数据库:

    • 方法一:使用touch xxx.db创建一个空文件,然后使用sqlite3 xxx.db启动数据库管理系统并关联该文件。
    • 方法二:直接使用sqlite3 xxx.db,如果文件不存在,会主动创建一个新的数据库文件。

  • 系统维护命令:

    • .help:列出全部相关的系统维护命令,都是以 “.” 开头。
    • .database:列出当前库和系统中哪个文件在关联。
    • .tables:列出当期数据库中的全部表。
    • .schema xxx:列出当前指定的xxx表布局。
    • 数据导出:sqlite3 test.db.dump > 123.sql,将数据库名称为test的数据库整体导出到脚本中。
    • 数据导入:sqlite3 xxx.db < test.sql,将脚本中的数据导入到数据库xxx.db中。

               这里的 > :表示输出重定向   < :表示输入重定向。
三、尺度 SQL 语句


  • 创建表:

    • 语法:create table 表名(表字段 1 范例,表字段 2 范例,...)。
    • 支持的数据范例有int(整数)、text(无巨细限制)、real(小数)、blob(二进制数据),默认是text范例。
    • 比方:create table user(id int,name char,age int)。

  • 删除表:

    • 语法:drop table 表名。
    • 比方:drop table user。

  • 向表中增长数据:

    • 语法一:insert into 表名 (字段名称) values (值名称)。
    • 比方:insert into user (id,age) values (1,10)。
    • 语法二:insert into 表名 values(值 1,值 2,...)。
    • 比方:insert into user values(3,"wang",11)。

  • 查询表中的数据:

    • 语法:select 列名 from 表名 [条件],条件不是必须。
    • 比方:

      • select * from user(查看全部列)。
      • select id from user。                                                                                       
      • select id,name from user where age<25。                                                       
      • where name like '三一'(%和_为通配符)。                                                     
      • select * from user where age>20 or age<50 order by age desc limit 2。


  • 修改表中数据:

    • 语法:update 表名 set 表字段 = 值 [满意条件]。
    • 比方:

      • update user set id = 1 where name = 'li'。
      • update user set id = 1 where name = "li" and passwd = "123"。
      • update user set id = 2 where name = "li" or name = "zhao"。


  • 删除表中数据:

    • 语法:delete from 表名 [满意条件]。
    • 比方:

      • delete from user(删除表中全部数据)。
      • delete from user where id = 1(删除id=1的数据)。
      • delete from user where id =1 and name = "zhang"。
      • delete from user where id = 1 or id = 2。


四、补充内容


  • 时间列的处理:

    • 可以在表中添加时间列,比方CREATE TABLE user1(id int,name char,age int,dt datetime)。
    • 插入时间值可以使用datetime('now','+8 hours')获取当前时间加上 8 小时的时间值。
    • 比方:insert into user1 values (2,'张三',23,datetime('now','+8 hours'))。

  • 主动增长列:

    • 创建表时可以将一个整数列设置为主键并指定自增长属性,比方CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime)。
    • 插入数据时可以使用NULL作为该列的值,数据库会主动分配一个自增长的值。比方:insert into user3 (NULL,'李四',23,datetime('now'))。

数据库编程 

一、sqlite3_open

  1. int sqlite3_open(const char *filename, sqlite3 **ppDb);
复制代码

  • 功能:这个函数用于打开一个 SQLite 数据库文件。如果数据库文件不存在,SQLite 可能会根据具体情况创建一个新的数据库文件。
  • 参数:

    • filename:指向要打开的数据库文件名的字符串。可以是相对路径或绝对路径。
    • ppDb:是一个指向 sqlite3 布局体指针的指针。函数乐成实行后,这个指针将指向一个打开的数据库毗连。

  • 返回值:

    • 如果乐成打开数据库,函数返回 SQLITE_OK(0)。
    • 如果发生错误,返回一个错误码。

二、sqlite3_exec

  1. int sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg );
复制代码

  • 功能:用于实行一条或多条 SQL 语句。可以实行各种 SQL 操作,如创建表、插入数据、查询数据、更新数据、删除数据等。
  • 参数:

    • sqlite3*:一个打开的数据库毗连指针。
    • sql:要实行的 SQL 语句字符串。可以是单个 SQL 语句或多个 SQL 语句的序列,以分号分隔。
    • callback:一个回调函数,每当实行一个查询语句并返回结果时,这个回调函数会被调用。如果不必要处理查询结果,可以设置为 NULL。
    • void *:一个用户提供的指针,可以在回调函数中使用,通常用于传递上下文信息。
    • errmsg:如果发生错误,这个指针将被设置为指向一个包含错误信息的字符串。

  • 返回值:

    • 如果乐成实行 SQL 语句,函数返回 SQLITE_OK(0)。
    • 如果发生错误,返回一个错误码。

三、sqlite3_close

  1. int sqlite3_close(sqlite3*);
复制代码

  • 功能:用于关闭一个之前打开的 SQLite 数据库毗连。
  • 参数:

    • sqlite3*:要关闭的数据库毗连指针。

  • 返回值:

    • 如果乐成关闭数据库毗连,函数返回 SQLITE_OK(0)。
    • 如果发生错误,返回一个错误码。

代码示例 

  1. #include <stdio.h>
  2. #include <sqlite3.h>
  3. // 定义回调函数 show,用于处理查询结果
  4. int show(void* arg, int col, char** result, char** title)
  5. {
  6.     // static 变量 flag,用于标记是否是第一次调用该函数
  7.     static int flag = 0;
  8.     int i;
  9.     // 如果是第一次调用
  10.     if (flag == 0)
  11.     {
  12.         // 遍历列数
  13.         for (i = 0; i < col; i++)
  14.         {
  15.             // 打印列名
  16.             printf("%s\t", title[i]);
  17.         }
  18.         // 换行
  19.         printf("\n");
  20.         // 将 flag 置为 1,表示不是第一次调用了
  21.         flag = 1;
  22.     }
  23.     // 遍历列数
  24.     for (i = 0; i < col; i++)
  25.     {
  26.         // 打印查询结果中的每一项
  27.         printf("%s\t", result[i]);
  28.     }
  29.     // 换行
  30.     printf("\n");
  31.     // 返回 0,表示继续处理下一行结果(如果有)
  32.     return 0;
  33. }
  34. int main()
  35. {
  36.     sqlite3* db;
  37.     // 尝试打开数据库文件 /home/linux/Desktop/0904/aaa.db,并将数据库连接指针存储在 db 中
  38.     int ret = sqlite3_open("/home/linux/Desktop/0904/aaa.db", &db);
  39.     if (ret!= SQLITE_OK)
  40.     {
  41.         // 如果打开失败,打印错误信息
  42.         fprintf(stderr, "sqlite3_open error,%s\n", sqlite3_errstr(ret));
  43.         // 关闭数据库连接
  44.         sqlite3_close(db);
  45.         return 1;
  46.     }
  47.     char *errmsg;
  48.     // 定义 SQL 查询语句,这里是查询表 user 中的所有数据
  49.     char sqlite3_cmd[] = "select * from user;";
  50.     // 执行 SQL 查询语句,将查询结果通过回调函数 show 进行处理,参数 NULL 表示没有额外的用户数据传递给回调函数,errmsg 用于存储错误信息
  51.     ret = sqlite3_exec(db, sqlite3_cmd, show, NULL, &errmsg);
  52.     if (ret!= SQLITE_OK)
  53.     {
  54.         // 如果执行查询失败,打印错误信息
  55.         fprintf(stderr, "exec error,%s\n", errmsg);
  56.         // 释放错误信息占用的内存
  57.         sqlite3_free(errmsg);
  58.         // 关闭数据库连接
  59.         sqlite3_close(db);
  60.         return 1;
  61.     }
  62.     // 关闭数据库连接
  63.     sqlite3_close(db);
  64.     // 打印 "Hello World!"
  65.     printf("Hello World!\n");
  66.     return 0;
  67. }
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表