Estratégias para trabalhar com bancos de dados SQL

Adobe AIR 1.0 e posterior

Existem várias maneiras pelas quais um aplicativo pode acessar e trabalhar com um banco de dados SQL local. O design do aplicativo pode variar em termos de como seu código é organizado, a sequência e o intervalo de execução das operações, e assim por diante. As técnicas que você escolhe podem afetar a facilidade com que o aplicativo é desenvolvido. Elas podem afetar a facilidade com que você modificará o aplicativo em futuras atualizações. Elas também podem afetar o desempenho do aplicativo do ponto de vista dos usuários.

Distribuição de um banco de dados previamente preenchido

Quando você usa um banco de dados SQL local do AIR no seu aplicativo, este espera um banco de dados com uma certa estrutura de tabelas, colunas e assim por diante. Alguns aplicativos também esperam que certos dados estejam previamente preenchidos no arquivo de banco de dados. Uma forma de assegurar que o banco de dados tenha a estrutura apropriada é criar um banco de dados no código do aplicativo. Quando o aplicativo é carregado, ele verifica se o arquivo de banco de dados correspondente existe em um determinado local. Se o arquivo não existir, o aplicativo executará um conjunto de comandos para criar o arquivo de banco de dados, criar a estrutura do banco de dados e preencher as tabelas com os dados iniciais.

O código que cria o banco de dados e suas tabelas geralmente é complexo. Com frequência, ele só é usado uma vez durante o período em que o aplicativo fica instalado, mas ainda assim aumenta o tamanho e a complexidade do aplicativo. Como alternativa à criação do banco de dados, da estrutura e dos dados de modo programático, você pode distribuir um banco de dados previamente preenchido com o aplicativo. Para distribuir um banco de dados predefinido, inclua o arquivo correspondente no pacote AIR do aplicativo.

Como todos os arquivos que são incluídos em um pacote AIR, um arquivo de banco de dados compactado é instalado no diretório do aplicativo (o diretório representado pela propriedade File.applicationDirectory ). No entanto, os arquivos desse diretório são somente leitura. Use o arquivo do pacote AIR como um banco de dados “modelo”. Na primeira vez que um usuário executar o aplicativo, copie o arquivo de banco de dados original para o Apontar para o diretório de armazenamento do aplicativo do usuário (ou outro local) e use esse banco de dados no aplicativo.

Melhores práticas de trabalho com bancos de dados SQL locais

A lista a seguir é um conjunto de técnicas sugeridas que você pode usar para melhorar o desempenho, a segurança e a facilidade de manutenção dos seus aplicativos quando trabalhar com bancos de dados SQL locais.

Crie conexões de banco de dados previamente

Mesmo que o seu aplicativo não execute nenhuma instrução quando inicialmente carregado, instancie um objeto SQLConnection e chame o método open() ou openAsync() correspondente com antecedência (por exemplo, após a inicialização do aplicativo) para evitar atrasos na execução de instruções. Consulte Conexão com um banco de dados .

Reutilize conexões de banco de dados

Se você acessa um certo banco de dados ao longo da execução do seu aplicativo, mantenha uma referência à ocorrência de SQLConnection e a reutilize no aplicativo inteiro em vez de fechar e reabrir a conexão. Consulte Conexão com um banco de dados .

Dê preferência ao modo de execução assíncrona

Quando criamos um código de acesso a dados, pode ser tentador executar operações de maneira síncrona em vez de assíncrona, porque usar operações síncronas geralmente requer um código mais curto e menos complexo. Porém, conforme descrito na seção Uso de operações de banco de dados síncronas e assíncronas , as operações síncronas podem ter um impacto no desempenho que é óbvio para os usuários e prejudicial para a experiência deles no aplicativo. O tempo usado para uma única operação varia conforme a operação e, principalmente, o volume de dados envolvido. Por exemplo, uma instrução SQL INSERT que só adiciona uma linha ao banco de dados demora menos tempo do que uma instrução SELECT que recupera milhares de linhas de dados. No entanto, quando você usa a execução síncrona para realizar várias operações, as operações normalmente são encadeadas. Mesmo que o tempo que cada operação leve seja muito curto, o aplicativo fica congelado até a conclusão de todas as operações síncronas. Por isso, o tempo acumulado de várias operações encadeadas pode ser suficiente para paralisar o aplicativo.

Use operações assíncronas como uma abordagem padrão, principalmente no caso de operações que envolvem um grande número de linhas. Há uma técnica para dividir o processamento de grandes conjuntos de resultados de instruções SELECT , descrita em Recuperação dos resultados de SELECT em partes . No entanto, ela só pode ser usada no modo de execução assíncrona. Utilize operações síncronas apenas quando não conseguir obter uma certa funcionalidade usando programação assíncrona, quando tiver considerado as vantagens e desvantagens para os usuários do aplicativo em termos de desempenho e quando testar o aplicativo e perceber que o desempenho foi afetado. O uso da execução assíncrona pode envolver uma codificação mais complexa. Porém, lembre-se de que você só precisa criar o código uma vez, mas que os usuários do aplicativo têm de usá-lo repetidas vezes, de forma ágil ou lentamente.

Em muitos casos, usando uma ocorrência de SQLStatement à parte para cada instrução SQL a ser executada, é possível enfileirar várias operações SQL de uma só vez, o que torna o código assíncrono parecido com o código síncrono quanto à maneira como ele é criado. Para obter mais informações, consulte Noções básicas sobre o modelo de execução assíncrona .

Use instruções SQL separadas e não altere a propriedade text de SQLStatement

Para qualquer instrução SQL executada mais de uma vez em um aplicativo, crie uma ocorrência de SQLStatement à parte para cada instrução SQL. Use essa ocorrência de SQLStatement sempre que esse comando SQL for executado. Por exemplo, suponha que você está criando um aplicativo que inclui quatro operações SQL diferentes executadas várias vezes. Nesse caso, crie quatro ocorrências separadas de SQLStatement e chame o método execute() de cada instrução para executá-la. Evite a alternativa de usar uma única ocorrência de SQLStatement para todas as instruções SQL, sempre redefinindo sua propriedade text antes de executar a instrução.

Use parâmetros de instrução

Use parâmetros SQLStatement — nunca concatene a entrada do usuário no texto da instrução. O uso de parâmetros torna o seu aplicativo mais seguro porque impede a possibilidade de ataques de injeção SQL. Isso permite usar objetos em consultas (e não apenas valores literais SQL). Também torna a execução das instruções mais eficiente, porque elas podem ser reutilizadas sem que você precise recompilá-las todas as vezes que forem executadas. Consulte Uso de parâmetros em instruções para obter mais informações.