對于簡單的數(shù)據(jù)操作,我們可以使用文件,但是,有時(shí)候這些文件操作效率不高,可擴(kuò)展性和強(qiáng)大不好。所以我們可能會經(jīng)常切換到使用數(shù)據(jù)庫。 LuaSQL是從Lua一些數(shù)據(jù)庫管理系統(tǒng)的一個(gè)簡單的接口。 LuaSQL它提供了對不同類型的SQL支持庫。這包括:
SQLite
Mysql
ODBC
在本教程中,將涵蓋Lua中的SQLite和MySQL數(shù)據(jù)庫處理。使用這個(gè)通用接口為應(yīng)盡可能實(shí)施于其它類型的數(shù)據(jù)庫。首先,讓我們看看如何在MySQL中執(zhí)行操作。
以使用下面的示例以預(yù)期方式工作,我們所需要的初始數(shù)據(jù)庫設(shè)置。假設(shè)如下面列出:
已經(jīng)安裝并設(shè)置MySQL的默認(rèn)用戶以root,密碼為“123456”。
您已經(jīng)創(chuàng)建了一個(gè)數(shù)據(jù)庫test。
您通過MySQL教程去了解MySQL基礎(chǔ)知識。
我們可以用一個(gè)簡單語句導(dǎo)入SQLite庫,假設(shè)Lua中正確實(shí)現(xiàn)并已完成。在安裝過程中,文件夾libsql包含數(shù)據(jù)庫相關(guān)的文件。
mysql = require "luasql.mysql"
可變的MySQL將提供通過參照主MySQL表訪問該功能。
我們可以設(shè)立一個(gè)啟動MySQL的環(huán)境,然后創(chuàng)建環(huán)境的連接。如下所示。
local env = mysql.mysql() local conn = env:connect('test','root','123456')
上面的連接將連接到現(xiàn)有的MySQL文件并建立與新創(chuàng)建的文件的連接。
這將有助于我們做的創(chuàng)建,插入,刪除,更新等,所有的數(shù)據(jù)庫操作執(zhí)行簡單的功能。語法如下所示
conn:execute([[ 'MySQLSTATEMENT' ]])
在上面的語法,我們需要確保conn是開放的和現(xiàn)有的MySQL連接并替換“MySQLSTATEMENT”使用正確的語句。
一個(gè)簡單的創(chuàng)建表的示例如下所示。它創(chuàng)建類型為int和varchar類型,兩個(gè)參數(shù)ID和name的表。
mysql = require "luasql.mysql" local env = mysql.mysql() local conn = env:connect('test','root','123456') print(env,conn) status,errorString = conn:execute([[CREATE TABLE sample2 (id INTEGER, name TEXT);]]) print(status,errorString )
當(dāng)運(yùn)行上面的程序,表名為sample將有兩列分別是id和name會被創(chuàng)建。
MySQL environment (004BB178) MySQL connection (004BE3C8) 0 nil
如果有錯誤,會返回nil的錯誤語句。下面一個(gè)簡單的錯誤語句如下所示。
LuaSQL: Error executing query. MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"id INTEGER, name TEXT)' at line 1
MySQL的INSERT語句如下所示。
conn:execute([[INSERT INTO sample values('11','Raj')]])
對于MySQL UPDATE語句如下所示。
conn:execute([[UPDATE sample3 SET name='John' where id ='12']])
DELETE語句-MySQL如下所示。
conn:execute([[DELETE from sample3 where id ='12']])
就select語句而言,我們需要遍歷每一行,并提取所需的數(shù)據(jù)。下面簡單的SELECT語句如下所示。
cursor,errorString = conn:execute([[select * from sample]]) row = cursor:fetch ({}, "a") while row do print(string.format("Id: %s, Name: %s", row.id, row.name)) -- reusing the table of results row = cursor:fetch (row, "a") end
在上面的代碼中,conn 是一個(gè)開放的MySQL連接。由執(zhí)行語句返回游標(biāo),可以通過表的反應(yīng)返回獲取所需的選擇數(shù)據(jù)。
所有上述聲明一個(gè)完整的例子給出下面的參考。
mysql = require "luasql.mysql" local env = mysql.mysql() local conn = env:connect('test','root','123456') print(env,conn) status,errorString = conn:execute([[CREATE TABLE sample3 (id INTEGER, name TEXT)]]) print(status,errorString ) status,errorString = conn:execute([[INSERT INTO sample3 values('12','Raj')]]) print(status,errorString ) cursor,errorString = conn:execute([[select * from sample3]]) print(cursor,errorString) row = cursor:fetch ({}, "a") while row do print(string.format("Id: %s, Name: %s", row.id, row.name)) row = cursor:fetch (row, "a") end -- close everything cursor:close() conn:close()上一篇:Lua循環(huán)下一篇:Lua開發(fā)環(huán)境