<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>html 5 SQL &#8211; Turbosite &#8211; Blog</title>
	<atom:link href="https://www.turbosite.com.br/blog/tag/html-5-sql/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.turbosite.com.br/blog</link>
	<description></description>
	<lastBuildDate>Tue, 09 Dec 2014 13:54:17 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://www.turbosite.com.br/blog/wp-content/uploads/2026/09/cropped-logo_turbo_vermelha-32x32.png</url>
	<title>html 5 SQL &#8211; Turbosite &#8211; Blog</title>
	<link>https://www.turbosite.com.br/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>SQL do lado do Cliente? Web SQL Database com HTML5</title>
		<link>https://www.turbosite.com.br/blog/sql-do-lado-do-cliente-web-sql-database-com-html5/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Tue, 09 Dec 2014 13:54:17 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[html 5 SQL]]></category>
		<category><![CDATA[novidade HTML 5]]></category>
		<category><![CDATA[SQL do lado do cliente]]></category>
		<category><![CDATA[Web SQL Database]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3903</guid>

					<description><![CDATA[Como trabalhar com o recurso Web SQL Database HTML 5. Vamos explicar, exemplificar e testar a funcionalidade para demonstrar sua utilização e seus benefícios.]]></description>
										<content:encoded><![CDATA[<p>Já pensou em utilizar SQL do lado do Cliente? Bom, agora isso é possível, com o HTML 5 podemos utilizar o Web SQL Database.</p>
<p>Ele traz uma API de banco de dados SQL Web, por enquanto ainda é uma especificação separada do HTML 5, mas já introduz um conjunto de APIs para manipular base de dados do lado do cliente utilizando SQL.</p>
<p>Estamos supondo que você já conheça e trabalhe com o SQL, mas caso não saiba o que é, recomendamos um <a href="https://www.youtube.com/watch?v=EjE57WqB7xg&amp;list=PLyH68Dr1pa5ym3xKGelKhDkjfe-MfBWCJ" target="_blank">mini curso de MySQL</a>.</p>
<p>Por enquanto, Web SQL Database está suportado nas últimas versões do Chorme, Safari e Opera.</p>
<p>Esta postagem é baseada no artigo em inglês:<a href="http://www.tutorialspoint.com/html5/html5_web_sql.htm" target="_blank"> Web SQL Database</a></p>
<p>&nbsp;</p>
<h2>Os métodos principais:</h2>
<p>Há três seguintes métodos fundamentais definidos na especificação de que vamos mostrar nesta postagem:</p>
<ol>
<li><b>openDataBase:</b> Este método cria o objeto de banco de dados, depois utiliza um banco de dados existente ou criar um novo.</li>
<li><b>transaction:</b> Este método controlar a transação e  nos retorna uma confirmação ou anulação com base no que foi executado.</li>
<li><b>executeSql:</b> Este método é usado para executar um consulta SQL.</li>
</ol>
<p>&nbsp;</p>
<h2>Abrindo Base de dados:</h2>
<p>O o<i>penDataBase</i> método cuida da abertura de um banco de dados se ele já existe, este método irá criá-lo se ele não existe.</p>
<p>Para criar e abrir um banco de dados, use o seguinte código:</p>
<pre class="top-margin:20 bottom-margin:20 left-set:true left-margin:20 right-set:true right-margin:20 whitespace-before:2 whitespace-after:2 lang:js decode:true">var db = openDatabase ('Teste', '1.0', 'Teste Web SQL Database', 2 * 1024 * 1024);
</pre>
<p>&nbsp;</p>
<p>Acima método tem quatro parâmetros:</p>
<ol>
<li>Nome do banco</li>
<li>Número da versão</li>
<li>Descrição de texto</li>
<li>Tamanho da base de dados</li>
</ol>
<p>&nbsp;</p>
<h2>Execução de consultas:</h2>
<p>Para executar uma consulta, deve ser utilizado a função database.transaction (). Esta função precisa de um único argumento, mas pode ser passado o 2º e 3º parametro para verificar se foi completado com sucesso o comando, segue exemplo de duas consultas, uma simples e outra debugando:</p>
<pre class="top-margin:20 bottom-margin:20 left-set:true left-margin:20 right-set:true right-margin:20 whitespace-before:2 whitespace-after:2 lang:js decode:true">var db = openDatabase ('Teste', '1.0', 'Teste Web SQL Database', 2 * 1024 * 1024);

// Simples
db.transaction (function (tx) {  
   tx.executeSql ("CREATE TABLE IF NOT EXISTS LOGS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, log)");
});

// Debugando
db.transaction (function (tx) {  
   tx.executeSql ("CREATE TABLE IF NOT EXISTS LOGS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, log)",
       function(tx){
           /*Sucesso*/
       },
       function(erro){
           /*Error*/
       });
});</pre>
<p>&nbsp;</p>
<p>As consultas acima irão criar uma tabela chamada LOGS na base de dados &#8220;Teste&#8217;.</p>
<p>&nbsp;</p>
<h2>Inserir dados:</h2>
<p>Para inserir dados  na tabela, utilizamos a função transaction() também, só que, desta vez com o INSERT para popular a tabela, veja o exemplo:</p>
<pre class="top-margin:20 bottom-margin:20 left-set:true left-margin:20 right-set:true right-margin:20 whitespace-before:2 whitespace-after:2 lang:js decode:true">var db = openDatabase ('Teste', '1.0', 'Teste Web SQL Database', 2 * 1024 * 1024);

db.transaction (function (tx) {
   tx.executeSql ("CREATE TABLE IF NOT EXISTS LOGS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, log)");

   // Os 3 null represetam
   // 1º - Um array contendo dados
   // 2º - Função para sucesso
   // 3º - Função para Erro
   // Vamos explicá-los mais abaixo
   tx.executeSql ("INSERT INTO LOGS (log) VALUES ('Resultado do Log de Teste 01') ", null, null, null);
   tx.executeSql ("INSERT INTO LOGS (log) VALUES ('Resultado do Log de Teste 02') ", null, null, null);
});</pre>
<p>&nbsp;</p>
<p>Também podemos passar valores dinâmicos, utilizamos a seguinte sintaxe:</p>
<pre class="top-margin:20 bottom-margin:20 left-set:true left-margin:20 right-set:true right-margin:20 whitespace-before:2 whitespace-after:2 lang:js decode:true">var db = openDatabase ('Teste', '1.0', 'Teste Web SQL Database', 2 * 1024 * 1024);

db.transaction (function (tx) {

  var novo_log = 'Resultado do Log de Teste 01';

   // Os 3 null estão sendo mostrados aqui
   // 1º - Um array contendo dados, estamos passando apenas um valor com o novo_log
   // 2º - Função para sucesso
   // 3º - Função para Erro
   // Vamos explicá-los mais abaixo
  tx.executeSql ("CREATE TABLE IF NOT EXISTS LOGS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, log)");
  tx.executeSql ("INSERT INTO REGISTROS (log) VALUES (?)",[novo_log],null,null);						
});</pre>
<p>&nbsp;</p>
<p>Aqui novo_log é uma variável e executeSql mapeia cada item no argumento de matriz para o &#8220;?&#8221;, isto é, poderíamos ter vários &#8220;?&#8221; e no final teríamos [var_1,var_2,var_3], sendo que, ele utilizará a ordem exata das variáveis para popular a query.</p>
<p>&nbsp;</p>
<h2>Lendo os dados:</h2>
<p>Para ler os registros já existentes usamos um callback para capturar os resultados da seguinte forma:</p>
<pre class="top-margin:20 bottom-margin:20 left-set:true left-margin:20 right-set:true right-margin:20 whitespace-before:2 whitespace-after:2 lang:js decode:true">var db = openDatabase ('Teste', '1.0', 'Teste Web SQL Database', 2 * 1024 * 1024);

db.transaction (function (tx) {
    tx.executeSql ("CREATE TABLE IF NOT EXISTS LOGS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, log TEXT)",null,null);
    tx.executeSql ("INSERT INTO LOGS (log) VALUES (?)",['Resultado do Log de Teste 01'],null,null);
    tx.executeSql ("INSERT INTO LOGS (log) VALUES (?)",['Resultado do Log de Teste 02'],null,null);
});

db.transaction (function (tx) {
   tx.executeSql ('SELECT * FROM LOGS', [], function (tx, results) {
   var len = results.rows.length, i;
   msg = "&lt;p&gt; Registros encontrados:" + len + "&lt;/ p&gt;";
   for (i = 0; i &lt;len; i ++) {
      console.log(results.rows.item(i) .log);
   }
 }, null);
});</pre>
<p>&nbsp;</p>
<h2>Exemplo final:</h2>
<p>Então, finalmente, vamos  criar um exemplo em HTML 5,  este exemplo está funcional e testado no Chrome versão Versão 39.0.2171.71 m.</p>
<pre class="top-margin:20 bottom-margin:20 left-set:true left-margin:20 right-set:true right-margin:20 whitespace-before:2 whitespace-after:2 lang:js decode:true">var db = openDatabase ('Teste', '1.0', 'Teste Web SQL Database', 2 * 1024 * 1024);

db.transaction (function (tx) {
    tx.executeSql ("CREATE TABLE IF NOT EXISTS LOGS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, log TEXT)",null,null);
    tx.executeSql ("INSERT INTO LOGS (log) VALUES (?)",['Resultado do Log de Teste 01'],null,null);
    tx.executeSql ("INSERT INTO LOGS (log) VALUES (?)",['Resultado do Log de Teste 02'],null,null);
   console.log('Log mensagem criada e linha inserida');
});

db.transaction(function(tx){
    tx.executeSql(       
        "SELECT * FROM LOGS",
        [],
        function(tx, result){
            console.log('Deu certo!');
            var len = result.rows.length, i;
            for(i=0;i&lt;len;i++){
                console.log( result.rows.item(i) );
            }
        },
        function(tx, error){
            console.log('Deu errado!');
            console.log(error);
        }
    );
});</pre>
<p>&nbsp;</p>
<p>Isso produziria o seguinte resultado:</p>
<pre class="top-margin:20 bottom-margin:20 left-set:true left-margin:20 right-set:true right-margin:20 whitespace-before:2 whitespace-after:2 lang:js decode:true">Log mensagem criada e linha inserida
Deu certo!
Object {id: 1, log: "Resultado do Log de Teste 01"}
Object {id: 2, log: "Resultado do Log de Teste 02"}
</pre>
<p>&nbsp;</p>
<h2>Conclusão:</h2>
<p>É bem simples utilizar e depende apenas de um pouco de treino, nos testes detectamos que a sua persistência é como uma sessão, ao fechar o browser perde-se o objeto, mas ao trocar de página dentro do mesmo domínio o mesmo permanece.</p>
<p>Já pensou em utilizar esta nova funcionalidade com o evento <a href="https://www.turbosite.com.br/blog/aviso-de-alteracoes-na-pagina-para-nao-perder-dados-javascript/" target="_blank">onBeforeUnload </a>para rastrear todo o caminho que um usuário caminhou dentro do seu site? A utilização ficará por conta da imaginação de vocês.</p>
<p>&nbsp;</p>
<p>Um exemplo que encontramos no GitHub e que vale a pena ver:<br />
<a href="https://gist.github.com/andyj/1599544" target="_blank">Link original do código aqui.</a></p>
<p>https://gist.github.com/andyj/1599544</p>
<p>Link de uma aplicação feita com Web Sql.<br />
<a href="https://github.com/abeauseigle/webSqlApp" target="_blank">HTML5 webSQL app synching with a php MySQL server</a></p>
<p>Se gostaram, compartilhem e façam comentários, sugestões, correções e correções sempre são bem vindas. A Turbosite tem o comprometimento em divulgar conhecimento!</p>
<hr />
<p>&nbsp;</p>
<p><strong>Quer servidores Seguros, Estáveis, com uptime de 99,9%, no Brasil e de baixo Custo? A <span style="color: #ff0000;">Turbosite</span> é sua resposta.</strong></p>
<p><strong><a href="https://www.turbosite.com.br/hospedagem-de-sites" target="_blank">Hospedagem de Sites</a>, <a href="https://www.turbosite.com.br/datacenter" target="_blank">Data Center</a> e <a href="https://www.turbosite.com.br/registro-dominio" target="_blank">Registro de Domínio Grátis</a> só aqui!</strong></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
