Neste tutorial mostrarei como utilizar uma classe que eu criei para facilitar o uso de SQL em AIR (tanto para flash quanto para flex)
A classe é esta:
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 | /* ################################################ # # # Classe : DB (com.alkeller.air.DB) # # Autor : Armando Leopoldo Keller # # Versão : 1.0 # # Contato : alksk8@hotmail.com # # Blog : http://alkeller.wordpress.com # # Documentaçao em breve no blog # # # ################################################ ------- Deixe os creditos na classe ---------- */ package com.alkeller.air { // Imports import flash.data.SQLResult; import flash.filesystem.File; import flash.data.SQLStatement; import flash.data.SQLConnection; import flash.events.SQLEvent; import flash.events.SQLErrorEvent; import flash.errors.SQLError; // Classe; public class DB { // Variaveis utilizadas; private static var conectado:Boolean = false; private static var dbFile:File private static var conn:SQLConnection private static var _sqlStatement:SQLStatement; private static var resultado:SQLResult; private static var retornoString:String; private static var retornoObjeto:Object; // Funçao Inicia :utilizada para conectar com o banco de dados; public static function Inicia(_nome:String):String { conn = new SQLConnection(); dbFile = File.applicationStorageDirectory.resolvePath(String(_nome+".db")); try { conn.open(dbFile); conectado = true; trace("Conectado com "+_nome+".db"); retornoString = "Conectado com "+_nome+".db"; } catch (error:SQLError) { conectado = false; retornoString = "Falha ao conectar: "+error.message+"\nDetalhes: "+error.details; } return retornoString; } // Funçao executeQuery: Utilizada para executar um comando SQL(verificar quais são aceitos pelo AIR); // Retorno: SQLResult --> http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/data/SQLResult.html // ou String de erro; public static function executeQuery(_sql:String):Object { if(conectado == true) { _sqlStatement = new SQLStatement(); _sqlStatement.sqlConnection = conn; _sqlStatement.text = _sql; try { _sqlStatement.execute(); resultado = _sqlStatement.getResult(); retornoObjeto = resultado; } catch (error:SQLError) { retornoString = "Falha ao executar("+_sql+"): "+error.message+"\nDetalhes: "+error.details; } return retornoObjeto?retornoObjeto:retornoString; } else { return "Não conectado!"; } } } } |
Classe para download: http://paginas.terra.com.br/lazer/alksk8/DB.as
Como utilizar:
1 – Importe a classe:
1 2 3 4 | // OBS: Aqui é bom verificar se a classe esta no local certo com/alkeller/air/ import com.alkeller.air.*; // ou import com.alkeller.air.DB; |
2 – Inicie o banco:
1 | DB.Inicia("teste"); // sendo que teste é o nome do banco |
3 – Se as tabelas não existirem, crie elas:
1 | DB.executeQuery("CREATE TABLE IF NOT EXISTS testando (id INTEGER PRIMARY KEY AUTOINCREMENT,nome TEXT,sobrenome TEXT)"); |
4.1 – Execute as Querys que desejar, por exemplo inserir alguns dados:
1 | DB.executeQuery("INSERT INTO testando (id,nome,sobrenome) VALUES (null,'ARMANDO LEOPOLDO','KELLER')"); |
4.2 – Exemplo de como buscar dados:
1 2 3 4 5 6 7 8 9 | var obj:Object = DB.executeQuery("SELECT * FROM testando").data; for(var i:uint=0; i < obj.length; i++) { trace("linha: "+i); for(var j:Object in obj[i]) { trace(j+": "+obj[i][j]) } } |
Aproveitem a classe
Em breve colocarei aqui este tutorial em video.
Bom trabalho, mas eu acho legal usar o protótipo de ORM em AIR feito pelo Christophe
http://coenraets.org/blog/2007/10/annotating-actionscript-classes-with-custom-metadata-simple-orm-framework-for-air/
Esse simples exemplo pode ser aproveitado para criar seu proprio ORM e otimizar de acordo com a sua necessidade.
Abraços.
Classe legal mas….usar esse tipo de banco interno pra fazer sistema é a maior besteira que se pode fazer.
Lembrando que esse banco do AIR pode corromper e também não consigo trabalhar com grandes quantidades de registro.
Assim sendo, só usa esse tipo de banco para poucos registros e consultas simples e nada a mais.
Flw guri…
Jonathan, o banco do AIR é o SQLite , que é muito bom por sinal, e pode fazer backup e tal, site do SQLite : http://www.sqlite.org/
Finalmente encontrei alguem que faz algo prático e funcional. Melhor… em português, quer mais… impossivél, estou dias procurando e não encontrava, sorte tentar procurar pelo flash e não pelo flex.
Olha, PARABÈNS… show de bola, ainda não testei, mas vou testar daqui a pouco. Eu só espero que um dia você conhece a colocar tutoriais.. para iniciantes principalmente.
Um grande abraço.
Maykson
alkeller, o banco de SQLite ja vem imbutido no sdk do air ou preciso instalar ele manualmente?
Ja vem junto.
[...] AIR para consultar SQL com Flash e Flex; [...]
Eu testei a classe, mas na hora que mando criar o banco ele não aparece na pasta da aplicação.
Seria legal se ela informasse se ele chegou a executar sem erros o SQL informado.
Flávio, como havia te dito, eu ainda estou dando uma melhorada na classe, mas devido a troca de trabalho, e o outro projeto (http://code.google.com/p/goas3) , eu ando meio sem tempo.
Primeiro vou melhorar o modo como ele retorna o sql.
Quanto aos erros de sql, eu achei uma ideia interessante, até de criar eventos para as querys.
Assim que eu tiver um tempo eu vou dar uma olhada nisso.
Obrigado pelas sugestoes.
Ola, bacana sua classe, porem ao tentar executar um select: var obj:Object = DB.executeQuery(“SELECT * FROM…
da o seguinte erro: Access of undefined property obj
o que pode estar acontecendo?
Tem como colocar o resto do codigo ?
OPa, seguinte velho, o erro acontecia porque eu estava tentando executar esse carinha:
var obj:Object = DB.executeQuery(”SELECT * FROM
testando”).data;
for(var i:uint=0; i < obj.length; i++)….
fora de uma função, foi so criar a function que funcionou blzinha!
Valeu!
Great blog you got here…keep up the good work.
Sou novo em utilizar o Adobe Air, há como disponibilizar um link para download desse exemplos de conexão com SQLite?
Ele não da erro, mas também não passa nenhuma informação, devo ta errando em algo na criação do projeto e com o exemplo ficaria mais facil de entende!
Valeu!