SQL, ou Structured Query Language, é uma linguagem específica de domínio projetada para acessar e manipular dados mantidos em um banco de dados relacional. Com a ajuda de instruções SQL, você pode executar operações como criar, atualizar, recuperar e excluir dados em um banco de dados relacional.
Um banco de dados relacional é um modelo de dados que organiza os dados em uma tabela usando linhas e colunas. Embora possa haver vários sistemas de gerenciamento de banco de dados relacional que usam SQL, quase todos eles são projetados para funcionar como processos do lado do servidor. Isso inclui, entre outros:
- MySQL
- PostgreSQL
- SQLite
- MSSQL
Neste tutorial, discutiremos SQL.js, uma biblioteca SQL JavaScript que permite criar e consultar bancos de dados relacionais inteiramente em seu navegador.
Percorreremos as etapas a seguir com um exemplo detalhado para cada seção:
- O que é SQL.js?
- Prós e contras do uso de SQL.js
- Instalação (navegador e Node.js)
- Escrevendo consultas SQL e instruções preparadas
O que é SQL.js?
SQL.js é uma biblioteca JavaScript que permite para criar e consultar um banco de dados relacional inteiramente no navegador. Ele usa um arquivo de banco de dados virtual armazenado na memória do navegador, de modo que não persiste as alterações feitas no banco de dados.
Esta biblioteca também usa Emscripten para compilar SQLite para WebAssembly (Wasm) . Com esse recurso, você pode facilmente trazer um banco de dados SQLite existente para usar em SQL.js e também converter um banco de dados criado em SQL.js para SQLite.
Prós e contras do uso de SQL.js
Existem vários prós no uso de SQL.js. Ele foi desenvolvido e funciona inteiramente no lado do cliente, o que significa que não exigirá nenhum processo do lado do servidor para funcionar. É mais fácil de configurar do que MySQL, PostgreSQL e outros, que exigem software de terceiros para uso. Começar com SQL.js é tão fácil quanto instalar jQuery em um projeto HTML existente. E o SQL.js oferece suporte para a execução de strings SQL únicas que contêm várias instruções, conforme visto a seguir:
sqlstr="CRIAR TABELA nome_da_tabela (colA, colB);"; sqlstr +="INSERT INTO hello VALUES (0,'hello');" ....
Mas também há um contra importante: as alterações em seu banco de dados ao usar SQL.js não são persistentes. Leia novamente: todas as alterações feitas em seu banco de dados deixarão de existir quando você recarregar o navegador. Isso ocorre porque o SQL.js usa um arquivo de banco de dados virtual armazenado na memória do navegador. No entanto, você pode importar qualquer arquivo SQLite existente e exportar o banco de dados criado como uma matriz digitada em JavaScript.
Instalação de SQL.js
Instalação do navegador
Integrar SQL.js em um novo projeto baseado no cliente é muito fácil. Você pode começar incluindo o CDN ou baixando os arquivos de origem e vinculando-os à sua página de marcação.
Por padrão, SQL.js usa WebAssembly e precisa carregar um arquivo .wasm além da biblioteca JavaScript. Você pode baixar este arquivo online e usar o função locateFile para carregar o arquivo em sua página da web, como:
Título da página
No bloco de código acima, usamos initSqlJs para carregar o arquivo binário Wasm de forma assíncrona e inicializar o SQL.js após carregar os arquivos necessários.
Instalação do Node.js
A instalação de SQL.js em um projeto baseado em Node também é bastante simples. Para instalá-lo, você pode simplesmente executar:
npm install sql.js
Como alternativa, você pode baixar sql-wasm.js e sql-wasm.wasm dos links anteriores e usar o Node.js require função para carregá-los em seu projeto.
Além disso, em um projeto baseado em Nó, você pode pular o método locateFile para carregar o arquivo sql-wasm.wasm porque ele será carregado automaticamente se estiver no mesma pasta do arquivo atual em que você está trabalhando. Portanto, nosso código será semelhante a este:
var initSqlJs=require ("./sql-wasm.js"); initSqlJs (). then (função (SQL) { console.log ("sql.js inicializado & # x1f389;");
});
Escrevendo consultas SQL e instruções preparadas
Agora que seguimos todas as etapas necessárias para instalar e inicializar o SQL.js, vamos mergulhar em seu uso.
Criação de um banco de dados
O código abaixo cria um novo banco de dados:
const db=new SQL.Database ();
É importante notar que o método SQL.Database () aceita um parâmetro opcional data , que deve ser um Uint8Array representando um banco de dados SQLite Arquivo. Por exemplo, em Node.js, podemos carregar um arquivo .sqlite existente como abaixo:
deixe fs=require ("fs");
deixe initSqlJs=require ("./sql-wasm.js");
let filebuffer=fs.readFileSync ("/path/to/sample.sqlite"); initSqlJs (). then (função (SQL) { //Crie um novo banco de dados com nosso arquivo sample.sqlite existente const db=new SQL.Database (filebuffer);
});
No código acima, usamos os módulos Node.js fs e path integrados para ler nosso arquivo sample.sqlite existente.
Executando instruções SQL
Uma instrução SQL pode ser uma solicitação para criar ou recuperar uma informação no banco de dados ou para realizar uma operação em dados existentes.
Com SQL.js, você pode facilmente executar uma instrução sem ler seus resultados. A sintaxe está escrita abaixo:
db.run (stmt);
O parâmetro stmt é, obviamente, sua instrução SQL. Abaixo está um exemplo de como criar uma nova tabela chamada usuários com colunas para ID, nome, número de telefone e endereço em nosso banco de dados. Ele também irá inserir uma nova linha nesta tabela.
let initSqlJs=require ("./sql-wasm.js"); initSqlJs (). then (função (SQL) { const db=new SQL.Database (); //EXECUTANDO QUERIES SQL & # x1f447; db.run ("CRIAR usuários TABLE (id, nome, telefone, endereço);"); db.run ( `INSERT INTO usuários (id, nome, telefone, endereço) VALORES (1,'John Doe','+ 234-907788','12 Igodan Street, Okitipupa') ` );
});
Instruções SQL preparadas
Você pode usar instruções preparadas para executar instruções SQL iguais ou semelhantes repetidamente com alta eficiência. As instruções preparadas têm um tempo de análise muito mais curto do que a execução de instruções SQL porque a preparação na consulta é feita apenas uma vez. Eles também são muito úteis contra injeções de SQL porque você não precisa escapar dos valores dos parâmetros, que são transmitidos posteriormente usando um protocolo diferente.
Com SQL.js, também podemos escrever instruções preparadas usando o método .prepare () :
var stmt=db.prepare (readyStatement);
Abaixo está um exemplo para buscar todos os usuários com um ID entre um e 10 em nosso banco de dados anterior:
var stmt=db.prepare ("SELECT * FROM users WHERE id BETWEEN $ start AND $ end");
stmt.bind ({$ start: 1, $ end: 2}); while (stmt.step ()) { var row=stmt.getAsObject (); console.log ("Aqui está uma linha do usuário:"+ JSON.stringify (linha)); }
Depois de escrever nossas instruções SQL preparadas, usamos o método .bind () para vincular nossos valores obrigatórios de instrução ( start e end em o exemplo acima). Seguindo em frente, usaremos um loop while para retornar todas as linhas possíveis e registrá-las no console.
Grave um banco de dados no disco
SQL.js também oferece uma opção para exportar/gravar um banco de dados em disco como um arquivo .sqlite por meio do método db.export () . O resultado será retornado como um Uint8Array , e você pode usar a classe Node.js Buffer e o pacote do sistema de arquivos para gravar o banco de dados no disco:
var fs=require ("fs");
/*** Código para criar um banco de dados aqui
***/
//Exportar banco de dados & # x1f447;
dados var=db.export ();
var buffer=novo Buffer (dados);
fs.writeFileSync ("new-db.sqlite", buffer);
Depois de executar o código acima, você deve ver um novo arquivo chamado new-db.sqlite na pasta raiz do seu projeto.
Conclusão
Neste artigo, cobrimos o SQL.js, os recursos que ele oferece e como usá-lo em aplicativos do mundo real. Embora o SQL.js possa ser ótimo para construir um aplicativo offline primeiro, como um aplicativo de anotações, você pode querer considerar o uso de outros bancos de dados relacionais (MySQL, PostgreSQL) nos casos em que deseja gerenciar dados do usuário a partir de um painel de administração.
Leituras adicionais
- Introdução ao PostgreSQL e GraphQL com PostGraphile
- Acelerando seu ambiente de desenvolvimento com SQLite
- SQL.js GitHub
- Emscripten
- WebAssembly
A postagem Uma visão detalhada dos recursos básicos do SQL.js apareceu primeiro no LogRocket Blog .