SQLite3数据库学习笔记1

目录

一、嵌入式数据库特点

二、数据库基本使用与常用指令

[三、常用 SQL 语句](#三、常用 SQL 语句)

[1. 创建表](#1. 创建表)

[2. 删除表](#2. 删除表)

[3. 插入数据](#3. 插入数据)

[4. 查询数据](#4. 查询数据)

[5. 修改数据](#5. 修改数据)

[6. 删除数据](#6. 删除数据)

[7. 时间列](#7. 时间列)

[8. 自动增长列](#8. 自动增长列)

[9. 数据导入导出](#9. 数据导入导出)

[四、SQLite3 C 语言编程](#四、SQLite3 C 语言编程)

[1. 打开 / 创建数据库](#1. 打开 / 创建数据库)

[2. 执行 SQL 语句](#2. 执行 SQL 语句)

[3. 关闭数据库](#3. 关闭数据库)

核心流程

五、代码示例

一、嵌入式数据库特点

  • 轻量级、体积小,无需独立服务进程
  • 单文件存储,便于移植、嵌入设备
  • 支持标准 SQL 语法,使用简单
  • 资源占用低,适合嵌入式、移动端场景
  • 无复杂配置,开箱即用

二、数据库基本使用与常用指令

  • 进入数据库:sqlite3 数据库名.db
  • 查看数据库:.databases
  • 查看所有表:.tables
  • 查看表结构:.schema 表名
  • 显示列名称:.headers on
  • 退出数据库:.quit/.exit

三、常用 SQL 语句

1. 创建表

复制代码
CREATE TABLE 表名(
    字段名 类型 约束,
    字段名 类型 约束
);

2. 删除表

复制代码
DROP TABLE 表名;

3. 插入数据

复制代码
INSERT INTO 表名(字段1,字段2) VALUES(值1,值2);
INSERT INTO 表名 VALUES(全部值);

4. 查询数据

cs 复制代码
SELECT * FROM 表名;
SELECT 字段1,字段2 FROM 表名 WHERE 条件;
通配符:
select * from user where name like '张_' and id <5;
select * from user where name like '张%' and id <5;

5. 修改数据

复制代码
UPDATE 表名 SET 字段=值 WHERE 条件;

6. 删除数据

cs 复制代码
delete from 表名;  //删除表中所有数据
DELETE FROM 表名 WHERE 条件;

7. 时间列

cs 复制代码
CREATE TABLE 表名(id int,name char,age int,dt datetime);
insert into 表名 values (2,'张三',23,datetime('now','+8 hours')); //换成中国时间

8. 自动增长列

复制代码
id INTEGER PRIMARY KEY AUTOINCREMENT

9. 数据导入导出

  • 导出:.output 文件名.sql → .dump → .output stdout
  • 导入:.read 文件名.sql

四、SQLite3 C 语言编程

1. 打开 / 创建数据库

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

2. 执行 SQL 语句

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

3. 关闭数据库

复制代码
int sqlite3_close(sqlite3 *db);

核心流程

打开数据库 → 执行 SQL(增删改查)→ 关闭数据库

五、代码示例:

实现把单词字典dict里的单词和词义输进表中。

cs 复制代码
#include <fcntl.h>
#include <sqlite3.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void exec(sqlite3 *db, char sql_cmd[512])
{
  char *errmsg = NULL;
  //执行sql语句
  int ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);
  if (ret != SQLITE_OK)
  {
    fprintf(stderr, "sqlite3_exec sql_cmd:[%s],%s\n", sql_cmd, errmsg);
    sqlite3_free(errmsg);
    sqlite3_close(db);
    return;
  }
}

int main(int argc, char **argv)
{
  //定义保存SQLite数据库连接的句柄
  sqlite3 *db = NULL;
  //打开数据库,获得数据的句柄
  int ret = sqlite3_open("01.db", &db);
  if (ret != SQLITE_OK)
  {
    fprintf(stderr, "open db error %s\n", sqlite3_errstr(ret));
    sqlite3_close(db);
    return 1;
  }

  //创建表
  //需要执行的SQL语句
  char sql_cmd[512] = "create table if not exists dict(id INTEGER PRIMARY KEY ASC,word char,mean char)";
  exec(db, sql_cmd);

  //清空表
  bzero(sql_cmd, sizeof(sql_cmd));
  strcpy(sql_cmd, "delete from dict");
  exec(db, sql_cmd);
  // 为了提高效率,批量操作 ,开启事务
  bzero(sql_cmd, sizeof(sql_cmd));
  strcpy(sql_cmd, "BEGIN TRANSACTION;");
  exec(db, sql_cmd);
  // 直接用标准IO打开字典文件
  FILE *fp = fopen("/home/linux/dict.txt", "r");
  if (fp == NULL)
  {
    perror("fopen dict.txt failed");  // 打印打开失败原因
    sqlite3_close(db);                // 打开文件失败也要关闭数据库
    return 1;
  }

  while (1)
  {
    char linebuf[1024] = {0};
    if (fgets(linebuf, sizeof(linebuf), fp) == NULL)
    {
      break;
    }

    char *word = strtok(linebuf, " ");
    char *mean = strtok(NULL, "\r");

    //表内插入word,mean
    sprintf(sql_cmd, "insert into dict values(NULL,\"%s\",\"%s\");", word, mean);
    //执行sql语句
    exec(db, sql_cmd);
  }

  // 提交事务 ,相当于保存文件
  bzero(sql_cmd, sizeof(sql_cmd));
  strcpy(sql_cmd, "COMMIT;");
  exec(db, sql_cmd);

  printf("插入完成\n");
  sqlite3_close(db);
  return 0;
}
相关推荐
Forrit2 小时前
RAG处理PDF图片:步骤顺序与完整流程
前端·数据库·pdf
Java面试题总结2 小时前
MySQL高级SQL秘籍:性能飞升之路
sql·mysql·adb
Ares-Wang2 小时前
flask 》》pymysql VS FastAPI aiomysql
数据库·flask·fastapi
yashuk2 小时前
clickhouse-介绍、安装、数据类型、sql
数据库·sql·clickhouse
qq5680180762 小时前
mysql数据被误删的恢复方案
数据库·mysql
倔强的石头_2 小时前
文档数据库迁移实战:MongoDB 协议级兼容与 JSONB 引擎性能深度对比
数据库
特别关注外国供应商2 小时前
Gartner 2025 备份和数据保护平台的魔力象限,哪些供应商在内?
数据库
moton20172 小时前
TLS会话恢复机制深度解析:Session ID、Ticket 与 TLS1.3 PSK架构
数据库·网络协议·安全·架构·ssl·物联网架构
jnrjian2 小时前
Oracle 收缩8TB 磁盘空间遇到的问题
数据库·oracle