Conforme combinado no artigo anterior, apresentarei nesta segunda parte uma maneira, entre as muitas existentes, de utilizar SQLite em suas aplicações de forma customizada utilizando OOP, apresentando também eventos e métodos que são úteis quando utilizamos SQLite em Flex AIR.
Este processo é importante, pois, como vimos anteriormente, para se trabalhar com SQLite são necessárias três classes, que tornam o desenvolvimento de uma aplicação pouco produtiva e, de certa forma, trabalhosa. Sendo assim, vamos criar uma classe que facilite todo esse processo.
Esta classe será criada como nome SQLite estendendo-se a classe SQLStatement, classe esta responsável pela execução de instruções SQL.
Segue a classe na integra:
/**<br /> * Classe responsável por manipular todas as requisições SqLite.<br /> */<br /> public class SQLite extends SQLStatement{<br /><br /> //----------------------------------------------------------------------<br /> //<br /> // Variáveis<br /> //<br /> //----------------------------------------------------------------------<br /> /**<br /> * Referência para o arquivo de dados.<br /> */<br /> private var file:File = new File();<br /><br /> /**<br /> * Instância do conector de dados.<br /> */<br /> private var conn:SQLConnection;<br /><br /> //----------------------------------------------------------------------<br /> //<br /> // Métodos<br /> //<br /> //----------------------------------------------------------------------<br /> /**<br /> * Construtor.<br /> * Cria a base de dados, abre a conexão e cria as tabelas necesárias ao<br /> * funcionamento do sistema.<br /> * <br /> * @params database Nome da base de dados SqLite.<br /> */<br /> public function SQLite(database:String = 'base.sqlite'){<br /><br /> // Chama o construtor do parent.<br /> super();<br /><br /> // Cria uma referência para a base de dados.<br /> file = File.documentsDirectory.resolvePath(database);<br /><br /> // Cria a conexão com a base de dados.<br /> conn = new SQLConnection();<br /><br /> // Adiciona um ouvinte para erro de abertura da base de dados.<br /> conn.addEventListener(SQLErrorEvent.ERROR, onError);<br /><br /> // Adiciona um ouvinte para erros de execução de queries.<br /> addEventListener(SQLErrorEvent.ERROR, onError);<br /><br /> // Adiciona um ouvinte para tratar finalização da execução de uma <br /> // query SQLite.<br /> addEventListener(SQLEvent.RESULT, onResult);<br /><br /> // Cria a conexão.<br /> this.sqlConnection = conn;<br /><br /> // Abre a conexão.<br /> conn.open(file);<br /> }<br /><br /> /**<br /> * Função executada quando realizado uma chamada SQlite. <br /> */<br /> private function onResult(e:SQLEvent):void {<br /><br /> // Limpa todos os dados da memória referentes a resultados <br /> // (getResult) e substituição de parâmetros (parameters).<br /> this.clearParameters();<br /> }<br /><br /> /**<br /> * Trata erros de execução de queries.<br /> */<br /> private function onError(e:SQLErrorEvent):void {<br /> Alert.show(e.error.details, "Erro");<br /> }<br />}A classe acima está toda comentada, então vamos priorizar os pontos mais importantes.
Repare que no construtor (função SQLite), tratamos a criação da base de dados, assim como a conexão com a mesma. Foram adicionados dois ‘ouvintes’ (addEventListener), responsáveis por tratar possíveis erros tanto na abertura/criação da base de dados, quanto na execução de queries, e um terceiro ‘ouvinte’ (addEventListener(SQLEvent.RESULT, onResult)) para tratar a finalização da execução de uma query.
Este último é muito importante quando executamos instruções SQL simultâneas, pois ele é responsável por chamar o método onResult, limpa os dados da memória referentes a valores contidos em parameters utilizando a função clearParameters.
Como utilizar a classe?
É bem simples utilizá-la. Como a classe SQLite estende a SQLStatement, ela tem todas as suas funcionalidades, sendo assim basta instanciá-la passando como parâmetro um nome para sua base de dados (caso contrário, será assumido como base.sqlite), conforme o exemplo abaixo:
private var sqlite:SQLite = new SQLite();<br />// Query para a criação da tabela 'nomes'.<br />sqlite.text = "CREATE TABLE IF NOT EXISTS nomes (" +<br /> "name VARCHAR(200) NOT NULL)";<br /><br />// Executa a criação.<br />sqlite.execute();<br /><br />// Query para inclusão de um nome na tabela utilizada como exemplo.<br />sqlite.text = "INSERT INTO nomes( " + <br /> " name " + <br /> ") VALUES ( " + <br /> " @name)";<br /><br />// Parâmetros de substituição.<br />sqlite.parameters['@name'] = "João Silva";<br /><br />// Executa a inclusão.<br />sqlite.execute();No exemplo, após criar uma instância da classe SQLite, foi incluído um nome em uma tabela ‘nomes’. Desta forma, quando a classe é instanciada, o construtor encarrega-se de criar/abrir a base de dados, criar a tabela ‘nomes’, caso a mesma ainda não exista e incluir um nome.
Bem, pessoal, é isso aí, espero que seja de bom proveito.
[]’s







