添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

/*
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
笔记 记录一下首先记录下 关于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.libsqlite3.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 : 在这行代码:m_media = strPath.Find(L"http") == -1 ? libvlc_media_new_p.... 发生异常了! 0x00007FFEA69CE858 (libvlccore.dll)处(位于 SouiWizard1.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000018 时发生访问冲突。 如有适用于此异常的处理程序,该程序便可安全地继续运行。