2008-09-03 22 views

Respuesta

188

Los wiki enumera algunas envolturas más:

+6

Mi adición a esta lista es sqlite4java - http://code.google.com/p/sqlite4java - es un contenedor (no JDBC); precompilado para Windows, Mac, Linux. Es simple de usar e impone algunos contratos para ayudar al desarrollador a evitar el uso indebido de SQLite. – sereda

+6

sqlite4java parece interesante, pero también tienen una gran comparación de los diversos contenedores disponibles: http://code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers –

+1

@kdt El problema que encontré con el controlador zentus es que no parece ser compatible con BLOB en absoluto – Martijn

236

Encontré su pregunta mientras buscaba información con SQLite y Java. Solo pensé en agregar mi respuesta que también publiqué en mi blog.

He estado codificando en Java desde hace un tiempo. También he sabido sobre SQLite pero nunca lo he usado ... Bueno, lo he usado a través de otros applications pero nunca en una aplicación que he codificado. ¡Así que lo necesité para un proyecto esta semana y es un uso tan simple!

Encontré un controlador Java JDBC para SQLite. Simplemente agregue el JAR file a su classpath e importe java.sql. *

Su aplicación de prueba creará un archivo de base de datos, enviará algunos comandos SQL para crear una tabla, almacenará algunos datos en la tabla, lo leerá y mostrará en consola. Creará el archivo test.db en el directorio raíz del proyecto. Puede ejecutar este ejemplo con 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(); 
    } 
    } 
+8

Estoy continuamente sorprendido de cómo las publicaciones más antiguas pueden ser increíblemente útiles, como esta. +1 –

+1

Es por eso que creo que Joel estaba hablando toro (Google tech talk: http: //www.youtube.com/watch? v = NWHfY_lvKIQ) cuando se dice que el diseño de stackoverflow.com es mejor debido a todas las publicaciones "antiguas" que se publican en Internet. Es solo un refrito. – Nikolaos

+26

Observe también que el proyecto Crawshaw parece estar en pausa, pero se bifurcó y se actualizó aquí: http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC – lapo

28

entiendo que pidió específicamente sobre SQLite, pero tal vez HSQL database habría un mejor ajuste con Java. Está escrito en Java, se ejecuta en la JVM, admite tablas en memoria, etc. y todas las características lo hacen bastante útil para prototipos y pruebas unitarias.

+1

Sí HSQL es una muy buena opción y la he usado bastante extensamente en un par de aplicaciones cliente para obtener buenos resultados. Sin embargo, en esta instancia, realmente quería usar SQLite. –

15

Hay un nuevo proyecto SQLJet que es una implementación Java pura de SQLite. Todavía no es compatible con todas las funciones de SQLite, pero puede ser una muy buena opción para algunos de los proyectos de Java que funcionan con bases de datos SQLite.

+3

Parece prometedor, pero parece que todavía no ofrece una capacidad de consulta SQL, algo así como un factor decisivo para mí. –

+0

Aún no admite consultas SQL, sino una API de nivel inferior. –

4

La publicación de Bernie es muy útil. No se puede votar hasta (no tienen suficiente reputación :(). Pero ayudado mucho. Sólo para reiterar!

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

Aquí puede encontrar las últimas frasco SQLite JDBC. Sólo tiene que añadir el vaso en su usted classpath y listo! :) Puede ejecutar el código de muestra de Bernie para probar si todo está bien.

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

Aquí puede encontrar un poco de ayuda en la sintaxis SQL para SQLite. Saludos a SQLite :)

+0

¡Cuidado, sin soporte BLOB! – Martijn

1

El código de ejemplo lleva a una pérdida de memoria en Tomcat (después de la desinstalación de la aplicación web, el cargador de clases aún permanece en la memoria) que causará un outofmemory finalmente. La forma de resolverlo es usar el sqlite-jdbc-3.7.8.jar; es una instantánea, por lo que aún no aparece para maven.

0

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

debería ser: java -cp .:sqlitejdbc-v056.jar; Test

aviso del punto y coma después de ".jar" espero que ayuda a las personas, podría causar un montón de problemas

+0

¿Cuidar para elaborar? En * nix el; separará java del comando Test (y, por lo tanto, creará un error). En Windows: no funcionará como un separador de cp. Así que, en general, '.: Xxx.jar;' no tiene sentido. Y también debe especificar el nombre del paquete para la clase de prueba. – eckes

2

Al compilar y ejecutar el código , debe establecer el valor de las opciones de classpath. Al igual que la siguiente:

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

java -classpath .;sqlitejdbc-v056.jar Text 

preste atención a "" y la sparate ";" (Win, Linux es el ":")

15

proyecto David Crawshaw (SQLiteJDBC-v056.jar) parece fuera de fecha y última actualización fue el 20 de Jun, 2009 source here

lo haría recomend Xerials fork de Crawshaw sqlite wrapper. Reemplacé sqlitejdbc-v056.jar con Xerials sqlite-jdbc-3.7.2.jar sin ningún problema.

Utiliza la misma sintaxis que en Bernie's answer y es mucho más rápido y con la última biblioteca sqlite.

¿Qué es diferente de SQLite JDBC de Zentus?

El controlador JDBC de SQLite Zentus originales http://www.zentus.com/sqlitejdbc/ sí mismo es una excelente utilidad para utilizando bases de datos SQLite desde el lenguaje Java, y nuestra biblioteca SQLiteJDBC también depende de su implementación. Sin embargo, su versión de Java puro, que traduce totalmente los códigos c/C++ de SQLite en Java, es significativamente más lenta en comparación con su versión nativa, que usa los binarios SQLite compilados para cada sistema operativo (win, mac, linux).

Para utilizar la versión nativa de sqlite-JDBC, el usuario tenía que establecer una ruta a los códigos nativos (DLL, jnilib, por lo que los archivos, que son programas en C JNDI) por utilizando argumentos de línea de comandos, por ejemplo, - Djava.library.path = (ruta al dll, jnilib, etc.), o -Dorg.sqlite.lib.path, etc. Este proceso fue propenso a errores y molesto para decirle a cada usuario que establezca estas variables. Nuestra biblioteca SQLiteJDBC elimina por completo estos inconvenientes.

Otra diferencia es que estamos manteniendo esta libray SQLiteJDBC hasta a la fecha a la nueva versión del motor de SQLite, porque somos uno de los usuarios más calientes de esta biblioteca. Por ejemplo, SQLite JDBC es un componente central de de UTGB (University of Tokyo Genome Browser) Toolkit, , que es nuestra utilidad para crear navegadores de genoma personalizados.

EDITAR: Como es habitual cuando se actualiza algo, no habrá problemas en algún lugar oscuro en su código (que me pasó). Test test test =)

+1

El proyecto 'sqlite-jdbc' es genial, pero tenga en cuenta que es [Apache licensed] (http://www.apache.org/licenses/LICENSE-2.0.txt). Por lo tanto, debe otorgar atribución si la usa, ya sea que su código sea FOSS o de propiedad. – dotancohen

2

código sqlitejdbc se puede descargar usando git desde https://github.com/crawshaw/sqlitejdbc.

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

Nota: Makefile requiere curl binary para descargar bibliotecas/deps de sqlite.