免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SQLite使用報(bào)告

一、             SQLite簡(jiǎn)介

SQLite是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫(kù)中。它是D.RichardHipp建立的公有領(lǐng)域項(xiàng)目。

不像常見的客戶-服務(wù)器范例,SQLite引擎不是個(gè)程序與之通信的獨(dú)立進(jìn)程,而是連接到程序中成為它的一個(gè)主要部分。所以主要的通信協(xié)議是在編程語(yǔ)言內(nèi)的直接API調(diào)用。這在消耗總量、延遲時(shí)間和整體簡(jiǎn)單性上有積極的作用。整個(gè)數(shù)據(jù)庫(kù)(定義、表、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲(chǔ)在一個(gè)單一的文件中。它的簡(jiǎn)單的設(shè)計(jì)是通過在開始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。

                                                             (摘自wiki:  http://zh.wikipedia.org/w/index.php?title=SQLite&variant=zh-cn

這個(gè)介紹就不說了,反正它就是個(gè)小型的SQL數(shù)據(jù)庫(kù),有點(diǎn)類似于ACCESS。先來試試它的功能吧。

二、             初步試探

經(jīng)過多方搜索,我找到了SQLite.NET平臺(tái)的支持庫(kù),點(diǎn)擊 這里 下載。我按照默認(rèn)安裝,路徑為:”c://program files/sqlite.net”,安裝后進(jìn)入這個(gè)文件夾,里面有好多文件,我們只需要”System.Data.SQLite.DLL”,很小,只有605K。打開VS,新建一個(gè)控制臺(tái)程序sqlitetest。引用剛才提到的DLL文件。然后引用”System.Data.SQLite”命名空間。現(xiàn)在就可以試試了。

從網(wǎng)上查詢到了一些資料,現(xiàn)在運(yùn)用一下,看看行不行。

第一步,創(chuàng)建數(shù)據(jù)庫(kù)文件。

我聲明了一個(gè)全局字符串變量”dbName”,方面以后使用。

新建數(shù)據(jù)庫(kù)文件的相關(guān)代碼為:

 


SQLiteConnection.CreateFile(dbName);

 

是不是超級(jí)簡(jiǎn)單。接下來就是連接了。同樣是SQLiteConnection這個(gè)類。這個(gè)類有3個(gè)構(gòu)造函數(shù),一個(gè)是空參數(shù),另一個(gè)是SQLiteConnection類型,就是復(fù)制一個(gè)連接了,最后一個(gè)是字符串類型(連接字符串),這個(gè)連接字符串包含數(shù)據(jù)庫(kù)信息已經(jīng)密碼(這個(gè)輕量級(jí)的數(shù)據(jù)庫(kù)也支持密碼哦,好厲害),我現(xiàn)在還不懂格式是什么,先試試默認(rèn)構(gòu)造函數(shù)。網(wǎng)上給的是使用SQLiteConnectionStringBuilder這個(gè)類構(gòu)造連接字符串。它有很多屬性,現(xiàn)在要用的是DataSource屬性,把dbName賦給它。還有Password屬性,沒有密碼吧,賦給它””吧。然后就是打開數(shù)據(jù)庫(kù)了。所有代碼如下:

     

//建立數(shù)據(jù)庫(kù)連接并打開數(shù)據(jù)庫(kù)
SQLiteConnection conn = new SQLiteConnection();
SQLiteConnectionStringBuilder connsb = new SQLiteConnectionStringBuilder();
connsb.DataSource = dbName;
connsb.Password = "";
conn.ConnectionString = connsb.ToString();
conn.Open();

 

         接下來理所當(dāng)然地要插入張表試試。

         SQLite有個(gè)跟SQLCommand類似的SQLiteCommand,用法也差不多,這就不多說了,直接給出代碼吧:

         

//添加表
SQLiteCommand cmd = new SQLiteCommand(conn);
string cmdText = "CREATE TABLE TEST(ID int,name varchar(20))";
cmd.CommandText = cmdText;
cmd.ExecuteNonQuery();

 

      一起把插入數(shù)據(jù)的代碼也貼了,都一樣的東西:

 


//插入測(cè)試數(shù)據(jù)
cmd.CommandText = "INSERT INTO [TEST] (ID,name) VALUES (1,'acen')";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO [TEST] (ID,name) VALUES (2,'unique')";
cmd.ExecuteNonQuery();

 

接下來就要查詢數(shù)據(jù)了,看看結(jié)果如何。網(wǎng)上教程用的是SQLiteReader,是不是和SQLReader很像?對(duì)啊,其實(shí)用法也是一樣的,看來這東西做得還是很方便的,代碼如下:

      

//查詢結(jié)果
cmd.CommandText = "SELECT * FROM [TEST]";
SQLiteDataReader dr = cmd.ExecuteReader();
StringBuilder sb = new StringBuilder();
while (dr.Read())
{
   sb.Append(dr.GetInt32(0)).Append(""n").Append(dr.GetString(1));
}
Console.WriteLine(sb);

 

    只要用過ADO.NET的看懂上面的代碼都沒問題吧,行,我們運(yùn)行一下吧!

等啊等,哦,出錯(cuò)了:Invalid ConnectionString format for parameter "Password".原來這句有問題,那好吧,刪掉試試。行了,呵呵,成功了!再看看網(wǎng)上的文章,注釋為“設(shè)置密碼”,意思這一步是設(shè)置密碼?試試。真行了,與此相關(guān)的東西接下來再測(cè)試。

好吧,首戰(zhàn)告捷,現(xiàn)在我們進(jìn)一步對(duì)其進(jìn)行測(cè)試!進(jìn)行之前把完整代碼貼出來吧。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;

namespace sqlitetest
{
    class Program
    {
        private const string dbName="sqlitetest.db";
        static void Main(string[] args)
        {
            //創(chuàng)建數(shù)據(jù)庫(kù)文件
            SQLiteConnection.CreateFile(dbName);
             //建立數(shù)據(jù)庫(kù)連接并打開數(shù)據(jù)庫(kù)
            SQLiteConnection conn = new SQLiteConnection();
          SQLiteConnectionStringBuilder connsb = new SQLiteConnectionStringBuilder();
          connsb.DataSource = dbName;
          connsb.Password = "acen";
          conn.ConnectionString = connsb.ToString();
          conn.Open();

            //添加表
            SQLiteCommand cmd = new SQLiteCommand(conn);
          string cmdText = "CREATE TABLE TEST(ID int,name varchar(20))";
          cmd.CommandText = cmdText;
          cmd.ExecuteNonQuery();

            //插入測(cè)試數(shù)據(jù)
            cmd.CommandText = "INSERT INTO [TEST] (ID,name) VALUES (1,'acen')";
          cmd.ExecuteNonQuery();
          cmd.CommandText = "INSERT INTO [TEST] (ID,name) VALUES (2,'unique')";
          cmd.ExecuteNonQuery();

          //查詢結(jié)果
           cmd.CommandText = "SELECT * FROM [TEST]";
         SQLiteDataReader dr = cmd.ExecuteReader();
         StringBuilder sb = new StringBuilder();
         while (dr.Read())
         {
             sb.Append(dr.GetInt32(0)).Append(""n").Append(dr.GetString(1));
         }
         Console.WriteLine(sb);
         Console.ReadKey();
        }
    }
}

 

三、             連接部分深入測(cè)試

第二部分基本是照著網(wǎng)上的一篇文章弄的,現(xiàn)在來點(diǎn)自己的測(cè)試。這次就不能再創(chuàng)建數(shù)據(jù)庫(kù)了吧,別把剛才的給蓋了。好的,開始,把創(chuàng)建數(shù)據(jù)庫(kù)文件和添加表那一部分刪除。先直接運(yùn)行,有四條記錄了。說明文件連接正常,已經(jīng)起到存儲(chǔ)的作用了。

研究一下SQLiteConnection的相關(guān)內(nèi)容。

首先是它那幾個(gè)構(gòu)造函數(shù)。復(fù)制連接那個(gè)就不管了,看它剩下的那個(gè)構(gòu)造函數(shù)吧,看看是什么格式??裨囎匀徊恍?,單步調(diào)試吧,不是有一步是把connsbSQLiteConnectionStringBuilder)的值轉(zhuǎn)換為string后賦值給connSQLiteConnection)嗎,看看connsb的值,發(fā)現(xiàn)了,是”Data Source=sqlitetest.db;Password=acen”,應(yīng)該就是這個(gè)了,試試。測(cè)試通過,那么把密碼去掉試試。”File opened that is not a database file .file is encrypted or is not a database”,不出所料,出錯(cuò)了。剛才查看SQLiteConnection屬性的時(shí)候,看到有DataSource項(xiàng),莫非不用借助SQLiteConnectionStringBuilder直接賦值也行?嘿嘿,不用得意得太早,這是只讀的,行不通。我要修改密碼怎么辦呢?再認(rèn)真看看,從連接字符串一定是不可能的了,那就從SQLiteConnection這個(gè)類看看吧,有個(gè)SetPassword方法,這個(gè)方法有兩種參數(shù),一種是字節(jié)數(shù)組,另一種是字符串形式,用第二種吧,改為”imacen”,能運(yùn)行,問題是能多次運(yùn)行,不對(duì)吧,密碼沒改到?把新密碼加到連接字符串,果真出錯(cuò)了。我剛才是放在打開數(shù)據(jù)庫(kù)之前,莫非不能這樣?那放在后面吧,還是錯(cuò)了,提示設(shè)置密碼應(yīng)當(dāng)在數(shù)據(jù)庫(kù)開始之前,莫非這只是設(shè)置連接時(shí)的密碼?嗨,我錯(cuò)了,我沒認(rèn)真看,它還有個(gè)changePassword的方法,這個(gè)才是啊,而且要放在數(shù)據(jù)庫(kù)打開后。那我就納悶了,為什么有setPassword方法卻沒有setDataSource方法呢?把連接字符串的密碼部分刪了,再試試setPassword方法。成功,它真的是設(shè)置連接密碼的,我想它為什么要加入這個(gè)方法呢,可能考慮到安全新問題吧,其它都是使用明文,只是猜測(cè)罷了。行,這部分就這樣了,能連了就得。

總結(jié)一下:

1.       可以使用SQLiteConnectionStringBuilder類構(gòu)建鏈接字符串,然后轉(zhuǎn)換為string賦給SQLiteConnectionConnectionString屬性,密碼沒有就別寫成””了。

2.       在構(gòu)造SQLiteConnection時(shí)直接用連接字符串,格式為”Data Source=xxx;Password=xxx”;其中密碼部分可以在setPassword方法中設(shè)置。

3.       修改密碼使用SQLiteConnectionchangePassword方法,需在數(shù)據(jù)庫(kù)打開之后。

四、             插入數(shù)據(jù)測(cè)試

SQLite不支持存儲(chǔ)過程,雖然它的類SQLiteCommand有一個(gè)CommandType屬性,但其明確寫著目前僅支持CommandType.Text.那我要測(cè)試什么呢?參數(shù)功能。開始啦!

記得在前面給出的代碼中有插入數(shù)據(jù)部分,現(xiàn)在把插入語(yǔ)句換成” INSERT INTO [TEST] (ID,name) VALUES (@ID,@name)";Parameters這個(gè)屬性吧,真的有,不好意思了,連Add,AddWithValue都有,好啊,先用AddWithValue這種最簡(jiǎn)單的試試。

 

//插入測(cè)試數(shù)據(jù)
cmd.CommandText = "INSERT INTO [TEST] (ID,name) VALUES (@ID,@name)";
cmd.Parameters.AddWithValue("@ID"5);
cmd.Parameters.AddWithValue("@name","testtest");
cmd.ExecuteNonQuery();

 

運(yùn)行,顯然行。那我們就和SQLCommand對(duì)比一下吧。粗略看了一下,SQLCommand有的SQLiteCommand都有,莫非SQLiteCommand就是繼承自SQLCommand?或者兩者是繼承自同一個(gè)接口,從”System.Data.SQLite”,”System.Data.SQLClient”來看,這兩者應(yīng)該是繼承自同一個(gè)接口了??纯茨懿荒苷抑C據(jù)。

 

 

很明顯,他們確實(shí)是繼承自同一個(gè)類或接口,那就沒什么好說的啦,這個(gè)測(cè)試也差不多就這樣啦,其它讀取,更新那些也應(yīng)該就一樣了。

后來我還分析了一下,這個(gè)SQLite應(yīng)該就是把各個(gè)類重寫了一下,再把SQL Server的功能精簡(jiǎn)后編譯成DLL文件。我沒用過ACCESS,但我覺得SQLiteACCESS應(yīng)該就是同類的東西了吧。這個(gè)我不敢下斷言。

SQLite的好處在于,它能執(zhí)行大部分SQL語(yǔ)句,而且網(wǎng)上評(píng)論認(rèn)為它的性能是相當(dāng)高的,另外一個(gè)最重要的原因是,它很小,1M不到的體積對(duì)于小型數(shù)據(jù)運(yùn)用是非常方便的了。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C#使用System.Data.SQLite操作SQLite
SQLite B/S使用(一)
SQLite基礎(chǔ)入門教程 – 碼農(nóng)網(wǎng)
Sqlite在C#中的應(yīng)用
利用SQLite ADO.NET在.NET(C#)中使用SQLite數(shù)據(jù)庫(kù)
C#?SQLite?數(shù)據(jù)庫(kù)?實(shí)例
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服