Banco de Dados

4 ago, 2010

Utilizando SQLite em aplicações Flex 3 Air – Parte 02

Publicidade

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:

	/**
* Classe responsável por manipular todas as requisições SqLite.
*/
public class SQLite extends SQLStatement{

//----------------------------------------------------------------------
//
// Variáveis
//
//----------------------------------------------------------------------
/**
* Referência para o arquivo de dados.
*/
private var file:File = new File();

/**
* Instância do conector de dados.
*/
private var conn:SQLConnection;

//----------------------------------------------------------------------
//
// Métodos
//
//----------------------------------------------------------------------
/**
* Construtor.
* Cria a base de dados, abre a conexão e cria as tabelas necesárias ao
* funcionamento do sistema.
*
* @params database Nome da base de dados SqLite.
*/
public function SQLite(database:String = 'base.sqlite'){

// Chama o construtor do parent.
super();

// Cria uma referência para a base de dados.
file = File.documentsDirectory.resolvePath(database);

// Cria a conexão com a base de dados.
conn = new SQLConnection();

// Adiciona um ouvinte para erro de abertura da base de dados.
conn.addEventListener(SQLErrorEvent.ERROR, onError);

// Adiciona um ouvinte para erros de execução de queries.
addEventListener(SQLErrorEvent.ERROR, onError);

// Adiciona um ouvinte para tratar finalização da execução de uma
// query SQLite.
addEventListener(SQLEvent.RESULT, onResult);

// Cria a conexão.
this.sqlConnection = conn;

// Abre a conexão.
conn.open(file);
}

/**
* Função executada quando realizado uma chamada SQlite.
*/
private function onResult(e:SQLEvent):void {

// Limpa todos os dados da memória referentes a resultados
// (getResult) e substituição de parâmetros (parameters).
this.clearParameters();
}

/**
* Trata erros de execução de queries.
*/
private function onError(e:SQLErrorEvent):void {
Alert.show(e.error.details, "Erro");
}
}

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();
// Query para a criação da tabela 'nomes'.
sqlite.text = "CREATE TABLE IF NOT EXISTS nomes (" +
"name VARCHAR(200) NOT NULL)";

// Executa a criação.
sqlite.execute();

// Query para inclusão de um nome na tabela utilizada como exemplo.
sqlite.text = "INSERT INTO nomes( " +
" name " +
") VALUES ( " +
" @name)";

// Parâmetros de substituição.
sqlite.parameters['@name'] = "João Silva";

// Executa a inclusão.
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