【DB】SQLite学习笔记】的更多相关文章

Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是什么 WAL(Write ahead logging)是一种日志模式,它是一种思想,普遍应用于关系型数据库.每个事务执行变更时,修改数据页,同时会产生日志,这样在事务提交后,不需要将修改的脏页刷盘,只需要将事务产生的日志落盘即可返回.WAL保证日志一定先于对应的脏页落盘,就是所谓的WAL.SQLITE在3.7…
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是什么 WAL(Write ahead logging)是一种日志模式,它是一种思想,普遍应用于关系型数据库.每个事务执行变更时,修改数据页,同时会产生日志,这样在事务提交后,不需要将修改的脏页刷盘,只需要将事务产生的日志落盘即可返回.WAL保证日志一定先于对应的脏页落盘,就是所谓的WAL.SQLITE在3.7…
SQLite 学习笔记. 一.SQLite 安装    访问http://www.sqlite.org/download.html下载对应的文件.    1.在 Windows 上安装 SQLite.需要下载 sqlite-shell-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件.        创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def.sqlite3.dll 和 sqlite3.exe 文件.   …
数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打开数据库,假设数据库不存在则新建一个数据库,并打开 sqlite3_close(sqlite3*) 关闭数据库.假设关闭之前还存在没有运行完的语句,将会返回SQLITE_BUSY 二 实例 1 文件夹结构 Projects{ main.c// 代码所在文件 sqlite{// 官网下载下来的sqli…
说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然有自己的并发控制和故障恢复机制.Sqlite学习笔记(五)&&SQLite封锁机制 已经讲了一些锁机制的原理,本文将会详细介绍一个事务从开始,到执行,最后到提交所经历的过程,其中会穿插讲一些sqlite中锁管理,缓存管理和日志管理的机制,同时会介绍在异常情况下(软硬件故障,比如程序异常cras…
随着移动互联网的发展,手机使用越来越广泛,sqlite作为手机端存储的一种解决方案,使用也非常普遍.但是sqlite本身安全特性却比较弱,比如不支持用户权限,只要能获取到数据库文件就能进行访问:另外也没有加密功能,任何人获取到文件后,就可以查到明文数据.这使得大家对于sqlite又爱又不敢用,毕竟用户的隐私是非常重要的.Sqlite分为开源版本和收费版,收费的版本是支持加密的,只不过需要付2000刀的技术支持费.当然,由于sqlite本身是开源的,业内有很多产品对sqlite增加了加密功能,比如…
下载”System.Data.SQLite.DLL”,程序中添加引用即可 //创建数据库文件 SQLiteConnection.CreateFile("sqlitetest.db"); //建立数据库连接并打开数据库 第一种方法: SQLiteConnection conn = new SQLiteConnection(); SQLiteConnectionStringBuilder connsb = new SQLiteConnectionStringBuilder(); conns…
Sqlite简介 sqlite是一个开源的嵌入式文件数据库,sqlite以动态链接库的方式供应用程序调用,所有的数据库对象都存储在同一个文件中. sqlite动态库非常小,最新的3.8.11版本也只有500k左右.sqlite虽然小,但功能并不弱,它支持sql-92标准中大部分SQL规范, 支持表,索引,视图,触发器等对象,同时它还支持事务,满足ACID特性,因此非常适合嵌入式设备存储数据,尤其是手机,君不见微信,支付宝其实都在用哦.鉴于sqlite在嵌入式 领域非常流行,本人最近也在学习这个数…
前言      我们知道任何一种关系型数据库管理系统都支持SQL(Structured Query Language),相对于文件管理系统,用户不用关心数据在数据库内部如何存取,也不需要知道底层的存储结构,熟悉SQL,就能熟练使用数据库.SQL的引入,使得数据库系统需要将SQL转换为内部的数据结构,然后与底层的存储结构打通,达到用户存取数据的目的.所谓的SQL对应的数据结构,我们通常称之为执行计划,每个SQL执行前,都需要生成执行计划,然后执行.SQL如何变化到等价的执行计划?我们熟悉的数据库,…
概述 通过上一篇文章的分析,我们知道了pager模块在整个sqlite中所处的位置.它是sqlite的核心模块,充当了多种重要角色.作为一个事务管理器,它通过并发控制和故障恢复实现事务的ACID特性,负责事务的原子提交和回滚:作为一个页管理器,它处理从文件中读写数据页,并执行文件空间管理工作:作为日志管理器,它负责写日志记录到日志文件:作为锁管理器,它确保事务在访问数据页之前,一定先对数据文件上锁,实现并发控制.本质上来说,pager模块实现了存储的持久性和事务的原子性.从图1中我们可以看到pa…
概述 SQLite虽然是一个轻量的嵌入式数据库,但这并不影响它支持事务.所谓支持事务,即需要在并发环境下,保持事务的ACID特性.事务的原子性,隔离性都需要通过并发控制来保证.那么Sqlite的并发控制是怎样的,如何实现,在这里跟大家分享下我的理解. SQLite是一个文件数据库,所有的数据都在一个db文件中,对于wal模式,还包含wal索引文件和wal日志文件.SQlite支持库级并发,即允许多个读事务同时运行,同一时刻最多只有一个写事务,读写冲突,相对于传统的DBMS支持表级,行级甚至MVC…
WAL是SQLite3.7.0版本引入的一个重大改进.SQLite官网宣称在很多使用场景下,WAL模型的性能都要好于默认的DELETE模式.下面将针对几个主要场景对WAL性能做测试,测试的硬件与xxx保持一致. 纯写场景 1)  测试说明 测试简单更新事务在WAL模式下与DELETE日志模式性能对比,测试语句形如:update user set c1=c1+1 where id=xxx,id为主键,串行执行更新.通过执行1w个更新事务,统计程序运行时间. 2)  测试结果 测试时间结果以毫秒计算…
测试目标 获取SQlite的常规性能指标 测试环境 CPU:8核,Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz 内存:16G 磁盘:SSD Linux 2.6.32 SQlite最新版本3.8.11 测试场景 1)  主键查询测试 2)  主键更新测试 3)  批量导入测试 初始化 1)  测试表结构 CREATE TABLE user( id integer primary key autoincrement, c1 int, c2 ), c3 )); CR…
1.SQLITE的常识 SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它. sqlite的主要优点:零配置(Zero Configuration)紧凑(compactness)可移植(Portability)它是运行在Windows,Linux,BSD,Mac OS X和一些商用Unix系统,比如Sun的Solaris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,Palm OS, Symb…
  (1)创建数据库   在命令行中切换到sqlite.exe所在的文件夹   在命令中键入sqlite3 test.db;即可创建了一个名为test.db的数据库   由于此时的数据库中没有任何表及数据存在,这时候是看不到test.db的,必须往里面插入一张表即可看到数据库 (2)创建表   create table Test(Id Integer primary key, value text);   此时即可完成表的创建,当把主键设为Integer时,则该主键为自动增长,插入数据时,可直接…
