婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > asp.net下SQLite(輕量級(jí)最佳數(shù)據(jù)庫) 原理分析和開發(fā)應(yīng)用

asp.net下SQLite(輕量級(jí)最佳數(shù)據(jù)庫) 原理分析和開發(fā)應(yīng)用

熱門標(biāo)簽:天津電銷外呼系統(tǒng)違法嗎 溫州外呼系統(tǒng)招商 銀行信貸電話機(jī)器人 400電話個(gè)人能不能辦理 凱立德地鐵站地圖標(biāo)注 滄州電銷外呼系統(tǒng)價(jià)格 上海400客服電話怎么申請(qǐng) 手機(jī)外呼系統(tǒng)什么原理 合肥ai電銷機(jī)器人費(fèi)用

概述

SQLite介紹

自幾十年前出現(xiàn)的商業(yè)應(yīng)用程序以來,數(shù)據(jù)庫就成為軟件應(yīng)用程序的主要組成部分。正與數(shù)據(jù)庫管理系統(tǒng)非常關(guān)鍵一樣,它們也變得非常龐大,并占用了相當(dāng)多的系統(tǒng)資源,增加了管理的復(fù)雜性。隨著軟件應(yīng)用程序逐漸模塊模塊化,一種新型數(shù)據(jù)庫會(huì)比大型復(fù)雜的傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)更適應(yīng)。嵌入式數(shù)據(jù)庫直接在應(yīng)用程序進(jìn)程中運(yùn)行,提供了零配置(zero-configuration)運(yùn)行模式,并且資源占用非常少。
SQLite是一個(gè)開源的嵌入式關(guān)系數(shù)據(jù)庫,它在2000年由D. Richard Hipp發(fā)布,它的減少應(yīng)用程序管理數(shù)據(jù)的開銷,SQLite可移植性好,很容易使用,很小,高效而且可靠。
SQLite嵌入到使用它的應(yīng)用程序中,它們共用相同的進(jìn)程空間,而不是單獨(dú)的一個(gè)進(jìn)程。從外部看,它并不像一個(gè)RDBMS,但在進(jìn)程內(nèi)部,它卻是完整的,自包含的數(shù)據(jù)庫引擎。

嵌入式數(shù)據(jù)庫的一大好處就是在你的程序內(nèi)部不需要網(wǎng)絡(luò)配置,也不需要管理。因?yàn)榭蛻舳撕头?wù)器在同一進(jìn)程空間運(yùn)行。SQLite 的數(shù)據(jù)庫權(quán)限只依賴于文件系統(tǒng),沒有用戶帳戶的概念。SQLite 有數(shù)據(jù)庫級(jí)鎖定,沒有網(wǎng)絡(luò)服務(wù)器。它需要的內(nèi)存,其它開銷很小,適合用于嵌入式設(shè)備。你需要做的僅僅是把它正確的編譯到你的程序。

架構(gòu)(architecture)

SQLite采用了模塊的設(shè)計(jì),它由三個(gè)子系統(tǒng),包括8個(gè)獨(dú)立的模塊構(gòu)成。

 

sqlite1

 

