sqlite数据库

android sqlite *.db-journal

喜夏-厌秋 提交于 2019-12-07 17:38:56
这两天由于项目需要开始使用sqlite数据库,可是在操作过程中,在databases文件下生成*.db的同时总会对应生成一个*.db-journal。刚开始在网上查找原因,网上有人说是数据库操作错误时生成的日志,可是再怎么仔细检查,都发现我对数据库的操作都是正确的,不会有异常,而且*.db-journal文件的大小一直是0. 后来看了下sqlite的官方文档,发现该文件是sqlite的一个临时的日志文件,主要用于sqlite数据库的事务回滚操作了。在事务开始时产生,在事务操作完毕时自动删除,当程序发生崩溃或一些意外情况让程序非法结束时,此文件便保存在了磁盘上,以便下次运行时进行事务回滚。 而android自己的一些机制,又使*.db-journal一直存在。即第一次操作数据库时,*.db-journal文件会被自动创建,且是永久的保存在磁盘中,不会被自动清除的,如果没有操作异常或者不需要事务回滚时,此文件的大小为0。这种机制避免了每次生成和删除*.db-journal文件的开销 来源: oschina 链接: https://my.oschina.net/u/1434977/blog/212182

sqlite rowid与主键

谁说我不能喝 提交于 2019-12-07 16:22:39
rowid和 Integer主键及自增属性 大多数情况下,sqlite3的表都有一个rowid(也叫oid,_rowid_),这是一个64位的整数,并作为sqlite存储结构B树的主键.因此使用rowid查询会比以其他设定的主键查询,速度会非常快. 在做插入操作的时候,对于rowid的值通常情况下不要去指定,让系统自己去决定该去何值。因为sqlite会通过SQLITE_SEQUENCE来追踪表的rowid取值情况.而且sqlite定义了rowid的取值算法:在未超出rowid的范围内,待插入记录的rowid总是表中存在过的的rowid最大值+1。比如依次插入5条记录,此时最后一条记录的rowid是5,如果把这条记录删除再插入新记录,此时新纪录的rowid是6.而当rowid达到所能表达的最大值时,这时如果有新纪录要插入,系统就会随机从之前的没有使用过的正整数中随机取一个作为rowid(就是之前删除过的).若没有未使用的正整数并且你没有在插入的时候制定rowid为某一个负数的话,系统就会抛出SQLITE_FULL的错误. 如果在创建表的时候设置了主键,并且设置主键的那列是integer(不是int,short integer等等),并且主键没有设定降序时,这时的主键是rowid的别名,换言之,主键和rowid没有区别.如果我们再设定主键autoincrement属性时

基于s5pv210嵌入式linux系统sqlite3数据库移植

为君一笑 提交于 2019-12-07 09:20:44
基于s5pv210嵌入式linux系统sqlite3数据库移植 1、下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2、解压 tar xvf XXXXX 3、配置编译环境 运行 ./configure –host=你的交叉编译工具的前缀 –prefix=你想编译安装的位置 我的host为arm-none-linux-gnueabi,prefix为/home/linux/sqlit3-arm 运行后会生成Makefile文件。 4、编译并安装 编译:make 安装:make install 安装完成后会在你设定的目录下生成安装好的文件: bin、include、lib、share bin:为编译完成的sqlite3可执行文件 include:开发数据库程序时需要引用的头文件 lib:开发数据库程序需要引用的库文件,当然sqlite3可执行文件运行也得需要 share:说明文件 5、移植 将bin下的sqlite3可执行文件拷入你自己制作的busybox文件系统相应的目录; 将include下的所有文件拷入制作的busybox文件系统下的/usr/include文件夹下,如果没有该目录自己建立并拷入; 将lib文件夹下的所有文件拷入busybox文件系统的/lib目录下, 从上面可以看出两个软链接文件都是生成自本目录

使用wxSqlite3来解决sqlite加密问题zz

ぐ巨炮叔叔 提交于 2019-12-07 07:53:05
20141222更新: 最后还是没用wxSQLite3,而是使用了SQLCipher,感觉SQLCipher的文档写得好一些,可以参考这两个链接: http://www.cocoachina.com/industry/20140522/8517.html , https://www.zetetic.net/sqlcipher/ios-tutorial/ ------------------- 这里介绍一个开源项目: wxSQLite3 ,该项目是一个 SQLite 的 C++ warpper,它顺带将 SQLite 的加密函数实现了,并且它使用 AES 算法进行加密。你可以在 http://sourceforge.net/projects/wxcode/files/Components/ 下 载到最新的包,在目录 \sqlite3\secure 下你可以找到一个 sqlite3.dll 文件,这个就是已编译的带加密的 SQLite 3 DLL 文件,而且 wxSQLite3 项目更新很快,你总是可以下载到较新的包。在最新的1.9.8版本中开始对256位AES加密进行实验,估计不久的版本就可以稳定使用。 使用起来也很简单,首先打开数据库 sqlite3_open ,然后在操作数据库之前执行 sqlite3_key 后就可进行数据库操作,否则会返回错误。 sqlite3

SQLite学习手册(锁和并发控制)

