C# 中 SQLite 使用介绍
2015-09-02 16:27
281 查看
关于SQLite
SQLite是一款轻型的嵌入式的遵守ACID的关系型数据库管理系统,诞生已有15个年头了。随着移动互联的发展,现在得到了更广泛的使用。在使用SQLite之前,我们势必要先了解它一些“个性”的地方。下面是它的一些特点:
1、 自包含。SQLite很大层度上是独立的,他只需要非常小的外部库支持。任何程序能够访问磁盘就可以使用SQLite数据库。这使它适用于嵌入式设备,缺乏桌面计算机支持的基础设施。这也使得SQLite适用于不作任何修改就可运行在不同配置电脑上的程序。
2、 无服务器。大多数SQL数据库引擎被实现为一个单独的服务器进程。程序要访问数据库与服务器通信使用某种形式的进程间通信(通常是TCP / IP),向服务器发送请求并接收返回结果。SQLite则不是这种工作方式。对于SQLite,想要访问数据库直接从磁盘上的对数据库文件执行读和写操作。没有中间的服务器进程。
3、 零配置。使用SQLite不需要“安装”。没有“设置”程序。没有服务器进程需要启动,停止,或配置。不需要管理员来创建一个新的数据库实例或访问权限分配给用户。SQLite不使用配置文件。
4、 支持事务。事务数据库的所有更改和查询表现出原子性、一致性、隔离性、持久性(ACID)。执行SQLite的事务操作时,要么完全执行,要么不执行,即使写入磁盘的操作被程序崩溃,断电等故障打断。
5、 开源。和前面的特点相比,这个似乎没有多大关系。之所以把它作为一个特点,是因为开源在很大层度上会成为我们选择一个解决方案的重要维度。
除了这些,SQLite还有着比同是开源的Mysql、PostgreSQL数据库更快的处理效率,更低的资源占用。看起来很“完美”的东西背后往往也有着致命的缺陷。SQLite的缺陷虽不能说致命,但也足以让你在选择的过程中说NO。如果你要求更精准的控制数据库访问,细粒度锁(SQLite只提供数据库级的锁定)以及很好的并发性(虽然可以手动实现并发,但是性能不高,也容易出现死锁),SQLite也许不适合你。另外,SQLite也不适合远程访问,虽然可以通过网络共享的方式运行,但是会存在文件锁定的问题,而且访问网络共享相关的延迟会导致性能的下降。
安装配置
前面说过了,使用SQLite是超级简单的,无需安装,只需要在官网下载库文件添加引用即可。当然,还有很简单的一些配置。还有更简单的方法,使用Nuget添加SQLite库文件并自动配置,这简直是一键搞定啊。首先,在Nuget中找到SQLite。这里我们选择第一个安装。
/// <summary> /// Linq to SQLite /// </summary> public class SQLiteDataContext : DataContext { public SQLiteDataContext(string connection, MappingSource mappingSource) : base(connection, mappingSource) { } public SQLiteDataContext(IDbConnection connection, MappingSource mappingSource) : base(connection, mappingSource) { } public SQLiteDataContext(string connectionString) : base(new SQLiteConnection(connectionString)) { } public SQLiteDataContext(IDbConnection connection) : base(connection) { } }
SQLiteDataContext
如果看了上面的Code,会发现查询表数据方法是使用的Linq。这种方式相比遍历IDataReader要高效得多。只是目前.NET只支持查询,如果想要实现增删改需要第三方库支持。常见的有Dblinq 、linqconnect、linq2db和ado.net sqlite data provider等。不过使用事务批量插入数据也非常的快。
写在后面
SQLite作为一款轻型高效的嵌入式数据库,适合简单高性能低并发的应用,在移动端使用将会是广泛的,如果是高通信量的Web站点,SQLite是不合适的。据@InkFx指出,也看了一些大数据案例,证实SQLite对高负载支持也很好(未亲自测试)。当然,这种高负载也会受制于运行时的文件系统。
扩展阅读:
http://blchen.com/sqlite-data-provider-in-visual-studio-2012/
相关文章推荐
- MongoDB学习一
- hibernate.cfg.xml配置mysql数据库信息
- MSSQL Server 动态行转列
- Oracle GridControl 11gR1 for Linux 安装和配置指南
- oracle基本数据类型总结
- Oracle 删除表中记录 如何释放表及表空间大小
- mysql 关于对时间字段的查询
- mysql 获取刚插入行的id
- 如何做到在虚拟数据库和真实数据库之间自由切换?【低调赠送:QQ高仿版GG 4.4 最新源码】
- SQLite中的时间日期函数
- mysql定时任务
- 20 个数据库设计最佳实践
- SQL Server 合并复制遇到identity range check报错的解决
- MariaDB 10 Slave Crash-Safe需转为GTID复制模式
- MariaDB 10 Slave Crash-Safe需转为GTID复制模式
- 从hiredis使用出core谈谈redis多线程的使用【转】
- 数据库索引及基本优化入门
- 学习笔记 SQLite数据库应用
- Windows下mysql忘记root密码的解决方法
- sql优化:使用sql profile优化sql语句