接口(Interface)
接口由SQLite C API組成,也就是說不管是程序、腳本語言還是庫文件,最終都是通過它與SQLite交互的(我們通常用得較多的ODBC/JDBC最后也會(huì)轉(zhuǎn)化為相應(yīng)C API的調(diào)用)。
編譯器(Compiler)
在編譯器中,分詞器(Tokenizer)和分析器(Parser)對(duì)SQL進(jìn)行語法檢查,然后把它轉(zhuǎn)化為底層能更方便處理的分層的數(shù)據(jù)結(jié)構(gòu)---語法樹,然后把語法樹傳給代碼生成器(code generator)進(jìn)行處理。而代碼生成器根據(jù)它生成一種針對(duì)SQLite的匯編代碼,最后由虛擬機(jī)(Virtual Machine)執(zhí)行。
虛擬機(jī)(Virtual Machine)
架構(gòu)中最核心的部分是虛擬機(jī),或者叫做虛擬數(shù)據(jù)庫引擎(Virtual Database Engine,VDBE)。它和Java虛擬機(jī)相似,解釋執(zhí)行字節(jié)代碼。VDBE的字節(jié)代碼由128個(gè)操作碼(opcodes)構(gòu)成,它們主要集中在數(shù)據(jù)庫操作。它的每一條指令都用來完成特定的數(shù)據(jù)庫操作(比如打開一個(gè)表的游標(biāo))或者為這些操作棧空間的準(zhǔn)備(比如壓入?yún)?shù))。總之,所有的這些指令都是為了滿足SQL命令的要求(關(guān)于VM,后面會(huì)做詳細(xì)介紹)。
后端(Back-End)
后端由B-樹(B-tree),頁緩存(page cache,pager)和操作系統(tǒng)接口(即系統(tǒng)調(diào)用)構(gòu)成。B-tree和page cache共同對(duì)數(shù)據(jù)進(jìn)行管理。B-tree的主要功能就是索引,它維護(hù)著各個(gè)頁面之間的復(fù)雜的關(guān)系,便于快速找到所需數(shù)據(jù)。而pager的主要作用就是通過OS接口在B-tree和Disk之間傳遞頁面。

SQLite的特點(diǎn)(SQLite's Features and Philosophy)
零配置(Zero Configuration)
可移植(Portability):
它是運(yùn)行在Windows,Linux,BSD,Mac OS X和一些商用Unix系統(tǒng),比如Sun的Solaris,IBM的AIX,同樣,它也可以工作在許多嵌入式操作系統(tǒng)下,比如QNX,VxWorks,Palm OS, Symbin和Windows CE。
Compactness:
SQLite是被設(shè)計(jì)成輕量級(jí),自包含的。one header file, one library, and you're relational, no external database server required
簡單(Simplicity)
靈活(Flexibility)
可靠(Reliability):
SQLite的核心大約有3萬行標(biāo)準(zhǔn)C代碼,這些代碼都是模塊化的,很容易閱讀。

 

事務(wù)(Transaction)

事務(wù)的周期(Transaction Lifecycles)
程序與事務(wù)之間有兩件事值得注意:
A、哪些對(duì)象在事務(wù)下運(yùn)行——這直接與API有關(guān)。
B、事務(wù)的生命周期,即什么時(shí)候開始,什么時(shí)候結(jié)束以及它在什么時(shí)候開始影響別的連接(這點(diǎn)對(duì)于并發(fā)性很重要)——這涉及到SQLite的具體實(shí)現(xiàn)。
一個(gè)連接(connection)可以包含多個(gè)(statement),而且每個(gè)連接有一個(gè)與數(shù)據(jù)庫關(guān)聯(lián)的B-tree和一個(gè)pager。Pager在連接中起著很重要的作用,因?yàn)樗芾硎聞?wù)、鎖、內(nèi)存緩存以及負(fù)責(zé)崩潰恢復(fù)(crash recovery)。當(dāng)你進(jìn)行數(shù)據(jù)庫寫操作時(shí),記住最重要的一件事:在任何時(shí)候,只在一個(gè)事務(wù)下執(zhí)行一個(gè)連接。這些回答了第一個(gè)問題。
一般來說,一個(gè)事務(wù)的生命和statement差不多,你也可以手動(dòng)結(jié)束它。默認(rèn)情況下,事務(wù)自動(dòng)提交,當(dāng)然你也可以通過BEGIN..COMMIT手動(dòng)提交。接下來就是鎖的問題。

sqlite02

關(guān)于這個(gè)圖有以下幾點(diǎn)值得注意:
A、一個(gè)事務(wù)可以在UNLOCKED,RESERVED或EXCLUSIVE三種狀態(tài)下開始。默認(rèn)情況下在UNLOCKED時(shí)開始。
B、白色框中的UNLOCKED, PENDING, SHARED和 RESERVED可以在一個(gè)數(shù)據(jù)庫的同一時(shí)存在。
C、從灰色的PENDING開始,事情就變得嚴(yán)格起來,意味著事務(wù)想得到排斥鎖(EXCLUSIVE)(注意與白色框中的區(qū)別)。
雖然鎖有這么多狀態(tài),但是從體質(zhì)上來說,只有兩種情況:讀事務(wù)和寫事務(wù)。

 

