VB+SQLite組合,真香!(一)

微信公衆號:@網管小賈

個人博客:@www.sysadm.cc

嗨!你好!我是網管小賈!

當你看到這個標題時,是不是感覺很奇怪呢?

老掉牙的VB和“玩具”數據庫SQLite搞在一起是個什麼玩意?

待我慢慢道來哈。。。


SQLite衆所周知,是個文件數據庫,小而快,號稱世界上使用最廣泛的數據庫(官網描述居然沒有“之一”)。

官方是在吹牛嗎?

出於好奇和興趣,我抽空簡單地學習了一下SQLite。


SQLite一般應用在單機場景,沒有服務器的概念,很適合做些單機應用。

而在Windows環境下,一般情況都會使用Access作爲本地數據庫系統。

但Access太磨人了,是時候把SQLite扶上正位了。

關於SQLite和Access的性能對比,請小夥伴們自行百度,差得不是一點半點啊。

我自己測試過,同樣環境同樣導入500條記錄,SQLite耗時1秒都不到,而Access卻要用36秒之多,真是令人瞠目!


使用其他高級語言可以很簡單的調用SQLite,但對於古老的VB似乎是有些不可能完成的任務。

另外,調用某數據庫,通常講是需要數據庫驅動的,比如在ODBC中添加驅動。

由於Windows裏集成了SqlServer的驅動,所以用戶調用SqlServer數據庫並不需要專門安裝驅動程序而直接可以連接訪問數據庫。

而SQLite雖然也是要先驅動才能使用的,但是要簡單的多啊。

這裏告訴你一個好消息,本文要介紹的VB調用SQLite是不需要額外安裝驅動的,只要一個DLL文件即可。(文末有下載)


哦?!這麼神奇嗎?!

是的,N年前一次偶然機緣,從網上某位大神那裏得到了一個SQLite的VB調用庫,自此開啓VB訪問數據庫飛一般的神奇之旅。

(出處已不可考,在此向大神致敬!)

好了,讓我們丟開Access,投入SQLite的懷抱吧!

小夥伴們的畢業設計是不是有希望了呢,想想都有些小激動啊!

接下來我們看看怎麼玩轉 VB+SQLite 組合,不難的哦。


首先,我們得建個數據庫。

先從網上找個SQLite數據庫工具軟件,我用的是 SQLite Expert Personal,個人版免費,你也可以用其他的,網上有很多。


建立一個數據庫名稱爲 db_user.db,再建一個表 tbl_user,保存文件爲 user.db

-- 建立tbl_user表
CREATE TABLE tbl_user (id integer primary key, value text);

很簡單吧!


其次,打開VB編輯器,新建工程,導入模塊 ModSQLite.bas

我做了個測試程序,分享給你參考。(文末有下載)

下面演示數據庫的連接訪問及CRUD的方法。

請到博客下載 www.sysadm.cc


1、連接數據庫

'打開數據庫
Private lngDB as long
SQLite_open App.Path + "\user.db", lngDB

2、關閉數據庫

'關閉數據庫
Private lngDB as long
SQLite_close lngDB

3、添加記錄

Dim sqlite3_stmt As Long
' SQL語句查詢
Call SQLite_prepare(lngDB, "insert into tbl_user (id, value) values(" & txtInsertItem1.Text + ",'" & txtInsertItem2.Text & "')", sqlite3_stmt)
SQLite_step sqlite3_stmt
SQLite_finalize sqlite3_stmt

4、刪除記錄

Dim sqlite3_stmt As Long
' SQL語句查詢
Call SQLite_prepare(lngDB, "delete from tbl_user where id=1", sqlite3_stmt)
SQLite_step sqlite3_stmt
SQLite_finalize sqlite3_stmt

5、更新記錄

Public Const SQLITE_OK = 0
Dim sqlite3_stmt  As Long
Dim hRet As Long
' SQL語句查詢
hRet = SQLite_prepare(lngDB, "update tbl_user set id=?, value=? where id=?1", sqlite3_stmt)
If hRet = SQLITE_OK Then
    Call SQLite_bind_int(sqlite3_stmt, 1, Val(txtUpdateItem1.Text)) '代替上面sql語句裏第1個問號
    Call SQLite_bind_text(sqlite3_stmt, 2, txtUpdateItem2.Text) '代替上面sql語句裏第2個問號
    SQLite_step sqlite3_stmt
    SQLite_finalize sqlite3_stmt
End If

6、查詢數據

Public Const SQLITE_OK = 0
Dim sqlite3_stmt As Long	' SQL狀態值
Dim hRet As Long	' 查詢返回句柄
' SQL語句查詢
hRet = SQLite_prepare(lngDB, "select * from tbl_user", sqlite3_stmt)
' 如果返回OK,則輸出記錄
If hRet = SQLITE_OK Then
	' 打印表頭
	picData.Print SQLite_column_name(sqlite3_stmt, 0), SQLite_column_name(sqlite3_stmt, 1)
	' 循環輸出記錄值
	Do While SQLite_next(sqlite3_stmt)
		picData.Print SQLite_column_text(sqlite3_stmt, 0), SQLite_column_text(sqlite3_stmt, 1)
	Loop
End If
' 關閉查詢
SQLite_finalize sqlite3_stmt

基本的增刪改查就是這些啦,當然,還有很多操作,比如獲取記錄數或執行更復雜的SQL語句。

不過這裏有個小問題,在上面的更新記錄代碼中也能看到,UPDATE語句有些怪怪的。比如:

update tbl_user set id=?, value=? where id=?1

雖然還有很多怪異的語句可能會給寫代碼帶來不便,但是不用太過擔心,我在原始模塊的基礎上攢了個簡化版的自定義類,調用這個類就可以使用正常標準的SQL語句啦!

關於這個類的內容,會在下一篇 VB+SQLite組合,真香(二) 中詳細介紹,敬請期待吧!

源代碼下載:請到網管小賈博客查找。

微信公衆號:@網管小賈

個人博客:@www.sysadm.cc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章