/*
2018-7-23 10:32:31
使用简单的数据库操作
*/
首先使用SQLiteStudio创建一个简单的数据库
安装sqlite3
检验方法在cmd中输入sqlite3就会有反应的(记得设置环境变量)
1.创建一个数据库 并且创建一个table
在CMD中
修改显示数据的格式:
.header on /*显示头*/
.mode column /*列显示数据*/
.tiemr on /*计算时间*/
创建一个数据库:sqlite3 testdb.db
创建一个表:create table 表名(元素名) 是否创建成功使用.table进行查看
增加数据
在表中插入元素:insert into 表名 values(对应的值);
查询值
显示一个表中的所有值:select * from 表名;
按照条件进行查询数据,根据上一条 再加上where + 条件 就可以进行查询
例子:查询年龄大于25岁并且收入大于10000 (两个条件并联的关系用and进行连接)
select * from 表名 where age >= 25 and salary >= 10000;
使用多个条件选项,用SQL子查询
SELECT 语句使用 SQL 子查询,子查询查找 SALARY > 65000 的带有 AGE 字段的所有记录,后边的 WHERE 子句与
EXISTS 运算符一起使用,列出了外查询中的 AGE 存在于子查询返回的结果中的所有记录:
sqlite> SELECT AGE FROM COMPANY
WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
查找 SALARY > 65000 的带有 AGE 字段的所有记录,后边的 WHERE 子句与 > 运算符一起使用,列出了
外查询中的 AGE 大于子查询返回的结果中的年龄的所有记录:
sqlite> SELECT * FROM COMPANY
WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
修改某一项的值:
使用UPDATE 进行某一项值的更新
例如 将ID=6的 地址 改成Shandong
UPDATE 表名 SET ADDRESS = 'Texas', SALARY = 20000.00 where ID=6;
如果不加指定ID 会将所有的ADDRESS 和 SALARY的值 都更新成设定的值
删除某一项的值
SQLite 的 DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,
否则所有的记录都会被删除。
删除编号为7的数据
sqlite> DELETE FROM 表名 WHERE ID = 7;
如果不加ID=7 将删除整个表中的数据
SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将
返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:
百分号 (%)
下划线 (_)
百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。
WHERE SALARY LIKE str;
str = '200%' => 查找以 200 开头的任意值
str = '%200%' => 查找任意位置包含 200 的任意值
还有 GLOB也可以实现类似功能,不过要区分大小写
SQLite中的 Limit 子句
SQLite 的 LIMIT 子句用于限制由 SELECT 语句返回的数据数量。
提出有限的行数 或者是指定的行数
有限的行数:sqlite> SELECT * FROM 表名 LIMIT 6; /*取出表中的6行数据 从0开始*/
指定的行数:sqlite> SELECT * FROM COMPANY LIMIT 3 OFFSET 2; /*从位置2开始取3个数据,位置从0开始*/
SQLite中的 Order By (排序功能)
SQLite 的 ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。
语法
ORDER BY 子句的基本语法如下:
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC]; /*ASC 升序 DESC 降序*/
将结果按 SALARY 升序排序:
sqlite> SELECT * FROM COMPANY ORDER BY SALARY ASC;
SQLite Group By(分组,主要主要用于有相同元素的情况下)
SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
可以合并相同 项目
SQLite Having 子句
HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。
WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。
它将显示名称计数小于 2 的所有记录:
sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;
SQLite Distinct 关键字
SQLite 的 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有重复的记录,并只获取唯一一次记录。
有可能出现一种情况,在一个表中有多个重复的记录。当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。
关于代码的操作:可以查看Win32 => sqlitedemo这个工程(介绍在2018-7-9 这天的记录有写)
/*
2018-7-24 09:18:52
在C++中使用SQLite注意事项
*/
表的创建 注意声明变量的类型
将值插入表中 注意插入值的类型与声明的类型是否相同,如果不同将导致插入失败
使用try catch 来捕获异常 失败则输出 “SQL logic error”
在C++中使用SQLite3 比 在控制台使用 格式要求更严格
总结常规的使用方法:
database db("testdb.db"); //没有则创建/有则打开 一个数据库
//创建一个表,如果不存在这个testitem这个表则创建一个,存在则不会执行创建表的操作
db << "create table if not exists testItem(Id int,name text);";
db << "insert into testitem values(?,?);" << 2 << "James00";
db << "insert into testitem values(?,?);" << 3 << "James01";
db << "insert into testitem values(?,?);" << 4 << "James02";
db << "insert into testitem values(?,?);" << 5 << "James03";
db << "delete from testitem where id = ?" << 2;
db << "delete from testitem";
//获取ID为1的数据
string name = "";
db << "select name from testitem where Id=?;" >> tie(name);
cout << "name = " << name << endl;
//使用另外一种方式来获取数据库中的值 遍历整个数据库 取出值
db << "select id,name from testitem order by id asc;" >> [&](int itemid, string itemname)
cout << itemid <<","<< itemname <<endl;
笔记 记录一下首先记录下 关于SQLite3的一些基本的语法/*2018-7-23 10:32:31使用简单的数据库操作*/首先使用SQLiteStudio创建一个简单的数据库安装sqlite3检验方法在cmd中输入sqlite3就会有反应的(记得设置环境变量)1.创建一个数据库 并且创建一个table在CMD中修改显示数据的格式: .header on ...
|SQLite3简介
SQLite3只是一个轻型的嵌入式数据库引擎,占用资源非常低,处理速度比Mysql还快,专门用于移动设备上进行适量的数据存取,它只是一个文件,不需要服务器进程。
SQL语句是SQL操作的指令,我们用C/C++访问数据库时,需要用char*即C字符串来保存SQL语句,然后调用相应sqlite3库的函数,传入C字符串,来执行SQL指令。
常用术语:表(table)、字段(...
三种查询方式总结
回调函数查询内存开销小,但查询效率相对较低;全缓冲查询的查询效率高,但是内存消耗大;字节缓冲查询兼具查询效率和低开销。(优先使用第三种查询方法)
sqlite实现C语言自定义函数封装
由于数据库提供的API接口过于复杂,使用的过程顺序也很繁琐,所以对于原生态的API在实际工作开发中,会进行一层封装,减少调用传参,减少调用次数,增加代码可读性,提高开发效率。
可封装如下:包括创建数据库、建表、插入数据、查询数据、删除数据
sqlite3的C/C++接口用法可分为两种:回调形式与非回调形式。所谓回调形式其实就是通过回调的方式处理sql语句执行结果,非回调形式就是待sql语句执行完毕后再通过返回值和相关函数来判断、获取执行结果。
一、sqlite3非回调形式接口用法
1、sqlite3_open 打开sqlite3数据库的连接
在sqlite3数据库管理系统中,用结构体sqlite3来表...
1.0 总览
SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和API. SQLite3是为了满足以下的需求而开发的:
支持UTF-16编码.
用户自定义的文本排序方法.
可以对BLOBs字
如果在WIN下编程,需要先用下载的源文件生成静态库文件。具体方法如下:
解压下载的sqlite-amalgamation-3180000.zip,得到的“sqlite3.h”、“sqlite3.c”、“sqlite3ext.h”三个文件添加到VS空项目中。
编译项目,生成sqlite3.dll,sqlite3.obj文件。
将sqlite3.obj文
“专业人士笔记”系列目录:创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!zhuanlan.zhihu.comSqlite3 -一个不需要独立服务器进程的数据库sqlite3模块是由Gerhard Haring编写的。要使用此模块,必须首先创建表示数据库的连接对象。这里的数据将存储在example.db文件中 :import sqlite3
conn = sqlite3.co...
嵌入式开发数据库:SQLite, FireBird, eXtremetDB,3万行的基于c和c++的源码,SQLite数据库,是一个非常轻量级自包含(lightweight and self-contained)的DBMS,它可移植性好,很容易使用,很小,高效而且可靠。
SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。
嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管.
参考原文:
http://www.cnblogs.com/acloud/archive/2012/03/23/2413814.html
http://www.cppblog.com/czy463/archive/2013/12/16/204816.html(董淳光)
https:/
SQLLite是一个轻量级关系型数据库,设计的目标是嵌入式的,很多桌面应用程序(如火狐浏览器,QQ,skype)以及手机应用经常用它来作为数据存储,毕竟纯文本或者xml格式的读取不方便。C语言操作
SQLite3的方式很简单,下面的程序大致演示了数据表创建,插入数据,查询数据几个常用的数据操作。
#include
extern "C"
#include"
sqlite3.h"
配置好C/C 项目环境后,可以进行
sqlite3的
基本操作。首先,需要导入
sqlite3.
lib和
sqlite3.dll,并包含头文件#include <
sqlite3.h>。
然后,可以通过
sqlite3_open函数打开数据库连接,并将返回的
sqlite3对象存储在一个指针变量
中。
接下来,可以
使用sqlite3_exec函数执行SQL语句,例如创建表、插入数据、更新数据等。
要获取查询结果,可以
使用sqlite3_step函数检查语句是否执行成功,并通过
sqlite3_column_double、
sqlite3_column_int、
sqlite3_column_int64、
sqlite3_column_blob和
sqlite3_column_text等函数从结果集
中提取相应的数据。
最后,
使用sqlite3_close_v2函数关闭数据库连接。
编写代码时需要注意错误处理,例如检查返回值是否为
SQLITE_OK,以及在
使用完
sqlite3对象后将其置空。
Feeling :