这几天接触了一下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. Python下划线的使用

    References: [1]. http://python.jobbole.com/81129/ 本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划 ...

  2. Javascript版-显示相应图片的详细信息

    Hi All, 分享一个通过JS来显示相应图片的详细信息. 需求:进入页面时,动态加载图片信息:当鼠标移动到某一图片上时,则显示该图片的大图片并显示相应说明信息:当鼠标移开图片时,清除新创建的元素. ...

  3. 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)

    一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...

  4. Ubuntu上配置SQL Server Always On Availability Group(Configure Always On Availability Group for SQL Server on Ubuntu)

    下面简单介绍一下如何在Ubuntu上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的填充方法. 目前在Linux上可以搭 ...

  5. js实现谷歌坐标转百度坐标

    js实现谷歌坐标转百度坐标 谷歌坐标转百度坐标 实现算法如下(以js为例,其他语言调整就行): //$lat 维度:$lng 经度  function GCJTobaidu($lat, $lng){ ...

  6. flash2print文档在线预览应用(java,.net)

    一.背景 前段时间,LZ的boss突然给了出了这样一个需求:将原项目中的所有文章关联的附件TXT.PDF.office相关文件全部以flash的形式在网页上进行展示,便于预览.看似简单的需求,整个研发 ...

  7. javaScript 设计模式系列之二:适配器模式

    介绍 适配器模式将一个类的接口转接成用户所期待的,有助于避免大规模改写现有客户代码. In software engineering, the adapter pattern is a softwar ...

  8. selenium+python浏览器窗口的切换

    1.首先需要知道当前浏览器中有多少个活动的窗口 >>> br.window_handles[u'{075a54ee-3d10-4c76-b56d-b645259bbd54}', u' ...

  9. bootstrap之daterangepicker---汉化以及扩展

    一.扩展的功能 1.初始化时,会自动创建一个select标签: 2.当改变select值时,日期也会自动改变,并且会调用apply按钮的click事件 3.点击此处进行预览 4.github地址:ht ...

  10. 上下文Context详细介绍

    1.先看看它的继承结构,下图可以看出Context首先是一个抽象类,继承了Object,Activity,Service,Application都继承了它 2.API中对它的描述: @1Context ...