Como Executar Múltiplas Consultas SQL no Adobe AIR Usando AS3

Se você já tentou executar múltiplas instruções SQL em uma única chamada dentro de seu aplicativo Adobe AIR, pode ter encontrado uma limitação frustrante: apenas a primeira consulta parece ser executada com sucesso. Neste post do blog, vamos analisar esse problema, explorar por que ele ocorre e fornecer uma solução prática e eficaz para executar múltiplas consultas SQL de forma fluida.

O Problema

Ao usar o método SQLStatement.execute() no Adobe AIR, muitos desenvolvedores enfrentam o desafio de executar múltiplas consultas em uma única instrução. Se você estiver rodando um script de geração de banco de dados ou inicializando um banco de dados com várias tabelas, ter que executar cada comando um por um pode ser ineficiente e tedioso.

Por exemplo, considere os seguintes comandos SQL que criam várias tabelas:

Create Table tRole (
    roleID integer Primary Key,
    roleName varchar(40)
);
Create Table tFile (
    fileID integer Primary Key,
    fileName varchar(50),
    fileDescription varchar(500),
    thumbnailID integer,
    fileFormatID integer,
    categoryID integer,
    isFavorite boolean,
    dateAdded date,
    globalAccessCount integer,
    lastAccessTime date,
    downloadComplete boolean,
    isNew boolean,
    isSpotlight boolean,
    duration varchar(30)
);
Create Table tCategory (
    categoryID integer Primary Key,
    categoryName varchar(50),
    parent_categoryID integer
);

Ao executar esse script SQL no Adobe AIR usando a função NonQuery, apenas o primeiro comando (Create Table tRole) executa com sucesso, enquanto os demais são ignorados ou falham devido ao ponto e vírgula (que marca o fim da instrução). Essa limitação pode dificultar o processo de desenvolvimento e tornar a configuração tediosa.

A Solução

Felizmente, existe um método simples para lidar com esse problema, dividindo seus comandos SQL em cada ponto e vírgula e executando-os individualmente. Veja como fazer isso passo a passo:

Passo 1: Ler Comandos SQL do Arquivo

Primeiro, certifique-se de ler seu script SQL em uma string. Este exemplo utiliza um fluxo de arquivo para buscar todo o texto do comando SQL.

var strSql:String = stream.readUTFBytes(stream.bytesAvailable);

Passo 2: Dividir os Comandos SQL

Em seguida, divida a string em um array usando o ponto e vírgula (;) como um delimitador. Isso permite isolar cada comando SQL para execução individual.

var strSqlSplit:Array = strSql.split(";");

Passo 3: Executar Cada Comando Individualmente

Agora, utilize um loop para iterar sobre cada comando no array e chamar sua função NonQuery para execução:

for (var i:Number = 0; i < strSqlSplit.length; i++) {
    NonQuery(strSqlSplit[i].toString());
}

Exemplo Completo de Código

Aqui está a versão completa modificada de sua função RunSqlFromFile que incorpora todos os passos acima:

public static function RunSqlFromFile(fileName:String):void {
    var file:File = File.applicationDirectory.resolvePath(fileName);
    var stream:FileStream = new FileStream();
    stream.open(file, FileMode.READ);
    var strSql:String = stream.readUTFBytes(stream.bytesAvailable);      
    var strSqlSplit:Array = strSql.split(";");
    
    for (var i:Number = 0; i < strSqlSplit.length; i++) {
        NonQuery(strSqlSplit[i].toString());
    }
}

Dicas para o Sucesso

  • Uso do ponto e vírgula: Tenha cuidado com seus pontos e vírgulas. Certifique-se de que não há espaços ou caracteres extras após o ponto e vírgula que possam afetar a divisão.
  • Tratamento de Erros: Envolva suas chamadas NonQuery em um bloco try-catch para tratar qualquer erro SQL de forma suave.
  • Sintaxe SQL: Verifique sua sintaxe SQL para cada comando para evitar erros de execução durante a execução.

Conclusão

Ao dividir suas consultas SQL usando ponto e vírgulas e executá-las individualmente, você pode gerenciar efetivamente várias consultas no Adobe AIR sem enfrentar problemas. Essa abordagem não apenas simplifica o processo, mas também minimiza dores de cabeça ao configurar seus bancos de dados. Boa codificação!