北城以北 提交于 2019-12-06 16:06:16
一、概述: 在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID(Atomic, Consistent, Isolated, and Durable)。在含有数据修改的事务中,该模块将确保或者所有的数据修改全部提交,或者全部回滚。与此同时,该模块还提供了一些磁盘文件的内存Cache功能。 事实上,pager_module模块并不关心数据库存储的细节,如B-Tree、编码方式、索引等,它只是将其视为由统一大小(通常为1024字节)的数据块构成的单一文件,其中每个块被称为一个页(page)。在该模块中页的起始编号为1,即第一个页的索引值是1,其后的页编号以此类推。 二、文件锁: 在SQLite的当前版本中,主要提供了以下五种方式的文件锁状态。 1). UNLOCKED: 文件没有持有任何锁,即当前数据库不存在任何读或写的操作。其它的进程可以在该数据库上执行任意的读写操作。此状态为缺省状态。 2). SHARED: 在此状态下,该数据库可以被读取但是不能被写入。在同一时刻可以有任意数量的进程在同一个数据库上持有共享锁,因此读操作是并发的。换句话说,只要有一个或多个共享锁处于活动状态,就不再允许有数据库文件写入的操作存在。 3). RESERVED: 假如某个进程在将来的某一时刻打算在当前的数据库中执行写操作,然而此时只是从数据库中读取数据

Python SQLite简易攻略

风格不统一 提交于 2019-12-06 14:33:24
大伙还是从文章底部的链接看原文吧 转的贴老是有代码格式问题 OSC解决下 一、SQLite简介 SQLite是一个包含在C库中的轻量级数据库。它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库。一些应用可是使用SQLite保存内部数据。它也可以在构建应用原型的时候使用,以便于以后转移到更大型的数据库,比如PostgreSQL或者Oracle。 sqlite3模块由Gerhard Häring编写,提供了一个SQL接口,这个接口的设计遵循了由PEP 249描述的DB-API 2.0说明书。 二、创建并打开数据库 为了使用这个模块,必须先创建一个连接(Connection)对象来代表数据库。在以下的例子中,数据将会被保存在 example.db 文件中: 1 import sqlite3 2 conn = sqlite3.connect( ' example.db ' ) 如果指定的数据库存在,就会直接打开这个数据库,否则将新建一再打开。 也可以提供专用名 :memory: 来在内存中建立数据库。 三、数据库连接对象 一旦拥有了连接(Connection)对象,就可以创建游标(Cursor)对象并调用他的execute()方法来执行SQL语句: 1 c = conn.cursor() 2 3 # Create

几行代码轻松搞定python的sqlite3的存取

…衆ロ難τιáo~ 提交于 2019-12-06 05:06:56
很简单: 存数据:   1、加载sqlite3驱动(只需一行代码)   2、用驱动执行查询语句(只需一行代码) 取数据:   1、加载sqlite3驱动(只需一行代码)   2、用驱动执行查询语句(只需一行代码) 乍一看,sqlite存取数据方式似乎都一样,实际上,就是一样,废话不多说 上例子:   1、存以下内容: s=['Alice','Joker','张三','王五']   2、先建立数据库,再在数据库中建一个数据表: conn=sqlite3.connect('SqliteDatebase.db')    #建立数据库,数据库名为'SqliteDatebase.db',且加载sqlite3驱动(若数据库已存在,则不会创建新库,不存在则创建该数据库)conn.execute('CREATE TABLE if not exists name_table(name char)')      #数据库驱动执行创建语句,创建名为'name_table'的数据表,且指定表中一列的列名为'name'(该创建语句的意思是如果'name_table'表格不存在,则创建新表,否则不创建)   3、就是这样的表格    4、接着开始进入重头戏:存数据 for i in s: conn.execute('insert into name_table(name) values(?)',(i,))  

sqlite3笔记

梦想的初衷 提交于 2019-12-06 02:56:50
Sqlite3 test.db — 创建数据库 sqlite3 test.db .dump > test.sql — .dump 点命令来导出完整的数据库在一个文本文件中 sqlite3 test.db < test.sql — 从生成的 test.sql 恢复 ———————————————————————— 所有的点命令只在 SQLite命令行中可用 sqlite_master ———————————————————————— 在命令行中打开一个已存在的数据库 .open /Users/zhangzhennan/test.db ———————————————————————— 列出所有数据库中的表 .tables SELECT tbl_name FROM sqlite_master WHERE type = 'table'; 列出表信息 .schema wp_posts select sql from sqlite_master where type='table' and tbl_name = 'wp_posts' 
 ———————————————————————— Insert 语句 import sqlite3; connect = sqlite3.connect('/Users/xxx/test.db'); print('connection successful')

python 操作 sqlite 数据库(建表, 增删改查)

China☆狼群 提交于 2019-12-06 00:30:27
import sqlite3 def create ( conn ) : """ 创建相应的数据表 """ sql_create = ''' CREATE TABLE `users` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `username` TEXT NOT NULL UNIQUE, `password` TEXT NOT NULL, `email` TEXT ) ''' # 用 execute 执行一条 sql 语句 conn . execute (sql_create) print ( '创建成功' ) def insert ( conn , username , password , email ) : """ 插入一行的数据 """ sql_insert = ''' INSERT INTO users(username, password, email) VALUES ( ? , ? , ? ); ''' # 下面写法会被 SQL 注入 # sql = ''' # INSERT INTO # users(username, password, email) # VALUES # ("{}", "{}", "{}") # '''.format('123', '345', 'a.com') # conn

将sqlite数据库复制到用户目录

六月ゝ 毕业季﹏ 提交于 2019-12-05 23:48:40
Sqlite 如何在 IOS开发 中应用是本文要介绍的内容,主要是来学习在 IOS开发 中 sqlite数据库 的使用方法。 sqlite数据库 初始化,复制到用户目录,并判断是否 数据库 已经存在,或者复制是否成功! 在AppDelegate.m中输入以下代码,以便复制预置数据库到指定doucment目录 - (BOOL) initializeDb { NSLog (@"initializeDB"); // look to see if DB is in known location (~/Documents/$DATABASE_FILE_NAME) //START:code.DatabaseShoppingList.findDocumentsDirectory NSArray * searchPaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString * documentFolderPath = [searchPaths objectAtIndex: 0]; //查看文件目录 NSLog(@"%@",documentFolderPath); dbFilePath = [documentFolderPath