好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > SQLite數據庫管理系統-我所認識的數據庫引擎

SQLite數據庫管理系統-我所認識的數據庫引擎

熱門標簽:中國地圖標注省份用什么符號 智能電銷機器人教育 電話機器人錄音師薪資 高德地圖標注電話怎么沒了 北京智能外呼系統供應商家 江西穩定外呼系統供應商 孝感銷售電銷機器人廠家 無錫梁溪公司怎樣申請400電話 奧維地圖標注字體大小修改

SQLite 是一款輕量級的、被設計用于嵌入式系統的關聯式數據庫管理系統。SQLite 是一個實現自我依賴、純客戶端、零配置且支持事務的數據庫引擎。它由D. Richard Hipp首次開發,目前已是世界上最廣泛部署的開源數據庫引擎。

本文中,我們將介紹如下內容:

創建一個SQLite 數據庫

復制代碼 代碼如下:

SQLiteConnection conn = new SQLiteConnection("Data Source=mytest.s3db");
conn.Open();

SQLite 數據插入
復制代碼 代碼如下:

/// summary>
/// Allows the programmer to easily insert into the DB
/// /summary>
/// param name="tableName">The table into which we insert the data./param>
/// param name="data">A dictionary containing the column names and data for the insert./param>
/// returns>A boolean true or false to signify success or failure./returns>
public bool Insert(string tableName, Dictionarystring, string> data)
{
Boolean returnCode = true;
StringBuilder columnBuilder = new StringBuilder();
StringBuilder valueBuilder = new StringBuilder();
foreach (KeyValuePairstring, string> val in data)
{
columnBuilder.AppendFormat(" {0},", val.Key);
valueBuilder.AppendFormat(" '{0}',", val.Value);
}
columnBuilder.Remove(columnBuilder.Length - 1, 1);
valueBuilder.Remove(valueBuilder.Length - 1, 1);
try
{
this.ExecuteNonQuery(string.Format("INSERT INTO {0}({1}) VALUES({2});",
tableName, columnBuilder, valueBuilder));
}
catch (Exception ex)
{
mLog.Warn(ex.ToString());
returnCode = false;
}
return returnCode;
}

復制代碼 代碼如下:

DateTime entryTime;
string name = string.Empty, title = string.Empty;
GetSampleData(out name, out title, out entryTime);
int id = random.Next();
insertParameterDic.Add("Id", id.ToString());
insertParameterDic.Add("Name", name);
insertParameterDic.Add("Title", title);
insertParameterDic.Add("EntryTime",
entryTime.ToString("yyyy-MM-dd HH:mm:ss"));

db.Insert("Person", insertParameterDic);

SQLite 的事務處理方式

Begin Transaction:

Commit Transaction:

Rollback Transaction:

復制代碼 代碼如下:

try
{
db.OpenTransaction();
Insert4Native();
db.CommiteTransaction();
}
catch (System.Exception ex)
{
mLog.Error(ex.ToString());
db.RollbackTransaction();
}

SQLite 的索引

索引是一種用來優化查詢的特性,在數據中分為聚簇索引和非聚簇索引;前者是由數據庫中數據組織方式決定的,比如我們在往數據庫中一條一條插入數據時,聚簇索引能夠保證按順序插入,插入后數據的位置和結構不變。非聚簇索引是指我們手動、顯式創建的索引,可以為數據庫中的每個列創建索引,和字典中的索引類似,遵循的原則是對有分散性和組合型的列建立索引,以利于大數據和復雜查詢情況下提高查詢效率。

復制代碼 代碼如下:

/// summary>
/// Create index
/// /summary>
/// param name="tableName">table name/param>
/// param name="columnName">column name/param>
/// param name="indexName">index name/param>
public void CreateIndex(string tableName, string columnName, string indexName)
{
string createIndexText = string.Format("CREATE INDEX {0} ON {1} ({2});",
indexName, tableName, columnName);
ExecuteNonQuery(createIndexText);
}

簡單查詢、無關數據庫大小情況下對查詢效率的測試結果如下(700,000條數據):
復制代碼 代碼如下:

string sql = "SELECT LeafName FROM File WHERE Length > 5000";

復雜查詢情況下對查詢效率的測試結果如下(~40,000條數據):

復制代碼 代碼如下:

string sql = "SELECT folder.Location AS FilePath"
+ "FROM Folder folder LEFT JOIN File file ON file.ParentGuid=folder.Guid"
+"WHERE file.Length > 5000000 GROUP BY File.LeafName";

SQLite 的觸發器(Trigger)

觸發器是指當一個特定的數據庫事件(DELETE, INSERT, or UPDATE)發生以后自動執行的數據庫操作,  我們可以把觸發器理解為高級語言中的事件(Event)。

假設我有兩個表

Folder(Guid VCHAR(255) NOT NULL, Deleted BOOLEAN DEFAULT 0)

File(ParentGuid VCHAR(255) NOT NULL, Deleted BOOLEAN DEFAULT 0)

在Folder 表中創建一個觸發器Update_Folder_Deleted:

復制代碼 代碼如下:

CREATE TRIGGER Update_Folder_Deleted UPDATE Deleted ON Folder
Begin
UPDATE File SET Deleted=new.Deleted WHERE ParentGuid=old.Guid;
END;

創建完觸發器以后在執行以下語句:
復制代碼 代碼如下:

UPDATE Folder SET Deleted=1 WHERE Guid='13051a74-a09c-4b71-ae6d-42d4b1a4a7ae'

以上語句將會導致下面的語句自動執行:
復制代碼 代碼如下:

