Exemplos
Abaixo, você verá um pequeno exemplo do código do uso básico da biblioteca. Em seguida, outro exemplo mostra como criar um iterador sobre o resultado de uma determinada consulta.
Uso básico
-- carregar o driver
require "luasql.postgres"
-- criar o objeto de ambiente
env = assert (luasql.postgres())
-- conectar a base de dados
con = assert (env:connect("luasql-test"))
-- retornar a tabela
res = con:execute"DROP TABLE people"
res = assert (con:execute[[
CREATE TABLE people (
name varchar(50),
email varchar(50)
)
]])
-- adiciona alguns elementos
list = {
{ name="José das Couves", email="jose@couves.com", },
{ name="Manoel Joaquim", email="manoel.joaquim@cafundo.com", },
{ name="Maria das Dores", email="maria@dores.com", },
}
for i, p in pairs (list) do
res = assert (con:execute(string.format([[
INSERT INTO people
VALUES ('%s', '%s')]], p.name, p.email)
))
end
-- obtem um cursor
cur = assert (con:execute"SELECT name, email from people")
-- imprime todos os registros, indexados pelos nomes de campos
row = cur:fetch ({}, "a")
while row do
print(string.format("Nome: %s, E-mail: %s", row.name, row.email))
-- reutiliza a tabela de resultados
row = cur:fetch (row, "a")
end
-- fecha tudo
cur:close()
con:close()
env:close()
O resultado desse script será:
Nome: José das Couves, E-mail: jose@couves.com Nome: Manoel Joaquim, E-mail: manoel.joaquim@cafundo.com Nome: Maria das Dores, E-mail: maria@dores.com
Uso do iterador
Pode ser útil oferecer um iterador para cada registro do resultado:
function rows (connection, sql_statement)
local cursor = assert (connection:execute (sql_statement))
return function ()
return cursor:fetch()
end
end
Esse iterador é usado da seguinte forma:
require "luasql.mysql"
env = assert (luasql.mysql())
con = assert (env:connect"my_db")
for id, name, address in rows (con, "select * from contacts") do
print (string.format ("%s: %s", name, address))
end
Obviamente, o código acima só funciona se houver uma tabela chamadas contacts com as colunas apropriadas.
No final do loop o objeto cursor será automaticamente fechado pelo driver, já que todo o resultado foi recuperado.
Objetos to-be-closed
Nota de Compatibilidade: Variáveis To-be-closed é um recurso introduzido na versão 5.4 de Lua. Portanto, essa funcionalidade só pode ser usada se o driver LuaSQL (versão > 2.6) for compilado para a versão 5.4 ou superior de Lua.
function getName(db, id)
-- Este código requer Lua 5.4 ou superior devido ao uso de variáveis to-be-closed
local cur <close> = db:execute("SELECT name FROM contacts WHERE id = " .. id)
return cur:fetch()
end