开发学院

您的位置:首页>教程>正文

教程正文

Lua 操作数据库(SQLite)

Lua 数据访问(SQLite)

  通过上一章的学习我们了解了使用Lua操作Mysql,下面介绍Lua操作Sqlite.

导入SQLite

  我们使用一个简单的语句来导入SQLite库,假设您的Lua实现是正确的。

sqlite3 = require "luasql.sqlite3"

建立连接

  我们可以通过实例化一个SQLite对象来建立连接。它如下所示。

local env  = sqlite3.sqlite3()
local conn = env:connect('mydb.sqlite')

  上面的语句将创建一个新的链接,通过这个conn对象我们就可以进行进一步的操作.

Execute函数

  跟上一章一样,Execute函数帮助我们从创建、插入、删除、更新等方面执行数据库操作。

conn:execute([[ 'SQLite3STATEMENT' ]])

  在上面的语句中,我们需要确保链接是打开的,并用正确的语句替换SQLite3STATEMENT。

创建表实例

下面显示一个简单的创建表示例。它创建一个表,其中包含两个参数:类型为integer的id和类型为text的name。

sqlite3 = require "luasql.sqlite3"
local env  = sqlite3.sqlite3()
local conn = env:connect('mydb.sqlite')
print(env,conn)

status,errorString = conn:execute([[CREATE TABLE sample ('id' INTEGER, 'name' TEXT)]])
print(status,errorString )

  运行上述程序时,将创建一个名为sample的表,其中包含两列,即id和name。

SQLite3 environment (003EC918)	SQLite3 connection (00421F08)
0	nil

下面是产生错误的示例:

LuaSQL: unrecognized token: ""'id' INTEGER, 'name' TEXT)"

插入数据库实例

conn:execute([[INSERT INTO sample values('11','Raj')]])

select实例

  同MySQL一样,我们使用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

完整的例子

sqlite3 = require "luasql.sqlite3"

local env  = sqlite3.sqlite3()
local conn = env:connect('mydb.sqlite')
print(env,conn)

status,errorString = conn:execute([[CREATE TABLE sample ('id' INTEGER, 'name' TEXT)]])
print(status,errorString )

status,errorString = conn:execute([[INSERT INTO sample values('1','Raj')]])
print(status,errorString )

cursor,errorString = conn:execute([[select * from sample]])
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()
env:close()

 当执行上述代码,会产生如下输出

SQLite3 environment (005EC918)	SQLite3 connection (005E77B0)
0	nil
1	nil
SQLite3 cursor (005E9200)	nil
Id: 1, Name: Raj

  我们可以在这个libsql库的帮助下执行所有可用的查询。所以您可以尽可能的测试。