微信公衆號:@網管小賈
個人博客:@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的方法。
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