File: examples.html

package info (click to toggle)
lua-sql 2.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,108 kB
  • sloc: ansic: 4,368; java: 123; makefile: 51; xml: 38
file content (155 lines) | stat: -rw-r--r-- 4,708 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt">
<head>
    <title>LuaSQL: Conectividade de banco de dados para a linguagem de programação Lua</title>
    <link rel="stylesheet" href="doc.css" type="text/css"/>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>

<div id="container">
	
<div id="product">
	<div id="product_logo"><a href="http://www.keplerproject.org">
		<img alt="LuaSQL logo" src="luasql.png"/>
	</a></div>
	<div id="product_name"><big><strong>LuaSQL</strong></big></div>
	<div id="product_description">Conectividade de banco de dados para a linguagem de programação Lua</div>
</div> <!-- id="product" -->

<div id="main">
	
<div id="navigation">
<h1>LuaSQL</h1>
	<ul>
		<li><a href="index.html">Home</a>
		</li>
		<li><a href="manual.html">Manual</a>
		</li>
		<li><strong>Exemplos</strong></li>
		<li><a href="history.html">Histórico</a></li>
        <li><a href="https://github.com/lunarmodules/luasql">Projeto</a>
            <ul>
                <li><a href="https://github.com/lunarmodules/luasql/issues">Bug Tracker</a></li>

            </ul>
        </li>
		<li><a href="license.html">Licença</a></li>
	</ul>
</div> <!-- id="navigation" -->

<div id="content">
	
<h2><a name="examples"></a>Exemplos</h2>

<p>Abaixo, você verá um pequeno exemplo do código do uso básico da biblioteca.
Em seguida, outro exemplo mostra como criar um
<a href="#iterator_example">iterador</a> sobre o resultado de uma determinada consulta.</p>


<h3><a name="basic_use"></a>Uso básico</h3>
<pre class="example">
-- 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()
</pre>

<p>O resultado desse script será:</p>

<pre class="example">
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
</pre>


<h3><a name="iterator_example"></a>Uso do iterador</h3>
<p>Pode ser útil oferecer um iterador para cada registro do resultado:</p>

<pre class="example">
function rows (connection, sql_statement)
  local cursor = assert (connection:execute (sql_statement))
  return function ()
    return cursor:fetch()
  end
end
</pre>

<p>Esse iterador é usado da seguinte forma:</p>

<pre class="example">
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
</pre>

<p>Obviamente, o código acima só funciona se houver uma tabela chamadas <code>contacts</code> com as colunas apropriadas.
No final do <i>loop</i> o objeto cursor será automaticamente fechado pelo driver, já que todo o resultado foi recuperado.</p>

<h3><a name="To_be_closed"></a>Objetos <i>to-be-closed</i></h3>

<p>
<strong style="color: red;">Nota de Compatibilidade:</strong>
Variáveis <i>To-be-closed</i> é um recurso introduzido na versão 5.4 de Lua. Portanto, essa funcionalidade só pode ser usada se o driver LuaSQL (versão &gt; 2.6) for compilado para a versão 5.4 ou superior de Lua.
</p>

<pre class="example">
function getName(db, id)
  -- Este código requer Lua 5.4 ou superior devido ao uso de variáveis to-be-closed
  local cur &lt;close&gt; = db:execute("SELECT name FROM contacts WHERE id = " .. id)
  return cur:fetch()
end
</pre>

</div> <!-- id="content" -->

</div> <!-- id="main" -->

<div id="about">
	<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
</div> <!-- id="about" -->

</div> <!-- id="container" -->

</body>
</html>