博客
关于我
SQLite数据库
阅读量:690 次
发布时间:2019-03-17

本文共 4271 字,大约阅读时间需要 14 分钟。

SQLite学习笔记

Linux下安装SQLite

要在Linux系统中安装并使用SQLite,可以按照以下步骤操作:

1.安装SQLite3

  • 通过 PackageManager安装
    sudo apt-get install sqlite3
  • 开发环境安装:如果编程时需要数据库库文件,安装以下依赖项:
    sudo apt-get install libsqlite3-dev
  • 数据库可视化工具:安装SQLite数据库浏览器:
    sudo apt-get install sqlitebrowser
  • 编程连接库:在编程中,通常会使用 sqlite3 库进行数据库操作。

2.数据库转换

.sql 转换为 .db

  • 在终端中打开 SQLite 命令行工具:
    sqlite3 your_database.db
  • 使用 .read 或类似命令读取 .sql 文件内容并执行:
    .read your_database.sql.exit
  • 这将将 .sql 文件中的 SQL 语句转换为 .db 文件。

.db 转换为 .sql

  • 以类似的方式打开数据库:
    sqlite3 your_database.db
  • 使用 .output.dump 命令将数据库导出为 SQL 文件:
    .output your_database.sql.dump
  • 也可以按表或字段导出数据:
    .dump tb_name

SQLite命令

系统命令(以.开头)

  • .help:列出所有可用命令。
  • .quit.exit:退出 SQLite 命令行。
  • .schema:查看表结构。
  • .database:显示当前打开的数据库。
  • .table:查看表中的数据。

SQLite命令

数据库操作

  • 创建或打开数据库:
    sqlite3 wangl.db
  • 创建数据库表:
    CREATE TABLE stu (ni INTEGER, name TEXT, score REAL)
  • 约束主键
    CREATE TABLE stu (ni INTEGER PRIMARY KEY, name TEXT, score REAL)
  • 插入数据:
    • 插入一行:
      INSERT INTO stu VALUES(1, "wangliang", 99.0)
    • 插入多行:
      INSERT INTO stu VALUES(2, "xiaoming", 97.0),                    (3, "xiaohong", 93.0)
    • 动态插入:
      INSERT INTO stu (ni, score) VALUES(4, 45);INSERT INTO stu (name) VALUES("wanguo");

查询数据

  • 查询所有数据:
    SELECT * FROM stu
  • 部分查询:
    SELECT ni FROM stu
  • 条件查询:
    SELECT ni, name FROM stu WHERE score < 60
  • 结合多个条件:
    SELECT * FROM stu WHERE score > 60 AND ni < 4 OR ni = 2
  • Query排序:
SELECT * FROM stu ORDER BY name ASC;SELECT * FROM stu ORDER BY ni DESC;

LIKE 运算符

  • 匹配模式
    SELECT * FROM stu WHERE name LIKE "xiao%";
  • 通配符
    • %:匹配零个或多个任意字符。
    • _:匹配单个字符。
  • 示例:
    SELECT * FROM stu WHERE name LIKE "%g%";SELECT * FROM stu WHERE name LIKE "%h%";SELECT * FROM stu WHERE name LIKE "xiao_ing";

数据删除与修改

  • 删除整个表:
    DELETE FROM stu
  • 删除单行数据:
    DELETE FROM stu WHERE ni = 3
  • 删除特定列:通过创建新表的方法间接删除列。例如:
    CREATE TABLE stu1 AS SELECT ni, name FROM stu;DROP TABLE stu;ALTER TABLE stu1 RENAME TO stu;
  • 修改数据:
    UPDATE stu SET name = "xiaowang" WHERE ni = 1;

数据库维护

  • 查看数据库是否存在表:
    SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = 'stu';
  • 查询所有表:
    SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name;
  • 查看表结构:
    SELECT schema_name FROM sqlite_master WHERE table_name = 'stu';

SQLite编程接口

