这几天接触了一下SQLite,算是有点收获吧,所以总结一下。html
SQLite简介:git
SQLite是用C语言编写的数据库引擎,能够运行在Linux、Windows、Mac平台上。sql
SQLite安装简单,下载,解压配置环境变量就行了,以后就能够用命令行进行操做。数据库
SQLite中每一个数据库都是以单个文件的形式存在的,传说一个数据库最大容量是2T。网络
在事物方面,容许多个进程在同一时间从同一数据库读取数据,可是呢,只有一个能进行写操做。app
SQLite在使用时,是直接从磁盘上进行数据库读写的,他不支持远程连接。函数
SQLite的使用场景:工具
最多见的就是安卓和IOS开发了,由于SQLite占用空间和内存很小,顶多也就几百k,把一些数据存到本地,不用经过网络与远程数据库交互。ui
我还想到一个例子,与IOS开发的同志交流了一下子,在IOS开发中, 我就问像用户名,密码这些东西是否是也是存到SQLite中了。这个他回答,不用,由于IOS中有一个专门的list集合NSUserDefaults,这个集合就是键值对,存一些基本信息,也能够存不少数据类型。这个我就i想到和H5里面的本地存储一个样,想当初用appcan这种开发混合应用的app时,里面也有个localstorage这样的东西,专门存储一些例如帐户密码这些信息。固然IOS里如今有个更牛掰的东西coredata,是面向对象的,更好用。spa
SQLite命令操做
1.执行sqlite3命令。
当执行该命令的时候没有传递任何参数表示默认链接到了一个内存数据库,当退出该程序的时候,数据库自动销毁。
2.退出命令:.quit 或.exit 。
3.建立一个数据库:sqlite3 test.db
注意:建立完毕该数据库后,不会马上在磁盘上生成对应的文件,须要等待在该数据库中建立对象后,数据库文件才会写入到磁盘上。或者也能够用.databases 命令,也行。
4.设置查询语句显示样式:
.mode column --设置以列的方式显示数据
.headers on --设置查询的时候显示列名
.echo on --设置执行Sql语句的时候回显,刚执行的命令
.nullvalue NULL --设置显示的时候把全部的空值显示为null
.databases --显示当前附加到管理器中的全部的数据库
.tables 显示当前管理器中能够看到的全部的表
.schema 显示数据库中的内容的脚本
.schema 对象名 显示某个对象的脚本
5.建立索引
create index IX_mytable_name on mytable(name);
--查看全部的索引
.indices
limit n ;等价于t-sql中的top
offset n;跳过前几条。
6.日期函数:
select date()
select time();
select time('now','localtime'); --17:51:16
select datetime('now','localtime');--2017-07-06 17:51:35
介绍一款SQLite的管理工具:SQLiteStudio
SQLite在C#中使用
SQLite提供了多种语言操做的API,固然也有C#的。其书写方法几乎和ADO.NET的一摸同样。可是要引用System.Data.SQLite.dll,咱们新建项目,用Nuget去直接安装System.Data.SQLite,这样能够。也能够去官网去下载安装包,安装完成以后,去引用这个dll。
表结构:
CREATE TABLE [mytable] ( [id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [value] text NULL , email text null);
C#代码:
//建立链接字符串 string constr = "Data Source=C:/SQLite/test.db;"; //建立链接对象 using (SQLiteConnection con = new SQLiteConnection(constr)) { //建立SQL语句 string sql = "select * from mytable"; //建立命令对象 using (SQLiteCommand cmd = new SQLiteCommand(sql, con)) { con.Open(); using (SQLiteDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { Console.WriteLine(reader.GetInt32(0)+" , "+reader.GetString(1)); } } } } }
注意:可能会遇到 没法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块,这种报错。解决办法,项目引用SQLite.Interop.dll,假如不起做用,替换一下System.Data.SQLite.dll的版本。
最后,还封装了一个本身的类库,关于SQLite的,之后,该慢慢积累本身的类库了。
http://git.oschina.net/sdadx/leiku/blob/master/SqlLibrary/SqliteHelper.cs
---------------------------------------------------------------------------------------华丽的分割线------------------------------------------------------------------------------------------
刚忽然看到一篇用EF操做SQLite的文章,以为不错,我也摘了一点,到我这个博客里,这样也更完整些。
以下图,直接在项目中新建实体模型,这样是不行的,数据源里根本没有SQLite的数据源。这时候应该去SQLite官网下载一个安装包,sqlite-netFx46-setup-bundle-x86-2015-1.0.105.2.exe,我下的是这个,好像必须的下载这个,下别的版本不能用。记得装完后,要重启VS.
安装的过程就没必要说了,最终VS出现右图这个界面,证实装好了,下一步就是创建连接了。
哎,好多坑,安装完成以后,我想直接去VS2015中新建模型,数据源居然尚未System.Data.SQLite Database File这个选项。缘由是我必须先用NuGet,再项目中引入SQLite,以后行。