Exemplos
45 | 46 |Abaixo, você verá um pequeno exemplo do código do uso básico da biblioteca. 47 | Em seguida, outro exemplo mostra como criar um 48 | iterador sobre o resultado de uma determinada consulta.
49 | 50 | 51 |Uso básico
52 |53 | -- carregar o driver 54 | require "luasql.postgres" 55 | -- criar o objeto de ambiente 56 | env = assert (luasql.postgres()) 57 | -- conectar a base de dados 58 | con = assert (env:connect("luasql-test")) 59 | -- retornar a tabela 60 | res = con:execute"DROP TABLE people" 61 | res = assert (con:execute[[ 62 | CREATE TABLE people ( 63 | name varchar(50), 64 | email varchar(50) 65 | ) 66 | ]]) 67 | -- adiciona alguns elementos 68 | list = { 69 | { name="José das Couves", email="jose@couves.com", }, 70 | { name="Manoel Joaquim", email="manoel.joaquim@cafundo.com", }, 71 | { name="Maria das Dores", email="maria@dores.com", }, 72 | } 73 | for i, p in pairs (list) do 74 | res = assert (con:execute(string.format([[ 75 | INSERT INTO people 76 | VALUES ('%s', '%s')]], p.name, p.email) 77 | )) 78 | end 79 | -- obtem um cursor 80 | cur = assert (con:execute"SELECT name, email from people") 81 | -- imprime todos os registros, indexados pelos nomes de campos 82 | row = cur:fetch ({}, "a") 83 | while row do 84 | print(string.format("Nome: %s, E-mail: %s", row.name, row.email)) 85 | -- reutiliza a tabela de resultados 86 | row = cur:fetch (row, "a") 87 | end 88 | -- fecha tudo 89 | cur:close() 90 | con:close() 91 | env:close() 92 |93 | 94 |
O resultado desse script será:
95 | 96 |97 | Nome: José das Couves, E-mail: jose@couves.com 98 | Nome: Manoel Joaquim, E-mail: manoel.joaquim@cafundo.com 99 | Nome: Maria das Dores, E-mail: maria@dores.com 100 |101 | 102 | 103 |
Uso do iterador
104 |Pode ser útil oferecer um iterador para cada registro do resultado:
105 | 106 |107 | function rows (connection, sql_statement) 108 | local cursor = assert (connection:execute (sql_statement)) 109 | return function () 110 | return cursor:fetch() 111 | end 112 | end 113 |114 | 115 |
Esse iterador é usado da seguinte forma:
116 | 117 |118 | require "luasql.mysql" 119 | env = assert (luasql.mysql()) 120 | con = assert (env:connect"my_db") 121 | for id, name, address in rows (con, "select * from contacts") do 122 | print (string.format ("%s: %s", name, address)) 123 | end 124 |125 | 126 |
Obviamente, o código acima só funciona se houver uma tabela chamadas contacts
com as colunas apropriadas.
127 | No final do loop o objeto cursor será automaticamente fechado pelo driver, já que todo o resultado foi recuperado.
Objetos to-be-closed
130 | 131 |132 | Nota de Compatibilidade: 133 | 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. 134 |
135 | 136 |137 | function getName(db, id) 138 | -- Este código requer Lua 5.4 ou superior devido ao uso de variáveis to-be-closed 139 | local cur <close> = db:execute("SELECT name FROM contacts WHERE id = " .. id) 140 | return cur:fetch() 141 | end 142 |143 | 144 |