Estou ouvindo muito falar do SQLite esses dias, para os desinformados:
SQLite é uma biblioteca em linguagem C que implementa um banco de dados SQL embutido. Programas que usam a biblioteca SQLite podem ter acesso a banco de dados SQL sem executar um processo RDBMS separado.
Atualmente o SQLite possui várias extensões para várias linguagens, eu como programador Java, logicamente, escolhi uma que se adeque a linguagem que uso.
Primeiramente precisei encontrar uma maneira de usar o SQLite no Java, já que o SQLite é escrito para C/C++. Existem vários, eu escolhi o sqlite4Java por ser o mais atual no momento em que escrevo esse post.
Depois de encontrado, fiz o download de apenas 2.9MB de um arquivo zipado. Dentro do arquivo encontrei um jar, um zip com o código fonte,outro zip com a documentação e várias bibliotecas pré-compiladas, tanto pra Linux, como pra Mac OS e Windows.
Para usar lembre-se de adicionar o sqlite4.java ao seu classpath e deixar os arquivos das bibliotecas pré-compiladas na mesma pasta.
Criando uma conexão com o banco
public class TesteSQLite{
public SQLiteConnection criarConexao() throws SQLiteException{
SQLiteConnection conn = null;
conn = new SQLiteConnection(new File("pessoas.db"));
conn.open();
return db;
}
Criando uma tabela e executando comandos DDL
public static void criarTabela() {
SQLiteConnection conn = null;
String SQL = "DROP TABLE IF EXISTS pessoas ;CREATE TABLE pessoas("
+ "nome VARCHAR(10),sobrenome VARCHAR(20))";
try {
conn = createConnection();
conn.exec(SQL);
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
conn.dispose();
}
}
O método exec executa um comandos DDL ou DML sem parâmetros
Populando a tabela e outros comandos
public static void adicionarDados() { SQLiteConnection conn = null; SQLiteStatement stmt = null; String SQL = "INSERT INTO pessoas VALUES (?,?)"; try { conn = createConnection();stmt = conn.prepare(SQL); stmt.bind(1, "Demétrio"); stmt.bind(2, "Menezes Neto");stmt.step(); } catch (SQLiteException e) { e.printStackTrace(); } finally { stmt.dispose(); conn.dispose(); } }
Aqui temos mais alguns métodos como o prepare(String sql),o bind(int index, valor)* e o método step(),o primeiro retorna algo similar ao PreparedStatement, o segundo envia um valor como parâmetro, lembra bastante os sets do PreparedStatement e o ultimo serve como executa qualquer outro tipo de comando SQL.
* Esse método é sobrecarregado várias vezes, se adequando a vários tipos de valor.
Realizando a consulta
Podemos realizar uma consulta simplemente fazendo um while(stmt.step()), assim ele irá realizar a consulta e pegar os dados resultantes da mesma através dos metodos columnString(int numerodacoluna),pois os dados são strings, caso fossem inteiros seria columnInt(int numerodacoluna).
public static void imprimirDados() {
SQLiteConnection conn = null;
SQLiteStatement stmt = null;
String SQL = "SELECT * FROM pessoas";
String formato = "%s\t\t|%s\t\n";
try {
conn = createConnection();
stmt = conn.prepare(SQL);
System.out.printf(formato, stmt.getColumnName(0).toUpperCase(),
stmt.getColumnName(1).toUpperCase());
formato = "%s\t|%s\t\n";
while (stmt.step()) {
System.out.printf(formato, stmt.columnString(0), stmt.columnString(1));
}
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
stmt.dispose();
conn.dispose();
}
}
Aqui vemos outro tipo de uso do step(), que agora serve como uma espécia de iterador.
Testando o código
public static void main(String args[]) {
criarTabela();
adicionarDados();
imprimirDados();
}
}
Essa foi minha breve explicação de como o Java funciona com o SQLite através do sqlite4java, qualquer dúvida existente é só deixar um comentário.