Java e SQLite [fechado]


333

Sinto-me atraído pela limpeza que um único banco de dados de arquivo fornece. Qual biblioteca de drivers / conectores existe para conectar e usar o SQLite com Java.

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


10
Eu amo que uma pergunta com centenas de votos positivos e respostas com centenas de votos positivos seja encerrada como "fora de tópico". É uma espécie de embaraçoso, lol
Andrew Koster

Respostas:


196

O wiki lista mais alguns wrappers:


7
Minha adição a esta lista é sqlite4java - code.google.com/p/sqlite4java - é um invólucro (sem JDBC); pré-compilado para Windows, Mac, Linux. É simples de usar e aplica alguns contratos para ajudar o desenvolvedor a evitar o mau uso do SQLite.
sereda

7
sqlite4java parece interessante, mas eles também têm uma grande comparação dos vários invólucros fora lá: code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers
Scott Bennett-McLeish

1
@kdt o problema que eu encontrei com o motorista zentus é que ele não parece apoiar BLOB de em tudo
Martijn

12
@Martijn xerial.org/trac/Xerial/wiki/SQLiteJDBC é uma bifurcação do driver do zentus e suporta BLOB (há um pequeno tutorial em seu site).
precisa saber é o seguinte


247

Encontrei sua pergunta ao procurar 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 conhecia o SQLite, mas nunca o usei ... Bem, eu o usei em outros aplicativos, mas nunca em um aplicativo que eu codifiquei. Então, eu precisava dele para um projeto esta semana e é de uso tão simples!

Encontrei um driver Java JDBC para SQLite. Basta adicionar o arquivo JAR ao seu caminho de classe e importar java.sql. *

Seu aplicativo de teste criará um arquivo de banco de dados, enviará alguns comandos SQL para criar uma tabela, armazenará alguns dados na tabela e os lerá novamente e será exibido 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();
    }
  }

1
É por isso que eu acho que Joel estava falando besteira (google tech talk: youtube.com/watch?v=NWHfY_lvKIQ ) ao dizer que o design do stackoverflow.com é melhor por causa de todas as postagens "antigas" na Internet. É apenas uma repetição.
Nikolaos

26
Observe também que o projeto Crawshaw parece em hiato, mas foi bifurcada e atualizado aqui: xerial.org/trac/Xerial/wiki/SQLiteJDBC
Lapo

8
zentus.com parece quebrado, encontrou um espelho aqui; priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/about.htm
Daniel Magnusson

3
Obrigado @DanielMagnusson, você salva a vida. Enquanto estiver no tópico, qualquer um que ainda estiver procurando pelo driver sqliteJDBC pode acessar priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/…, pois o link ao about.htm está incorreto.
javatarz


30

Entendo que você perguntou especificamente sobre SQLite, mas talvez o banco de dados HSQL seja mais adequado ao Java. Ele é escrito no próprio Java, é executado na JVM, suporta tabelas na memória etc., e todos esses recursos o tornam bastante utilizável para prototipagem e teste de unidade.


3
Sim, o HSQL é uma escolha muito boa e eu o usei bastante em alguns aplicativos clientes para obter um bom efeito. Nesse caso, no entanto, eu realmente queria usar o SQLite.
Scott Bennett-McLeish

18

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

Eu recomendaria Xerials fork de invólucro de sqlite Crawshaw. Substituí o sqlitejdbc-v056.jar pelo arquivo Xerials sqlite-jdbc-3.7.2.jar sem nenhum problema.

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

O que é diferente do SQLite JDBC do Zentus?

O driver SQLite JDBC original do Zentus, http://www.zentus.com/sqlitejdbc/ , é um excelente utilitário para o uso de bancos de dados SQLite da linguagem Java, e nossa biblioteca SQLiteJDBC também conta com sua implementação. No entanto, sua versão em java puro, que traduz totalmente os códigos c / c ++ do SQLite em Java, é significativamente mais lenta em comparação à sua versão nativa, que usa binários SQLite compilados para cada sistema operacional (win, mac, linux).

Para usar a versão nativa do sqlite-jdbc, o usuário teve que definir um caminho para os códigos nativos (dll, jnilib, so files, 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 foi propenso a erros e incômodo dizer a todos os usuários para definir essas variáveis. Nossa biblioteca SQLiteJDBC elimina completamente esses inconvenientes.

Outra diferença é que estamos mantendo esta biblioteca de bibliotecas SQLiteJDBC atualizada para a versão mais recente do mecanismo SQLite, porque somos um dos usuários mais populares desta biblioteca. Por exemplo, o SQLite JDBC é um componente principal do UTGB (University of Tokyo Genome Browser) Toolkit, que é nosso utilitário para criar navegadores de genoma personalizados.

EDIT : Como sempre, quando você atualiza algo, haverá problemas em algum lugar obscuro do seu código (aconteceu comigo). Teste teste teste =)


1
O sqlite-jdbcprojeto é excelente, mas saiba que é licenciado pela Apache . Portanto, você deve atribuir a atribuição, se o usar, seja seu código FOSS ou proprietário.
dotancohen

16

Há um novo projeto SQLJet que é uma implementação Java pura do SQLite. Ainda não suporta todos os recursos do SQLite, mas pode ser uma opção muito boa para alguns dos projetos Java que funcionam com bancos de dados SQLite.


4
Parece promissor, mas parece que ainda não oferece uma capacidade de consulta SQL, uma espécie de quebra de negócio para mim.
22330 Scott Bennett-McLeish

Ainda não suporta consultas SQL, mas uma API de nível inferior.
Basel Shishani

Ainda é muito útil para aplicativos em que você só precisa gerar arquivos SQLite, ou seja, não precisa do SQL para consultar os dados.
O Alquimista

5

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

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

Aqui você encontra o mais recente jar SQLite JDBC. Basta adicionar o jar no seu caminho de classe e pronto! :) Você pode executar o código de exemplo de Bernie para testar se está tudo bem.

http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html http://www.sqlite.org/lang.html

Aqui você pode encontrar ajuda sobre a sintaxe SQL para SQLite. Saúde para SQLite :)


3

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

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

java -classpath .;sqlitejdbc-v056.jar Text

Por favor, preste atenção em "." e o sparate ";" (vitória, o linux é ":")


3

O código do 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 curl binary para baixar bibliotecas / deps sqlite.


2

O código de exemplo leva a um vazamento de memória no Tomcat (depois de desimplementar o aplicativo da web, o carregador de classes ainda permanece na memória), o que causará outofmemoryeventualmente. A maneira de resolver isso é usando o sqlite-jdbc-3.7.8.jar ; é um instantâneo, por isso ainda não aparece para o maven.


0

Erro de digitação: java -cp .:sqlitejdbc-v056.jar Test

deveria estar: java -cp .:sqlitejdbc-v056.jar; Test

observe o ponto-e-vírgula após ".jar", espero que ajude as pessoas, possa causar muitos problemas


Cuidado ao elaborar? Em * nix o; separará o java do comando Test (e, portanto, criará um erro). No Windows, o: não funcionará como um separador cp. Então, apesar de tudo .:xxx.jar;, não faz sentido. E você também precisa especificar o nome do pacote para a classe Test.
Eckes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.