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

sqlite3数据库

常用数据库

1.关系型数据库:将复杂的数据结构简化为二维表格形式(大型:Oracle、DB2

中型:MySql、SQLServer小型:Sqlite)

2.非关系型数据库:以键值对存储,且结构不固定 (JSON、Redis、MongoDB)

sqlite3:stu.db

优势:1.开源免费, c语言开发

           2.代码量少,1万行左右,总大小10M以内

           3.文件型数据库,可以移动

           4.数据容量最大2T

一、sqlite相关命令(不区分大小写)

1.         .help                                查看sqlite3支持的相关命令

2.         .quit/.q                             退出sqlite3数据库

3.         .table                               查看数据库中的所有表

4.        .schema tablename         查看tablename创建时的SQL语句(表的结构)

5.             .headers on/off            开启/关闭表头

6.              .mode column            以左对齐列宽显示数据 

7.           .width 列宽1 列宽2        第一列宽度 第二列宽度 第三列宽度 

8.           .schema 表名                 查看表的结构 

二、sqlite的SQL语句(每个sql语句后必须有一个;)

1.create table 创建表
      create table 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....);

INTEGER : int                                REAL:double float                                 TEXT: char 字符串
 NULL:值是一个 NULL值。

表不存在,则创建,存在不创建

create table if not exists 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....);

2.insert into 插入表

INSERT INTO 表名称 VALUES(值1, 值2,....);

3.select   查表 

SELECT * FROM 表名称;

SELECT 列名称 FROM 表名称;

SELECT *FROM 表名;   查看所有

SELECT *FROM 表名 WHERE 列名 关系运算符 值;   条件查找

关系运算符:>  <  =  !=  and   or

SELECT *FROM 表名 WHERE 列名 LIKE 值;    模糊查找

百分号(%)代表零个、一个或多个数字或字符。

下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。

SELECT *FROM 表名 ORDER BY 列名  ASC(升序)/DESC(降序);

4.删除

DELETE FROM 表名 WHERE 列名 关系运算符 值;      删除一行

DROP TABLE 表名;        删除表

5.修改

 UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

6. 设置主键值自动增长列

create table 表名称(id INTEGER PRIMARY KEY AUTOINCREMENT, 类名称 数据类型, ...);

7.datetime   增加时间

datetime('now', '+8 hours');

select datetime('now', '+8 hours');查询当前东八区时间

三、sqlite3 提供的c/c++ API 接口

1.sqlite3_open

int sqlite3_open(const char *filename,  sqlite3 **ppDb);

功能:打开一个数据库文件获得操作数据库文件的句柄,如果数据库存在,则打开;不存在,则创建

参数:     filename:数据库文件路径 
            ppDb:存放句柄指针空间的首地址

返回值: 成功返回SQLITE_OK,失败:错误码

sqlite3 *pdb;int ret = sqlite3_open("./stu.db", &pdb);	if (ret != SQLITE_OK){fprintf(stderr,"sqlite3_open fail : %s\n", sqlite3_errmsg(pdb));return -1;}

2.sqlite3_errmsg

const char *sqlite3_errmsg(sqlite3*);

功能:获得出错原因

3.sqlite3_close

int sqlite3_close(sqlite3*);

功能:关闭数据库句柄,释放空

4.sqlite3_exec

int sqlite3_exec(sqlite3* pDb,const char *sql,nt (*callback)(void*,int,char**,char**), void *arg,         char **errmsg;

功能:在数据库中执行SQL语句

参数:     sqlite3*:数据库句柄 
            sql     :SQL语句字符串首地址
            callback:回调函数(只有select时使用)
            void *  :回调函数的传参(只有select时使用)
            char **errmsg:出错信息存放空间首地址

返回值: 成功返回SQLITE_OK 0,失败:错误码

回调函数类型:

int fun(void* para,int n_column,char** column_value,char** column_name);

参数:     para         : sqlite3_exec传递的第四个参数
            n_column    :查询到数据的列数
            column_value:查询结果每个字段的首地址集合
            column_name :查询结果每个字段的字段名称首地址集合

注意: 1. 回调函数查询到几行数据就执行几次;
            2.回调函数必须要返回0,否则sqlite3_exec调用失败
            3.数据库中查出的数据均为字符串


int flag = 0;int callback(void *arg, int column_cnt, char **column_value, char **column_name)
{if (0 == flag){for (int i = 0; i < column_cnt; i++){printf("%s ", column_name[i]);}printf("\n");flag = 1;}for (int i = 0; i < column_cnt; i++){printf("%s ", column_value[i]);}printf("\n");return 0;
}
int main(int argc, const char *argv[])
{sqlite3 *pdb;int ret = sqlite3_open("./stu.db", &pdb);	if (ret != SQLITE_OK){fprintf(stderr,"sqlite3_open fail : %s\n", sqlite3_errmsg(pdb));return -1;}char *sql = "select name from class2;";ret = sqlite3_exec(pdb, sql, callback1, NULL, NULL);if (ret != SQLITE_OK){fprintf(stderr,"sqlite3_exec fail : %s\n", sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}sqlite3_close(pdb);return 0;
}

5.sqlite3_free

void sqlite3_free(void*);

功能:释放保存出错信息的空间

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第九届中国大学生程序设计竞赛(秦皇岛)-(CCPC2023-Qinhuangdao F - 质数之谜(DP)
  • 谈谈nvm、nrm、pnpm的理解
  • FPGA速度优化
  • 新手该如何选择与小程序定位相关的关键词
  • Yolo环境搭建(深度学习基础环境)
  • 利用优先级队列的堆排序练习
  • visual studio 2005 ( vs2005 , vc2005 ) 编译的应用程序无法运行的解决方案
  • 与PC1显著相关的基因 | p值计算
  • 个人旅游网(1)——数据库表详解
  • JVM1-初识JVM
  • 【cocos creator】养成游戏简易事件系统,每日随机事件,每日行动点重置,根据数据检测多结局
  • 【Unity输入】Input Manager 和 Input System对比
  • 实训第三十二天(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
  • 2024年程序员金九银十面试宝典持续更新中.....
  • 【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
  • 收藏网友的 源程序下载网
  • [译]如何构建服务器端web组件,为何要构建?
  • 77. Combinations
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • isset在php5.6-和php7.0+的一些差异
  • Promise初体验
  • Redash本地开发环境搭建
  • Vue--数据传输
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 番外篇1:在Windows环境下安装JDK
  • 翻译--Thinking in React
  • 机器学习 vs. 深度学习
  • 理解在java “”i=i++;”所发生的事情
  • 码农张的Bug人生 - 见面之礼
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 目录与文件属性:编写ls
  • 判断客户端类型,Android,iOS,PC
  • 前端自动化解决方案
  • 最近的计划
  • NLPIR智能语义技术让大数据挖掘更简单
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $nextTick的使用场景介绍
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (正则)提取页面里的img标签
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .Net IE10 _doPostBack 未定义
  • .NET 给NuGet包添加Readme
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .Net8 Blazor 尝鲜
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .ui文件相关