Java e SQLite

Eu sou atraído pela limpeza que um único database de arquivos oferece. Qual biblioteca de drivers / conectores está disponível para se conectar e usar o SQLite com o Java.

Eu descobri uma biblioteca wrapper, http://www.ch-werner.de/javasqlite , mas existem outros projetos mais proeminentes disponíveis?

O wiki lista mais alguns wrappers:

Eu encontrei sua pergunta enquanto procurava por informações com SQLite e Java. Apenas pensei em adicionar minha resposta, que também postei no meu blog .

Eu tenho codificado em Java por um tempo agora. Eu também conheci o SQLite, mas nunca o usei… Bem, eu o usei através de outros aplicativos, mas nunca em um aplicativo que eu codifiquei. Então eu precisei de um projeto esta semana e é um uso tão simples!

Eu encontrei um driver Java JDBC para SQLite. Basta adicionar o arquivo JAR ao seu classpath e importar java.sql. *

Seu aplicativo de teste criará um arquivo de database, enviará alguns comandos SQL para criar uma tabela, armazenará alguns dados na tabela e os lerá novamente no console. Ele criará o arquivo test.db no diretório raiz do projeto. Você pode executar este exemplo com java -cp .:sqlitejdbc-v056.jar Test .

 package com.rungeek.sqlite; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class Test { public static void main(String[] args) throws Exception { Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db"); Statement stat = conn.createStatement(); stat.executeUpdate("drop table if exists people;"); stat.executeUpdate("create table people (name, occupation);"); PreparedStatement prep = conn.prepareStatement( "insert into people values (?, ?);"); prep.setString(1, "Gandhi"); prep.setString(2, "politics"); prep.addBatch(); prep.setString(1, "Turing"); prep.setString(2, "computers"); prep.addBatch(); prep.setString(1, "Wittgenstein"); prep.setString(2, "smartypants"); prep.addBatch(); conn.setAutoCommit(false); prep.executeBatch(); conn.setAutoCommit(true); ResultSet rs = stat.executeQuery("select * from people;"); while (rs.next()) { System.out.println("name = " + rs.getString("name")); System.out.println("job = " + rs.getString("occupation")); } rs.close(); conn.close(); } } 

Eu entendo que você perguntou especificamente sobre SQLite, mas talvez database HSQL seria um melhor ajuste com Java. Ele é escrito no próprio Java, é executado na JVM, suporta tabelas na memory, etc., e todos esses resources o tornam bastante útil para prototipagem e teste de unidade.

Existe um novo projeto SQLJet que é uma implementação Java pura do SQLite. Ele não suporta todos os resources do SQLite, mas pode ser uma boa opção para alguns dos projetos Java que trabalham com bancos de dados SQLite.

O projeto de David Crawshaw (sqlitejdbc-v056.jar) parece desatualizado e a última atualização foi em 20 de junho de 2009, fonte aqui

Eu recomendaria garfo Xerials de wrapper sqlite Crawshaw. Eu substitui sqlitejdbc-v056.jar com o arquivo Xerials sqlite-jdbc-3.7.2.jar sem qualquer problema.

Usa a mesma syntax da resposta do Bernie e é muito mais rápida e com a mais recente biblioteca sqlite.

O que é diferente do SQLite JDBC da Zentus?

O driver JDBC SQLite da Zentus original http://www.zentus.com/sqlitejdbc/ em si é uma excelente utilidade para usar bancos de dados SQLite da linguagem Java, e nossa biblioteca SQLiteJDBC também depende de sua implementação. No entanto, sua versão pure-java, que traduz totalmente códigos c / c ++ de SQLite para Java, é significativamente mais lenta em comparação com sua versão nativa, que usa binários SQLite compilados para cada SO (win, mac, linux).

Para usar a versão nativa do sqlite-jdbc, o usuário tinha que definir um caminho para os códigos nativos (dll, jnilib, arquivos, que são programas JNDI C) usando argumentos de linha de comando, por exemplo, -Djava.library.path = (caminho para a dll, jnilib, etc.), ou -Dorg.sqlite.lib.path, etc. Esse processo era propenso a erros e incômodo para dizer a cada usuário para configurar essas variables. Nossa biblioteca SQLiteJDBC elimina completamente esses inconvenientes.

Outra diferença é que estamos mantendo esta libra SQLiteJDBC atualizada para a versão mais recente do mecanismo SQLite, porque somos um dos usuários mais ativos dessa biblioteca. Por exemplo, SQLite JDBC é um componente central do Toolkit UTGB (Universidade de Tóquio Genome Browser), que é nosso utilitário para criar navegadores de genoma personalizados.

EDIT : Como de costume quando você atualizar alguma coisa, haverá problemas em algum lugar obscuro no seu código (aconteceu comigo). Teste de teste =)

O post de Bernie é muito útil. Não foi possível votar (não tenho reputação suficiente :() Mas ajudou muito Só para reiterar!

http://www.zentus.com/sqlitejdbc/

Aqui você pode encontrar o último jar JDBC SQLite. Basta adicionar o jar no seu classpath e pronto! 🙂 Você pode executar o código de exemplo de Bernie para testar se está tudo bem.

http://www.sqlite.org/lang.html

Aqui você pode encontrar alguma ajuda sobre a syntax SQL para o SQLite. Felicidades ao SQLite 🙂

Quando você compilar e executar o código, você deve definir o valor de opções de caminho de class. Assim como o seguinte:

 javac -classpath .;sqlitejdbc-v056.jar Text.java java -classpath .;sqlitejdbc-v056.jar Text 

Por favor, preste atenção para “.” e o sparate “;” (win, o linux é “:”)

O código sqlitejdbc pode ser baixado usando o git em https://github.com/crawshaw/sqlitejdbc .

 # git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc ... # cd sqlitejdbc # make 

Nota: Makefile requer o curl binário para fazer o download de bibliotecas / deps do sqlite.

O código de exemplo leva a um memory leaks no Tomcat (depois de outofmemory , o carregador de class ainda permanece na memory), o que causará uma outofmemory final. A maneira de resolvê-lo é usar o sqlite-jdbc-3.7.8.jar ; é um instantâneo, então ele não aparece para o maven ainda.

java -cp .:sqlitejdbc-v056.jar Test : java -cp .:sqlitejdbc-v056.jar Test

deve ser: java -cp .:sqlitejdbc-v056.jar; Test java -cp .:sqlitejdbc-v056.jar; Test

notar o ponto-e-vírgula depois de “.jar” espero que ajude as pessoas, poderia causar um monte de problemas