sqlite数据库

SQLite的WAL机制

孤街醉人 提交于 2019-12-29 02:55:25
1.什么是WAL? WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,SQLite在3.7.0版本引入了该特性。 2.WAL如何工作? 在引入WAL机制之前,SQLite使用rollback journal机制实现原子事务。 rollback journal机制的原理是:在修改数据库文件中的数据之前,先将修改所在分页中的数据备份在另外一个地方,然后才将修改写入到数据库文件中;如果事务失败,则将备份数据拷贝回来,撤销修改;如果事务成功,则删除备份数据,提交修改。 WAL机制的原理是:修改并不直接写入到数据库文件中,而是写入到另外一个称为WAL的文件中;如果事务失败,WAL中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。 同步WAL文件和数据库文件的行为被称为checkpoint(检查点),它由SQLite自动执行,默认是在WAL文件积累到1000页修改的时候;当然,在适当的时候,也可以手动执行checkpoint,SQLite提供了相关的接口。执行checkpoint之后,WAL文件会被清空。 在读的时候,SQLite将在WAL文件中搜索,找到最后一个写入点,记住它,并忽略在此之后的写入点(这保证了读写和读读可以并行执行);随后,它确定所要读的数据所在页是否在WAL文件中,如果在

安全研究员披露 Chrome 的 Magellan 2.0 漏洞

喜你入骨 提交于 2019-12-27 14:09:23
  腾讯安全研究员<a href=" https://blade.tencent.com/magellan2/index.html">披露</a>了 Google Chrome 的新 Magellan 2.0 漏洞。研究人员共发现了 5 个漏洞,位于 SQLite 中,统称为 Magellan 2.0,这组漏洞允许***者在 Google Chrome 内远程运行恶意代码。Google 与 SQLite 官方已确认并修复了漏洞。   如果用户使用 2019 年 12 月 13 日前的旧版本 <a href=" https://www.sqlite.org/src/timeline">SQLite</a> 或运行低于 Chrome 79.0.3945.79 并启用了 WebSQL 的设备,那么可能会受到影响。和 Magellan 1.0 类似,这组新漏洞是因为 SQLite 数据库从第三方接受 SQL 命令输入验证不正确导致的。***者可以制作包含恶意代码的 SQL 操作命令,当 SQLite 数据库引擎读取该指令时会执行恶意代码。 来源: 51CTO 作者: smxik 链接: https://blog.51cto.com/13354255/2462201

Python3操作SQLite数据库

