我如何使用luasql创建Sqlite3数据库?

我正在尝试使用luasql创建一个Sqlite3数据库。在我要求luasql.sqlite3之后,我如何在文件上创建数据库?

另外,我似乎找不到luasql的手册。它是否可以在任何地方获得?

点赞
用户438753
用户438753

SQLLite会自动创建数据库,如果它不存在的话。

下面是一组在Lua中使用它的示例函数(忽略fh函数,它们只是我使用的程序内部函数)。

require 'luasql.sqlite3'
function opendb(dbname)
-- 检查设置数据库并在需要时创建
local db = fhGetPluginDataFileName()
local dbenv = assert(luasql.sqlite3())
--连接到数据源,如果文件不存在,则将创建它
dbcon = assert(dbenv:connect(db))
-- 检查页面列表的表
checkTable(dbcon,'pagelist',
[[CREATE TABLE pagelist(filename varchar(500), md5hash varchar(32),UNIQUE (filename))
]])
-- 为设置创建表
checkTable(dbcon,'settings',
[[CREATE TABLE settings(key varchar(20), directory varchar(500),
           host varchar(500), folder varchar(50), userid varchar(50), password varchar(50), UNIQUE (key))
]])
return dbenv,dbcon
end
function checkTable(dbcon,table,createString)
local sql = string.format([[SELECT count(name) as count FROM sqlite_master WHERE type='table' AND name='%s']],table)
local cur = assert(dbcon:execute(sql))
local rowcount = cur:fetch (row, "a")
cur:close()
if tonumber(rowcount) == 0 then
    -- 表未找到,创建它
    res,err = assert(dbcon:execute(createString))
end
end
function closedb(dbenv,dbcon)
dbcon:close()
dbenv:close()
end
function loadSettings(dbcon)
local sql = [[SELECT * FROM settings]]
local cur,err = assert(dbcon:execute(sql))
local row = cur:fetch({},'a')
cur:close()
if row then
    return row
else
    -- 返回默认值
    return {
        directory = fhGetContextInfo('CI_PROJECT_PUBLIC_FOLDER')..'\\FH Website',
        host = 'websitehost',
        folder = '/',
        userid = 'user',
        password = 'password',
        new = 'yes'
    }
end
end
function saveSettings(dbcon,settings)
-- 检查设置
if settings.new == 'yes' then
    -- 创建
    sql = string.format([[insert into settings (directory, host, folder, userid, password) Values('%s','%s','%s','%s','%s')]],settings.directory,settings.host,settings.folder,settings.userid,settings.password)
else
    -- 更新
    sql = string.format([[update settings set directory = '%s', host = '%s',folder = '%s',userid = '%s', password = '%s']],settings.directory,settings.host,settings.folder,settings.userid,settings.password)
end
local res = assert(dbcon:execute(sql))
end
2012-09-13 07:48:27