前面已经说了怎样打开和关闭数据库,这次要说得是怎样运行SQL语句,来创建一张表. 要用的的函数: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg) 參数: db:已经打开的数据库实例 sql:SQL语句,是一个字符串 callback:是一个回调函数 data:做为回调函数的第一个參数 errmsg:用于带回错误信息 该回调函数有两种返回值类型. 1.返回…
参考书籍 <SQLite 权威指南 第二版> Windows获取SQLite 1.主页: www.sqlite.org 2.下载 Precompiled Binaries For Windows 3.设置系统环境PATH 使用 打开cmd,输入sqlite3 命令 .help 帮助 .exit 退出程序 数据库管理 //创建数据库, sqlite3 test.db //创建一个表,此时才会创建数据库 create table test (id integer primary key, valu…
前面说到的 sqlite_exec() 中的第三个參数, SQLite 将为 sql 參数内运行的每一个 SELECT 语句中处理的每一个记录调用这个回调函数. 本节加入了两个函数.selectFromTable和updateTable. 实例程序例如以下: #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db…
作者:朱金灿 来源:http://blog.csdn.net/clever101 打开sqlite数据库需要用到sqlite3_open函数,但是sqlite3_open函数的第一个参数是数据库文件的绝对路径.它是有讲究的,必须是utf8字符串.也就是说假如文件路径是非utf8字符,就得转为utf字符.于是参考网上的资料,写了一个最常用的从多字节转utf8的函数,代码如下: // 编译环境:VS 2008+sp1,Win7, 工程设置为多字节字符集 std::string MbcsToUtf8(…
最后一节,这里记录下怎样删除数据. 前面全部的代码都继承在这里了,在Ubuntu14.04和Mac10.9上亲測通过. #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; con…
前面创建了一张表,如今给他插入一些数据.插入数据跟创建表差点儿相同,不过SQL语言不一样而已,完整代码例如以下: #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; int re…
上篇文章简单讨论了虚拟机的原理,这篇文章我们详细讨论下指令,具体从几种典型的SQL语句来看看每种SQL对应的指令流,以及每个指令的含义.通过explain语句,可以看到语句对应的指令流:通过pragma vdbe_trace=on指令,我们甚至可以得到语句对应的指令执行流程,包括跳转等.测试表结构 CREATE TABLE t1( id integer primary key autoincrement, user_id int, c1 ), c2 ) ); 测试语句(1)INSERT sqli…
该系列的前面一些文章我重点讲了sqlite的核心功能,比如封锁机制,共享缓存,以及事务管理等.但对于sqlite的整体没有作一个全面的介绍,本文将从实现的层面,整体介绍sqlite的框架.各个核心模块以及功能.后续再针对核心模块作进一步的分析.我们说sqlite是一个关系型的嵌入式数据库.提到关系型数据库,我们会想到诸如oracle,mysql,sqlserver等主流数据库,它们的核心功能点在于支持SQL,支持事务:提到嵌入式数据库,我们会想到berkeleyDB,sqlite,它们核心在于嵌…
介绍 通常情况下,sqlite中每个连接都会一个独立的pager对象,pager对象中管理了该连接的缓存信息,通过pragma cache_size指令可以设置缓存大小,默认是2000个page,每个page是1024B.这样导致了对于同一个数据文件,多个连接各自维护了自己的一份缓存,在高并发情况下,可能导致使用大量的内存.而sqlite作为一个嵌入式数据库,通常用于嵌入式设备,内存可能比较有限,为了应对这种问题,sqlite提供了一种方法,通过让多个连接公用一个pager对象,共享同一份缓存.…
首先说下我使用的是Linux环境 一 下载源代码 官网下载:点这里 二 编译 1 解压 下载完毕之后通常会在当前用户的"下载"文件夹中,首先cd到下载文件夹,然后创建一个文件件.用来放解压之后的文件: mkdir sqlite 然后cd到新建的文件夹中.执行例如以下命令解压 unzip ../sqlite-amalgamation-201408081749.zip 解压之后会有四个文件:shell.c.sqlite3.c,sqlite3.h,sqlite3ext.h 2 编译 运行命令…
前面做了那么多不就是为了数据弄几张表么.接下来看看怎么新建表. 一 新建表 基本的语法例如以下: CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns), column2 datatype, column3 datatype, ..... columnN datatype, ); 当中database_name为你的数据库名,table_name当然是表名啦,columnN为…
曾闻:全部的编程都是已数据为中心,觉得很有道理. 所谓数据库数据库,没有数据叫什么数据库,接下来就看看怎样在表中插入数据. 一 插入数据 1 创建一张表 首先为了插入数据,须要先创建一张表: CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); 2 第一种方式:指定列 插入数据有两种主要的格式,第一种是指定列…
一 条件推断 在SQL中条件推断使用where,相当于其它变成语言中的if,基本使用方法如: SELECT column1, column2, columnN FROM table_name WHERE [condition] 另外,SQL支持数学运算,逻辑运算,位于运算等等,均可放在WHERE子句中. 二 更新表 基本的语法例如以下: UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN W…
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Android学习笔记34:使用文件存储数据>. (2)Shared Preferences:常用来存储键值对形式的数据,对系统配置信息进行保存.具体使用方法可以参阅博文<Android学习笔记35:使用Shared Preferences方式存储数据>. (3)Content Providers:数…
一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 归档:NSKeyedArchiver 偏好设置:NSUserDefaults plist存储:writeToFile 上述的使用可以参考iOS学习笔记15-序列化.偏好设置和归档,但上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题,在这个时候就是使用数据库的时候. 数据库(Database)是按照数据结构来组织.存储和管理数据…