讀者可以從http://www.sqlite.org/下載SQLite 3.3.4的版本
Cmd 進(jìn)入命令行


    創(chuàng)建數(shù)據(jù)庫文件:
   >SQLite3 d:\test.db 回車
   就生成了一個(gè)test.db在d盤。
   這樣同時(shí)也SQLite3掛上了這個(gè)test.db

   用.help可以看看有什么命令
   >.help 回車即可

   看看有創(chuàng)建了多少表
   >.tables


   看表結(jié)構(gòu)
   >.schema 表名


  看看目前掛的數(shù)據(jù)庫
   >.database


   如果要把查詢輸出到文件
   >.output 文件名
   > 查詢語句;


   把查詢結(jié)果用屏幕輸出
   >.output stdout

   把表結(jié)構(gòu)輸出,同時(shí)索引也會(huì)輸出
    > .dump 表名
   退出
   >.exit 或者.quit

 

http://sqlite.phxsoftware.com/下載Ado.net驅(qū)動(dòng)。
   下載了安裝,在安裝目錄中存在System.Data.SQLite.dll
    我們只需要拷貝這個(gè)文件到引用目錄,并添加引用即可對(duì)SQLite數(shù)據(jù)庫操作了
   所有的Ado.net對(duì)象都是以SQLite開頭的,比如SQLiteConnection
   連接串只需要如下方式
   Data Source=d:\test.db 或者DataSource=test.db--應(yīng)用在和應(yīng)用程序或者.net能夠自動(dòng)找到的目錄
   剩下的就很簡單了~~

SQL語法
   由于以前用SQLServer或者ISeries,所以DDL的語法很汗顏
   創(chuàng)建一個(gè)單個(gè)Primary Key的table
   CREATE TABLE  [Admin] (
[UserName] [nvarchar] (20)   PRIMARY KEY NOT NULL ,
[Password] [nvarchar] (50)   NOT NULL ,
[Rank] [smallint] NOT NULL ,
[MailServer] [nvarchar] (50)   NOT NULL ,
[MailUser] [nvarchar] (50)   NOT NULL ,
[MailPassword] [nvarchar] (50)   NOT NULL ,
[Mail] [nvarchar] (50)   NOT NULL
   ) ;
  創(chuàng)建一個(gè)多個(gè)Primary Key的table
   CREATE TABLE  [CodeDetail] (
[CdType] [nvarchar] (10)  NOT NULL ,
[CdCode] [nvarchar] (20)  NOT NULL ,
[CdString1] [ntext]   NOT NULL ,
[CdString2] [ntext]   NOT NULL ,
[CdString3] [ntext]   NOT NULL,
  PRIMARY KEY (CdType,CdCode)
   ) ;
  創(chuàng)建索引
   CREATE  INDEX [IX_Account] ON  [Account]([IsCheck], [UserName]);
   還可以視圖等等。
 

SQLite 分頁查詢

寫法1:

SELECT * FROM TABLE1 LIMIT  20 OFFSET 20 ;

寫法2:

SELECT * FROM TABLE1 LIMIT 20 , 20;

SQLite 文件的壓縮
在多次刪除數(shù)據(jù)、插入數(shù)據(jù)、更新數(shù)據(jù)后,數(shù)據(jù)庫體積增大,但實(shí)際有效數(shù)據(jù)量很小,則需要對(duì)數(shù)據(jù)庫進(jìn)行壓縮、整理,把已經(jīng)刪除的數(shù)據(jù)從物理文件中移除。調(diào)用一下SQL命令即可:

VACUUM

VACUUM的實(shí)現(xiàn)

sqlite3

數(shù)據(jù)插入與更新

