sqlite数据库

Sqlite使用中的几点体会。

吃可爱长大的小学妹 提交于 2019-11-27 00:07:26
最近接了个美国的小项目,主要需求是把盘点机导出的数据(DBF格式)和另外的数据(csv格式)合并生成新的数据表,方便查询纠错。对方没有安装ms Access,考虑到对方使用方便,就采用了sqlite,开发语言使用.net 2.0。 下面简单罗列下用过程中的几点体会。 Provider :通过使用其他开源软件的体会和网上搜索,Provider决定使用 System.Data.SQLite 。 事务(DbTransaction) :因为涉及数据导入合并,批量插入和更新等工作是必须的了,一开始没有显式调用事务,速度别提多慢,于是想当然觉得sqlite速度比access还慢,后来搜索发现,原来 SQLite 缺省为每个操作启动一个事务,其实这是数据库操作的基本常识,不仅仅Sqlite需要注意这些,当然Access等不支持事务的不在此列。 索引(index) :数据导入合并,插入和更新时都需要查询数据是否有重复以及存在,所以索引是不可以缺少的。 S QLiteParameter :批量插入的时候,为了省懒事,使用string.format来格式化插入,结果碰到“ near "s": syntex error. ”,经过跟踪,原来是单引号(')的问题,看来还是乖乖使用 S QLiteParameter来规范地导入,并可以避免很多字符上的问题。 Update ...From(Cross Join

SQLite清空表并将自增列归零

跟風遠走 提交于 2019-11-26 22:16:02
SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容。但SQLite不支持这个语句。 在SQLite中直接使用“DELETE FROM TableName”就可以了。 对于大多数DBMS来说,用DELETE不如用TRUNCATE 速度快,因为TRUNCATE 不用访问整个表,不用记录数据的变动。 SQLite虽然不支持TRUNCATE,但它对DELETE做了优化: “When the WHERE is omitted(略去) from a DELETE statement and the table being deleted has no triggers(触发器), SQLite uses an optimization(优化) to erase the entire table content without having to visit each row of the table individually. This “truncate” optimization makes the delete run much faster.” 通常在清空表的时候,还需要把自增列归零。在SQLite中定义自增列的方法如下: CREATE TABLE TableName ( id INTEGER PRIMARY KEY AUTOINCREMENT, ... );

SQLite进阶-9.别名

回眸只為那壹抹淺笑 提交于 2019-11-26 21:02:35
我们可以暂时给表或者列重命名为另一个名字,称为 别名 ,重命名只是临时运行时改变,不会改变数据库中的实际的名字。 -- 语法 SELECT column_name AS column_alias_name FROM table_name AS table_alias_name WHERE [condition]; -- 实例 select l.id, l.name from link_men as l; 来源: https://www.cnblogs.com/haitao130v/p/11333294.html

sqlite ef6

拥有回忆 提交于 2019-11-26 19:35:03
参考文章: http://www.cnblogs.com/adswads/p/3808549.html 用NUGET 引用 System.Data.SQLite.EF6 app.config 会有默认配置 其中有部分不对.不知道为什么 错误的Config 绿色不需要的虽然本身就是错的. invariantName是SQLite type后面用了SqlProviderServices 正确的应该是SQLiteProviderServices < providers > <!-- <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SQLiteProviderServices, System.Data.SQLite.EF6" /> --> < provider invariantName ="System.Data.SQLite" type ="System.Data.SQLite.EF6.SqlProviderServices, System.Data.SQLite.EF6" /> < provider invariantName ="System.Data.SQLite.EF6" type ="System.Data.SQLite.EF6

SQLite 线程安全和并发

為{幸葍}努か 提交于 2019-11-26 14:06:45
SQLite 与线程 SQLite 是线程安全的。 线程模型 SQLite 支持如下三种线程模型 单线程模型 这种模型下,所有互斥锁都被禁用,同一时间只能由一个线程访问。 多线程模型 这种模型下,一个连接在同一时间内只有一个线程使用就是安全的。 串行模型 开启所有锁,可以随意访问。 设置线程模型 SQLite 可以通过以下三种方式进行线程模型的设置,在实际应用中选择任一一项都可以。 编译期设定 通过 SQLITE_THREADSAFE 这个参数进行编译器的设定来选择线程模型 初始化设定 通过调用 sqlite3_config() 可以在 SQLite 初始化时进行设定 运行时设定 通过调用 sqlite3_open_v2() 接口指定数据库连接的数据库模型 SQLite 并发和事务 事务 事务是 SQLite 的核心概念。对数据库的操作 (绝大部分) 会被打包成一个事务进行提交,需要注意的是,这里的打包成事务是自动开启的。举例而言,如果简单在一个 for 循环语句里向数据库中插入 10 条数据,意味着将自动生成 10 个事务。但需要注意的是事务是非常耗时的,一般而言, SQLite 每秒能够轻松支持 50000 条的数据插入,但是每秒仅能够支持几十个事务。一般而言,事务速度受限于磁盘速度。所以在批量插入时需要考虑禁用自动提交,将其用 BEGIN ... COMMIT 打包成一个事务

压缩Sqlite数据文件大小,解决数据删除后占用空间不变的问题

天大地大妈咪最大 提交于 2019-11-26 11:49:19
最近有一网站使用Sqlite数据库作为数据临时性的缓存,对多片区进行划分 Sqlite数据库文件,每天大概新增近1万的数据量,起初效率有明显的提高,但历经一个多月后数据库文件从几K也上升到了近160M,数据量也达到了 40多万条,平均每一条数据占用了 4K的空间,虽然使用上的效率直观上没有造成太大的影响,但服务器的占用内存却比原来多占用了20%左右。今天刚好打算清除一个Sqlite的冗余数据, 将保留最近10天的数据就可以了,结果执行了删除指令delete后删除30多万条数据保留了10多万数据,却发现Sqlite数据库文件占用空间的大小 一点没有少,这是为什么呢? 原因是: 当你从 Sqlite 删除数据后,未使用的磁盘空间被添加到一个内在的 ” 空闲列表 ” 中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。(嘿嘿, Sqlite.org 的 FAQ 中提到过这个问题) 解决方法:两种 一, 在数据删除后,手动执行VACUUM命令,执行方式很简单 objSQLHelper.ExecuteNonQuery(CommandType.Text, "VACUUM") VACUUM命令会清空“空闲列表”,把数据库尺寸压缩到最小。但是要耗费一些时间。 FQA里面说,在Linux的环境下,大约0.5秒/M。并且要使用两倍于数据库文件的空间。 我憎恨此FQA

SQLite3 简要使用指南

ぃ、小莉子 提交于 2019-11-26 10:15:01
转:http://c.gzl.name/archives/195 SQLite是基于C的API,在iPhone中的运行速度超级快(在苹果网站上也有一个对比,确实应该是速度最快的)。 由于在iPhone3.0上已经支持了Core Data,是苹果一个新的API,并且是基于SQlite的。速度也是非常快吧,信不信由你。所以我们对SQLite仅需要懂一些即可,以下是一些基础信 息 打开数据库 sqlite3 * database = NULL ; //建立一个sqlite数据库变量 int sqlite3_open ( const char * 文件名 , sqlite3 ** db ) ; //那个文件名需要是cString, //之后那个db对象使用我们建立的database变量 //以下是一个开打的例子: NSString * fileAddress = [ [ NSBundle mainBundle ] pathForResource : @ "预存文件的文件名" ofType : @ "db" ] ; //db是扩展名 if ( sqlite3_open ( [ fileAddress UTF8String ] , & amp ; database ) == SQLITE_OK ) //UTF8String方法转换NSString为cString 执行一个SQLite语句 :

MySQL学习:数据库工具SQLite Expert怎么用

别等时光非礼了梦想. 提交于 2019-11-25 23:44:19
都说不懂数据库的程序员不是合格的程序员,正在学Python的我怎么能不懂数据库,几经思考,终于选了数据库经典入门课程MySQL开始学习。 可是刚一开始学我就遇到了难题~! SQLite Expert? 这是什么?网上查了好久,才明白SQLite Expert 是一种数据库工具。 想要学数据库,就得先学会使用SQLite Expert工具 ,并且熟悉SQLite语句,“增删改查”这是最基本的。 初学MySQL,我还是觉得语法太多了,根本记不住。想要靠自己完全掌握有点难,网上找了一个讲数据库的小视频,我觉得讲的超详细,特来分享给大家~ 如果你也想快速掌握数据库,跟我一起看看下方视频,听知名技术专家李刚老师对SQLite Expert和数据库编程的详细解析, 数据库编程之使用SQLite Expert 李刚老师出版的《疯狂Java》系列图书曾得到市场的广泛认可,经过多次再版,已被多家高校选作教材。上方视频来自于李刚老师的在线视频课程《21天通关Python》第七章第一节 数据库编程之使用SQLite Expert 鉴于大家都有学习Python的困惑,今天就给大家推荐一本巨有影响力的Python实战书,上线时间仅2个月,就超越了众多实力派,成京东和当当网上的长期畅销图书,并且收获了3.4W的五星好评。 这本书可谓是笔者独家私藏图书之一了,对我学习Python有着莫大的帮助,在京东上也常常