在C++中使用SQLITE3的一些基本操作

笔记 记录一下

首先记录下 关于SQLite3的一些基本的语法

/*
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;
};
  • 修改值 使用UpdateData

猜你喜欢

转载自blog.csdn.net/Wuzm_/article/details/81673328