這幾天接觸了一下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(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,之后行。