两盒软妹~` 提交于 2019-12-26 15:46:31
Python3操作SQLite数据库 SQLite SQLite,是一款 轻型的数据库 ,是 遵守ACID的关系型数据库管理系统 ,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2019年已经有19个年头,SQLite也迎来了一个版本 SQLite 3已经发布。[ 摘自SQLite百度百科 ] 功能特性 ACID事务 零配置 – 无需安装和管理配置 支持数据库大小至2TB 比一些流行的数据库在大部分普通数据库操作要快 独立: 没有额外依赖 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等 数据类型 Typelessness(无类型) 支持常用的数据库类型 使用Python3操作SQLite python2.5以后的安装包已经自带SQLite3的软件包了

sqlite基础

情到浓时终转凉″ 提交于 2019-12-26 07:55:14
常用命令 sqlite3提供的特殊命令, 以.开头: .help: 帮助 .databases: 列出数据库 .tables: 列出表名 .open dbname: 打开数据库 .save dbname: 保存为数据库 .exit: 退出, 或Ctrl-D .schema [tbname]: 列出表, 索引, 触发器的创建语句 .output fname.txt: 写结果到文件 .show, 显示各种设置的默认值 .indices tbname, 列出某表的索引 各种设置: .echo on|off, 开启或关闭命令回显 .explain on|off, 开启或关闭适合于EXPLAIN的输出模式, 更适合人阅读 .headers on|off, 是否显示字段信息头 .stats on|off, 开启或关闭统计信息 .timer on|off, 开启或关闭命令执行的时间测量 常用操作 创建表 create table company ( id int primary key not null autoincrement, name text not null, age int not null unique, address char(50), salary real default 50000.00 check(salary>0) ); int, text, real, char

SQLite使用与安装

隐身守侯 提交于 2019-12-25 02:45:17
什么是SQLite? SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。 优点 不需要一个单独的服务器进程或操作的系统(无服务器的)。 SQLite 不需要配置,这意味着不需要安装或管理。 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。 SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。 SQLite 是自给自足的,这意味着不需要任何外部的依赖。 SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。 SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。 SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。 SQLite 可在 UNIX(Linux, Mac OS-X,

Sqlite c/c++ api 学习

天大地大妈咪最大 提交于 2019-12-21 13:05:14
Sqlite是我最喜欢使用的文件数据库,它小巧、方便、速度快、支持大部分标准sql语句、开源、免费 .. .. .. 优点太多了。自从认识了她之后,我就将Access打入了冷宫,发誓以后再也不用Access了。我们可以到Sqlite的 官方网站 下 载Sqlite的源代码,编译后的结果只有200多K,太小巧,太卡哇依了。如果嫌自己手动编译麻烦,也可以直接从官网下载二进制的可执行文件或者动态链 接库。可执行文件可以用命令行的方式来创建、操作数据库;动态链接库则可以用程序来操作Sqlite数据库。今天我就来介绍一下如何使用c/c++来操作 Sqlite吧~~~ 准备工作 我这里使用的sqlite版本是3.x,所以首先从官网下载动态链接库 sqlite3.dll ;然后再下载api头文件 sqlite3.h 。在Code::Block中新建一个C++的控制台项目,添加对sqlite3.dll的引用,同时将sqlite3.h添加到项目中。我这里还使用了一个工具: SqliteSpy ,用于对数据库进行可视化的操作。 开始使用API 下面就开始使用API吧~。Sqlite的所有api,可以在 这里 查询到。 sqlite3_open sqlite3_exec sqlite3_close 看到这些函数,我相信你大概能猜出这些函数的功能。sqlite3_open用于打开一个数据库

Android--数据持久化之SQLite

ε祈祈猫儿з 提交于 2019-12-19 04:56:40
前言   对于一个应用程序而言,数据持久化是必不可少的,Android程序也不例外。这篇博客将介绍Android中关于SQLite的使用,SQLite是一种嵌入式的数据库引擎,专门适用于资源有限的设备上进行适量的数据存储,而Android就全面支持标准的SQLite数据库。在本片博客中,将说明SQLite数据库的创建以及维护,还有使用SQLite执行CRUD的两种方式,以及SQLite中事务的使用,最后都会使用示例讲解博客中所提到的概念性的内容。 SQLite   Android对SQLite数据库,提供了完全的支持,而所有创建的SQLite数据库,仅限于当前应用访问,如果其他应用需要访问,则必须提供的Content Provider的支持,并且SQLite数据库会随着Android应用的卸载而被删除。SQLite是一个嵌入式的数据库引擎,最后是以文件的形式保存数据的。从本质上来看,SQLite的操作方式只是一种更为便捷的文件操作,当应用程序创建或打开一个SQLite数据库时,其实只是打开一个文件准备读写。因为SQLite仅适用于资源有限的小型设备,所以本身就不应该把大量数据存储在设备的SQLite数据库里,SQLite只适合存储一些小型的数据。   为了使SQLite和其他数据库间的兼容性最大化,SQLite支持对列上类型进行“类型近似”

IOS之数据持久化

大兔子大兔子 提交于 2019-12-19 01:21:40
9.1 数据持久化概述 9.2 iOS应用程序目录结构 9.3 读写属性列表 9.4 对象归档 9.5 访问SQLite 9.1 数据持久化概述 iOS中可以有四种持久化数据的方式: 属性列表、对象归档、SQLite3和Core Data 9.2 iOS应用程序目录结构 iOS应用程序运行在Mac os模拟器时候,有一下临时目录模拟器3.1.3为例子: /Users/tony/Library/Application Support/iPhone Simulator/3.1.3/Applications IOS应用程序采用沙盒原理设计,ios每个应用程序都有自己的3个目录(Document,Library,tmp),互相之间不能访问。 Documents存放应用程序的数据。 Library目录下面还有Preferences和Caches目录,Preferences目录存放应用程序的使用偏好,Caches目录与Documents很相 似可以存放应用程序的数据。 tmp目录供应用程序存储临时文件。 9.3 读写属性列表 读取Documents目录下文件 可以获得应用程序的Documents文件夹。 NSArray* myPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,

Nhibernate和Sqlite数据库的使用

允我心安 提交于 2019-12-18 13:35:22
hibernate.cfg.xml配置文件Sample: <?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" > <session-factory name="Rock"> <!-- properties --> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver, NHibernate</property> <property name="connection.connection_string">Data Source= D:\Data\SQLite_DB\rock.db ;Version=3</property> <property name="dialect">NHibernate.Dialect.SQLiteDialect, NHibernate</property> <property name="query

Uliweb之 ORM基本使用(Sqlalchemy)

自古美人都是妖i 提交于 2019-12-16 17:47:37
参考:http://limodou.github.io/uliweb-doc/zh_CN/db/orm.html#title_1-2 ORM基本使用 ¶ 使用要求 ¶ 需要安装sqlalchemy 0.7+以上的版本。如果你使用sqlite,则python 2.6+就自带了。如果 使用其它的数据库,则还需要安装相应的包。sqlalchemy本身是不带的。 配置 ¶ 首先将 uliweb.contrib.orm 添加到 apps/settings.ini 的 INSTALLED_APPS 中去。 uliweb.contrib.orm 的settings.ini中已经提供了几个缺省的配置项,用来控制ORM 的行为: [ORM] DEBUG_LOG = False AUTO_CREATE = True AUTO_TRANSACTION_IN_NOTWEB = False AUTO_TRANSACTION_IN_WEB = False CHECK_MAX_LENGTH = False CONNECTION = 'sqlite:///database.db' CONNECTION_ARGS = {} CONNECTION_TYPE = 'long' STRATEGY = 'threadlocal' PK_TYPE = 'int' CONNECTIONS = {} TABLENAME