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库的帮助下执行所有可用的查询。所以您可以尽可能的测试。