使用REPLACE替代INSERT、UPDATE命令。在無滿足條件記錄,則執(zhí)行Insert,有滿足條件記錄,則執(zhí)行UPDATE。

復(fù)制代碼 代碼如下:

REPLACE INTO TABLE1(col1, col2, col3) VALUES(val1, val2,val3);

Insert or Replace Into 和Replace Into 的效果是一樣的上面這句話也可以這樣寫
復(fù)制代碼 代碼如下:

Insert or Replace INTO TABLE1(col1, col2, col3) VALUES(val1, val2,val3);

字符編碼轉(zhuǎn)換
sqlite3的源碼中,提供了utf8ToUnicode()、unicodeToUtf8()、mbcsToUnicode()、unicodeToMbcs()、sqlite3_win32_mbcs_to_utf8 ()、utf8ToMbcs ()等8個(gè)函數(shù)進(jìn)行字符在不同編碼間的轉(zhuǎn)換,但未在sqlite3.def、sqlite3.h文件中列出,即未對(duì)外公開。這些函數(shù)中,都使用了MultiByteToWideChar()、WideCharToMultiByte()兩個(gè)函數(shù)實(shí)現(xiàn)字符間轉(zhuǎn)換。
開發(fā)示例
復(fù)制代碼 代碼如下:

using System;
using System.Data;
using System.Data.SQLite;
using System.Collections.Generic;
using System.IO;
namespace FileSystemWatcthrDemo.DataHelper
{
public class SqLiteHelper
{
/// summary>
/// ConnectionString樣例:Datasource=Test.db3;Pooling=true;FailIfMissing=false
/// /summary>
public static string ConnectionString
{
get
{
return @"Data source= "+DataBasePath+";";
}
set { throw new NotImplementedException(); }
}
public static string DataBasePath
{
get { return "SpringYang.db";};
}
private static object lockObject = new object();
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, ListSQLiteParameter> parameters)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Parameters.Clear();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 30;
foreach (var parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
}
public static DataSet ExecuteQuery(string cmdText, ListSQLiteParameter> parameters)
{
lock (lockObject)
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
using (SQLiteCommand command = new SQLiteCommand())
{
DataSet ds = new DataSet();
PrepareCommand(command, conn, cmdText, parameters);
SQLiteDataAdapter da = new SQLiteDataAdapter(command);
da.Fill(ds);
return ds;
}
}
}
}
public static int ExecuteNonQuery(string cmdText, ListSQLiteParameter> parameters)
{
lock (lockObject)
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
using (SQLiteCommand command = new SQLiteCommand())
{
PrepareCommand(command, conn, cmdText, parameters);
return command.ExecuteNonQuery();
}
}
}
}
public static SQLiteDataReader ExecuteReader(string cmdText, ListSQLiteParameter> parameters)
{
lock (lockObject)
{
SQLiteConnection conn = new SQLiteConnection(ConnectionString);
SQLiteCommand command = new SQLiteCommand();
PrepareCommand(command, conn, cmdText, parameters);
SQLiteDataReader sqLiteDataReader = command.ExecuteReader();
return sqLiteDataReader;
}
}
public static object ExecuteScalar(string cmdText, ListSQLiteParameter> parameters)
{
lock (lockObject)
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
using (SQLiteCommand command = new SQLiteCommand())
{
PrepareCommand(command, conn, cmdText, parameters);
return command.ExecuteScalar();
}
}
}
}
public static void CreateDataBase()
{
if (!File.Exists(DataBasePath))
SQLiteConnection.CreateFile(DataBasePath);
CreateTable();
}
public static void CreateTable()
{
ExecuteNonQuery(CodeDetailTabale, null);
}
private static string CodeDetailTabale
{
get
{
return @"CREATE TABLE [CodeDetail] (
[CdType] [nvarchar] (10) NOT NULL ,
[CdCode] [nvarchar] (20) NOT NULL ,
[CdString1] [ntext] NOT NULL ,
[CdString2] [ntext] NOT NULL ,
[CdString3] [ntext] NOT NULL,
PRIMARY KEY (CdType,CdCode)
) ;";
}
}
}
}