常用函数

  • 打开数据库
    int sqlite3_open(const char *path, sqlite3 **db);
  • 关闭数据库
    int sqlite3_close(sqlite3 *db);
  • 执行 SQL 语句
    int sqlite3_exec(sqlite3 *db, const char *sql,                 void (*callback)(void *, int, char **, char **),                 void *pdb, char **errmsg);
  • 获取表格数据
    int sqlite3_get_table(sqlite3 *db, const char *sql,                     char ***result,                     int *nrow,                     int *ncolumn,                     char **errmsg);

完整代码示例

#include 
#include
#include
char *test = "test string";int main() { sqlite3 *数据库句柄 = NULL; char *sql = NULL; char *errmsg = NULL; int ret; // 打开数据库 ret = sqlite3_open("my.db", &数据库句柄); if (ret != SQLITE_OK) { fprintf(stderr, "打开数据库失败:%s\n", sqlite3_errmsg(数据库句柄)); return -1; } // 创建表 sprintf(sql, "CREATE TABLE IF NOT EXISTS stu (ni INTEGER PRIMARY KEY, name TEXT, score REAL)"); ret = sqlite3_exec(数据库句柄, sql, NULL, NULL, &errmsg); if (ret != SQLITE_OK) { fprintf(stderr, "创建表失败:%s\n", errmsg); return -1; } // 插入数据 int ni = 2; char name[20] = "xiaoming"; float score = 80; sprintf(sql, "INSERT INTO stu VALUES(%d, '%s', %f)", ni, name, score); ret = sqlite3_exec(数据库句柄, sql, NULL, NULL, &errmsg); if (ret != SQLITE_OK) { fprintf(stderr, "插入数据失败:%s\n", errmsg); return -1; } // 查询数据 ret = sqlite3_exec(数据库句柄, "SELECT * FROM stu", [](void *param, int f_num, char **f_value, char **f_name) { int i; for (i = 0; i < f_num; i++) { printf("%s: %s\n", f_name[i], f_value[i]); } return 0; }, &test, &errmsg); if (ret != SQLITE_OK) { fprintf(stderr, "查询失败:%s\n", errmsg); return -1; } // 关闭数据库 sqlite3_close(数据库句柄); return 0;}

SQLite存储数据类型

SQLite支持多种数据类型,其中包括文本、数字、日期时间、Blob等,具体如下:

  • datetime:存储日期时间。
  • text:存储文本数据。
  • binary:存储二进制数据。
  • image:存储变长的二进制数据,通常用于图片文件。
  • blob:存储二进制大对象(Binary Large Object),用于存储大型文件或二进制数据。
  • timestamp:存储数据库范围内唯一的数码,类似于唯一标识符。
  • uniqueidentifier:存储全局唯一标识符(GUID)。

转载地址:http://aojhz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现factorial阶乘算法(附完整源码)
查看>>
Objective-C实现factorial阶乘算法(附完整源码)
查看>>
Objective-C实现Factors因数算法(附完整源码)
查看>>
Objective-C实现Farey Approximation近似算法(附完整源码)
查看>>
Objective-C实现Fast Powering算法(附完整源码)
查看>>
Objective-C实现Fedwick树算法(附完整源码)
查看>>
Objective-C实现fenwick tree芬威克树算法(附完整源码)
查看>>
Objective-C实现FenwickTree芬威克树算法(附完整源码)
查看>>
Objective-C实现fermat little theorem费马小定理算法(附完整源码)
查看>>
Objective-C实现FermatPrimalityTest费马素数测试算法(附完整源码)
查看>>
Objective-C实现fft2函数功能(附完整源码)
查看>>
Objective-C实现FFT快速傅立叶变换算法(附完整源码)
查看>>
Objective-C实现FFT算法(附完整源码)
查看>>
Objective-C实现fibonacci search斐波那契查找算法(附完整源码)
查看>>
Objective-C实现fibonacci斐波那契算法(附完整源码)
查看>>
Objective-C实现fibonacci斐波那契算法(附完整源码)
查看>>
Objective-C实现FIFO(附完整源码)
查看>>
Objective-C实现FigurateNumber垛积数算法(附完整源码)
查看>>
Objective-C实现finding bridges寻找桥梁算法(附完整源码)
查看>>
Objective-C实现first come first served先到先得算法(附完整源码)
查看>>