UPDATE File SET Deleted=1 WHERE ParentGuid='13051a74-a09c-4b71-ae6d-42d4b1a4a7ae'

SQLite 的視圖(View)

視圖可以是一個虛擬表,里面可以存儲按照一定條件過濾出來的數據集合,這樣我們再下次想得到這些特定數據集合的時候就不用通過復雜查詢來獲得,簡單的查詢指定視圖就可以得到想要的數據。

在下個例子中,我們創建一個簡單的視圖:

基于上面的查詢結果我們創建一個視圖:

SQLite 命令行工具

SQLite 庫中包含了一個SQLite3.exe 的命令行工具,它可以實現SQLite 各項基本操作。這里只介紹一下如何使用它來分析我們的查詢結果:

1. CMD->sqlite3.exe MySQLiteDbWithoutIndex.s3db

2. 開啟EXPLAIN 功能并分析指定查詢結果

3. 重新使用命令行打開一個有索引的數據庫并執行前兩步

4. 通過比較兩個不同查詢語句的分析結果,我們可以發現如果查詢過程中使用了索引,SQLite 會在detail 列中提示我們。

5. 要注意的是每條語句后面都要加分號“;”

SQLite一些常見的使用限制

1. SQLite 不支持Unicode 字符的大小寫比較,請看以下測試結果:

2. 如何處理SQLite 轉義字符:

復制代碼 代碼如下:

INSERT INTO xyz VALUES('5 O''clock');

3. 一條復合SELECT語句的條數限制:
一條復合查詢語句是指多條SELECT語句由 UNION, UNION ALL, EXCEPT, or INTERSECT 連接起來. SQLite進程的代碼生成器使用遞歸算法來組合SELECT語句。為了降低堆棧的大小,SQLite 的設計者們限制了一條復合SELECT語句的條目數量。 SQLITE_MAX_COMPOUND_SELECT的默認值是500. 這個值沒有嚴格限制,在實踐中,幾乎很難看到一條復合查詢語句的條目數大于500的。

這里提到復合查詢的原因是我們可以使用它來幫助我們快速插入大量數據:

復制代碼 代碼如下:

public void Insert4SelectUnion()
{
bool newQuery = true;
StringBuilder query = new StringBuilder(4 * ROWS4ACTION);
for (int i = 0; i ROWS4ACTION; i++)
{
if (newQuery)
{
query.Append("INSERT INTO Person");
newQuery = false;
}
else
{
query.Append(" UNION ALL");
}

DateTime entryTime;
string name = string.Empty, title = string.Empty;
GetSampleData(out name, out title, out entryTime);
int id = random.Next();
query.AppendFormat(" SELECT '{0}','{1}','{2}','{3}'", id, name, title, entryTime.ToString("yyyy-MM-dd HH:mm:ss"));
if (i % 499 == 0)
{
db.ExecuteNonQuery(query.ToString());
query.Remove(0, query.Length);
newQuery = true;
}
}

//executing remaining lines
if (!newQuery)
{
db.ExecuteNonQuery(query.ToString());
query.Remove(0, query.Length);
}
}

您可能感興趣的文章:
  • 30 個很棒的PHP開源CMS內容管理系統小結
  • Swift中的Access Control權限控制介紹
  • php結合ACCESS的跨庫查詢功能
  • C#通過oledb訪問access數據庫的方法
  • C#操作Access通用類實例
  • Apache服務器中.htaccess的基本配置總結
  • mysql Access denied for user ‘root’@’localhost’ (using password: YES)解決方法
  • Javascript連接Access數據庫完整實例
  • Access轉成SQL數據庫的方法
  • SQL Server數據復制到的Access兩步走
  • Access創建一個簡單MIS管理系統

標簽:阜陽 那曲 荊州 臨滄 通化 海北 泰州 齊齊哈爾

巨人網絡通訊聲明:本文標題《SQLite數據庫管理系統-我所認識的數據庫引擎》,本文關鍵詞  SQLite,數據庫,管理系統,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQLite數據庫管理系統-我所認識的數據庫引擎》相關的同類信息!
  • 本頁收集關于SQLite數據庫管理系統-我所認識的數據庫引擎的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 将军含着她的乳尖H无遮挡动漫| 福利在线观看免费高清完整版| 在线观看国产视频| 亚洲你懂得| 美国a级毛片| 日日碰狠狠躁久久躁少妇熟女人妻| 无翼乌之无遮全彩工口 剧情介绍| 精品久久久久久久高清| 草逼动漫| 男人添女人下部高潮全视频| 《年轻女教师3》韩国| 日本AⅤ写真网站| 99国产成人精品2021| 老湿网| 日韩电影网址| 美女全裸图| 男生和女生一差差差起| 色屁屁影院WWW免费下载| 男女床上搞| 久草久草视频| 国产精品扒开腿做爽爽爽视频| 做爰猛烈动高潮高H污女女快穿| 她拨开贪婪的交叉着的筷子| 鬼1一16秋月爱莉无极影视| 免费观看又色又爽又黄的忠诚| 两男一女3p被男人玩到喷水| 调教失禁h炮机调教| 捧起她娇臀猛烈冲刺H视频| 女人趴下脱了内裤光着屁股喷白| 紧缚调教波多野结衣在线观看| 欧美成人免费videos| gayxxxx老头| 英国一级黄色片| 免费观看性欧美一级| 又黄又爽又刺激又色的视频第8季| 啊灬灬用力灬嗯灬3p| 美女让男人插| 国产免费久久精品99re丫y| 18禁成人??????猛撞| 992tv无码国产精品专区| 好吊妞视频在线|