这几天接触了一下SQLite,算是有点收获吧,因此总结一下。

SQLite简介:

SQLite是用C语言编写的数据库引擎,可以运行在Linux、Windows、Mac平台上。

SQLite安装简单,下载,解压配置环境变量就好了,之后就可以用命令行进行操作。

SQLite中每个数据库都是以单个文件的形式存在的,传说一个数据库最大容量是2T。

在事物方面,允许多个进程在同一时间从同一数据库读取数据,但是呢,只有一个能进行写操作。

SQLite在使用时,是直接从磁盘上进行数据库读写的,他不支持远程链接。

SQLite的使用场景:

  最常见的就是安卓和IOS开发了,因为SQLite占用空间和内存很小,顶多也就几百k,把一些数据存到本地,不用通过网络与远程数据库交互。

  我还想到一个例子,与IOS开发的同志交流了一会儿,在IOS开发中, 我就问像用户名,密码这些东西是不是也是存到SQLite中了。这个他回答,不用,因为IOS中有一个专门的list集合NSUserDefaults,这个集合就是键值对,存一些基本信息,也可以存很多数据类型。这个我就i想到和H5里面的本地存储一个样,想当初用appcan这种开发混合应用的app时,里面也有个localstorage这样的东西,专门存储一些例如账户密码这些信息。当然IOS里现在有个更牛掰的东西coredata,是面向对象的,更好用。

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()+" , "+reader.GetString()); }
}
}
}
}

注意:可能会遇到 无法加载 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,之后行。

SQLite的总结与在C#的使用的更多相关文章

  1. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

  2. UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

    选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...

  3. 深入解析Sqlite的完美替代者,android数据库新王者——Realm

    写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里给大家补刀,所以我觉得今天不虐狗,继续给大家分享有用的. 如果你比较关心androi ...

  4. VS15 preview 5打开文件夹自动生成slnx.VC.db SQLite库疑惑?求解答

    用VS15 preview 5打开文件夹(详情查看博客http://www.cnblogs.com/zsy/p/5962242.html中配置),文件夹下多一个slnx.VC.db文件,如下图: 本文 ...

  5. Android之SQLite数据存储

    一.SQLite保存数据介绍 将数据库保存在数据库对于重复或者结构化数据(比如契约信息)而言是理想之选.SQL数据库的主要原则之一是架构:数据库如何组织正式声明.架构体现于用于创建数据库的SQL语句. ...

  6. 【教程】SQLite数据库修复

    SQLite 大家都知道,就不多说了. 有时候数据量大了,或者存储过程中出现异常,数据库就可能会出问题. 这是以前公司产品出现过的问题,导致软件都打不开了,我花了不少时间才解决的,趁现在有空贡献出来. ...

  7. SQLite学习笔记(十)&&加密

    随着移动互联网的发展,手机使用越来越广泛,sqlite作为手机端存储的一种解决方案,使用也非常普遍.但是sqlite本身安全特性却比较弱,比如不支持用户权限,只要能获取到数据库文件就能进行访问:另外也 ...

  8. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

  9. 【腾讯Bugly干货分享】微信iOS SQLite源码优化实践

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57b58022433221be01499480 作者:张三华 前言 随着微信iO ...

  10. 【腾讯Bugly干货分享】移动客户端中高效使用SQLite

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57b57f2a0703f7d31b9a3932 作者:赵丰 导语 iOS 程序能 ...

随机推荐

  1. Error:Android Source Generator: [sdk] Android SDK is not specified.

    有时候使用intellij idea 带入android 项目,运行提示Error:Android Source Generator: [sdk] Android SDK is not specifi ...

  2. ArrayList源码解析(二)自动扩容机制与add操作

    本篇主要分析ArrayList的自动扩容机制,add和remove的相关方法. 作为一个list,add和remove操作自然是必须的. 前面说过,ArrayList底层是使用Object数组实现的. ...

  3. C# set get 函数 属性访问器

    属性访问器  拿东西就是Get,放东西就是Setprivate string namepublic String Name{set{name = value;}get{return name;}}ge ...

  4. HDFS运行原理

    HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Googl ...

  5. 挂载mount

    mount 1 挂载mount 基本概念 挂载:将额外文件系统与根文件系统现存的目录建立起关联关系,进而使得此目录做为其它文件访问入库的行为 卸载:为解除关联关系的过程 注意:挂载点下原有的文件在挂载 ...

  6. 搞定python多线程和多进程

    1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发 ...

  7. 建造者模式—设计角度重温DNF中的角色

    应用场景 假设现在我们要设计DNF中的人物角色(鬼剑士.神枪手.魔法师.圣骑士.格斗家).然而,利用面对对象的思想,必须先从实体入手,每一个角色都包含各种装备.武器.配饰,这些就当做要建造的零件,然后 ...

  8. 搭建免费wifi,嗅探接入该wifi的所有网络信息

    环境: 1: create_ap , 搭建免费wifi. 2: wireshark , 嗅探网络信息. 搭建热点 搭建热点: git clone https://github.com/oblique/ ...

  9. Java中设计模式之装饰者模式-3

    装饰者模式: 动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的替代方案. 装饰者核心:实现功能组合 继承与组合区别: 继承 继承是给一个类添加行为的比较有效的途径.通过使用继承, ...

  10. Laravel项目修改时区

    Laravel项目修改时区 最近做了一个支付宝支付的应用,现在还在开发过程中,今天早上起床之后先调试了一下项目,模拟支付了一笔(¥9999.00) 2333支付宝的沙箱环境啦,屌丝程序猿哪来这么多钱- ...