示例講解
A、使用到自己定義的鎖private static object lockObject = new object();
B、使用完連接后都進(jìn)行關(guān)閉操作。使用了using
C、創(chuàng)建數(shù)據(jù)庫命令:SQLiteConnection.CreateFile(DataBasePath);
最后再講解個(gè)Insert or Replace into的經(jīng)典用法
復(fù)制代碼 代碼如下:

Insert or Replace INTO User(ID, Name,Age) Select old.ID,new.Name,new.Age From
(select 'Spring Yang' as Name, '25' as Age) as new left join (Select ID,Name from User where Name = 'Spring Yang' ) as old on old.Name = new.Name

標(biāo)簽:赤峰 溫州 白城 怒江 金華 酒泉 七臺(tái)河 洛陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《asp.net下SQLite(輕量級(jí)最佳數(shù)據(jù)庫) 原理分析和開發(fā)應(yīng)用》,本文關(guān)鍵詞  asp.net,下,SQLite,輕量級(jí),最佳,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《asp.net下SQLite(輕量級(jí)最佳數(shù)據(jù)庫) 原理分析和開發(fā)應(yīng)用》相關(guān)的同類信息!
  • 本頁收集關(guān)于asp.net下SQLite(輕量級(jí)最佳數(shù)據(jù)庫) 原理分析和開發(fā)應(yīng)用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产夜色精品一区二区av| 91论坛在线播放| 青青青伊人色综合久久| 国内精品伊人久久久久影院对白| 国产精品区一区二区三区| 日韩午夜精品电影| 91久久精品一区二区| 亚洲一区二区视频在线| 亚洲一本大道在线| 老司机精品视频在线| 风流少妇一区二区| 8x8x8国产精品| 成人欧美一区二区三区1314| 亚洲高清视频的网址| 精品一区免费av| 欧美精品一区二区蜜臀亚洲| 日韩精品专区在线影院观看| 中文一区在线播放| 日日摸夜夜添夜夜添精品视频| 国产高清久久久| 91精品国产综合久久香蕉麻豆| 欧美日韩一级片网站| 国产三级精品视频| 国产一区二区0| 色香蕉成人二区免费| 国产视频在线观看一区二区三区| 洋洋成人永久网站入口| 99免费精品视频| 国产三级欧美三级| 久久www免费人成看片高清| 日本高清不卡在线观看| 豆国产96在线|亚洲| 国产不卡视频在线播放| 欧美伦理视频网站| 亚洲午夜激情网站| 欧美一区二区国产| 精品国产亚洲在线| 一区二区三区四区不卡视频 | 欧美日韩三级视频| 日韩无一区二区| 日本怡春院一区二区| 日本精品一区二区三区四区的功能| 久久久国际精品| 不卡的av电影在线观看| 亚洲欧美日韩精品久久久久| 国产精品一级黄| 亚洲天堂久久久久久久| 久久精品国产99| 911国产精品| 国产在线国偷精品产拍免费yy| 欧美一区二区性放荡片| 免费高清成人在线| 欧美精品久久一区| 国产精品一区二区在线看| 中文字幕乱码日本亚洲一区二区| 91麻豆福利精品推荐| 久久丝袜美腿综合| 日韩写真欧美这视频| 秋霞影院一区二区| 亚洲男人天堂av网| 美国欧美日韩国产在线播放| 国产亚洲一区二区在线观看| 亚洲国产精品一区二区www在线| 国产精品1024| 日韩欧美高清一区| 洋洋av久久久久久久一区| 99久久精品免费观看| 中文字幕精品在线不卡| 国产一区二区影院| 欧美极品另类videosde| av动漫一区二区| 日本亚洲欧美天堂免费| 国产99久久久精品| 国产精品99久| 成人在线视频一区二区| 国产成+人+日韩+欧美+亚洲| 欧美日韩在线三级| 国产乱码精品一品二品| 久久疯狂做爰流白浆xx| 经典三级在线一区| 国产精品99久久久| 成人在线综合网| 色婷婷综合久久久中文字幕| 91麻豆国产自产在线观看| 91激情五月电影| 欧美三级电影在线看| 欧美少妇bbb| 欧美一区二区三区免费| 欧美成人精品二区三区99精品| 成a人片亚洲日本久久| 色av综合在线| 正在播放一区二区| wwww国产精品欧美| 亚洲欧美韩国综合色| 三级欧美韩日大片在线看| 国产资源精品在线观看| 9色porny自拍视频一区二区| 色综合咪咪久久| 久久婷婷国产综合国色天香| 亚洲美女免费在线| 国产自产2019最新不卡| 91免费看片在线观看| 欧美一区二区视频网站| 偷窥国产亚洲免费视频| 日韩av中文字幕一区二区三区| 日韩精品专区在线| 一区二区三区在线视频免费| 日本女优在线视频一区二区| 成人美女在线视频| 久久夜色精品国产噜噜av| 亚洲va在线va天堂| 色婷婷亚洲一区二区三区| 久久99国产精品久久99果冻传媒| 国产精品一区专区| 日韩三级中文字幕| 日韩专区欧美专区| 欧美性生活影院| 亚洲一区二区三区激情| 欧美日韩一区三区| 亚洲天堂精品视频| 国产自产高清不卡| 日韩视频免费直播| www..com久久爱| 欧美一区二区视频观看视频| 亚洲高清三级视频| 亚洲国产成人91porn| 成人黄色网址在线观看| 久久综合成人精品亚洲另类欧美 | 一区二区三区成人在线视频| 自拍偷在线精品自拍偷无码专区| 国产精品对白交换视频| 五月天婷婷综合| 欧美肥胖老妇做爰| 国产精品18久久久久久久久| 国产精品国产成人国产三级| 色综合久久综合中文综合网| 亚瑟在线精品视频| 国产色婷婷亚洲99精品小说| 成人一区二区三区在线观看| 中文字幕在线不卡视频| 欧美一级在线免费| 国产91丝袜在线18| 欧美巨大另类极品videosbest | 秋霞成人午夜伦在线观看| wwwwww.欧美系列| 丝袜亚洲另类丝袜在线| 国产毛片精品视频| 精品入口麻豆88视频| 中文字幕日韩欧美一区二区三区| 国产成人小视频| 亚洲伊人伊色伊影伊综合网| 亚洲成人免费在线观看| 中文一区二区完整视频在线观看| 宅男在线国产精品| 在线观看日韩精品| av男人天堂一区| 国产一区二区伦理片| 青青青爽久久午夜综合久久午夜| 亚洲一区二区三区国产| 国产精品欧美久久久久无广告 | 奇米一区二区三区av| 天天亚洲美女在线视频| 一区二区三区国产精品| 国产精品久久三| 国产欧美精品日韩区二区麻豆天美| 国产中文一区二区三区| 久久久久久久网| 成人av影视在线观看| 手机精品视频在线观看| 日韩欧美aaaaaa| 99精品桃花视频在线观看| 国产在线国偷精品产拍免费yy| 亚洲一区在线观看视频| 亚洲免费观看视频| 26uuu欧美| 欧美猛男超大videosgay| 成人久久18免费网站麻豆| 国产剧情在线观看一区二区| 日韩av在线发布| 亚洲另类在线一区| 久久久久久99久久久精品网站| 日本高清无吗v一区| 成人av资源网站| 日本乱人伦aⅴ精品| av一二三不卡影片| 欧美日韩激情在线| 国产免费成人在线视频| 亚洲一二三四区| 福利电影一区二区| 日韩一区二区三区在线| 国产精品精品国产色婷婷| 日本少妇一区二区| 日本二三区不卡| 欧美激情一区三区| 五月综合激情网| 99国产精品久久久久久久久久久| 欧美色男人天堂| 亚洲视频免费在线观看| 国产一区在线观看麻豆| 欧美日韩视频在线第一区 |