Java y SQLite

Me atrae la pulcritud que proporciona una sola base de datos de archivos. Qué biblioteca de controladores / conectores está disponible para conectarse y usar SQLite con Java.

He descubierto una biblioteca contenedora, http://www.ch-werner.de/javasqlite , pero ¿hay otros proyectos más destacados disponibles?

La wiki enumera algunas envolturas más:

Encontré tu 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 otras aplicaciones 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 archivo JAR 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 y lo leerá y mostrará en la 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(); } } 

Entiendo que usted pidió específicamente sobre SQLite, pero tal vez la base de datos HSQL se ajustaría mejor a 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.

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.

El proyecto de David Crawshaw (sqlitejdbc-v056.jar) parece desactualizado y la última actualización fue el 20 de junio de 2009, fuente aquí

Yo recomendaría el tenedor Xerials del contenedor sqlite de Crawshaw. Reemplacé sqlitejdbc-v056.jar con Xerials sqlite-jdbc-3.7.2.jar sin ningún problema.

Utiliza la misma syntax que en la respuesta de Bernie y es mucho más rápido y con la última biblioteca sqlite.

¿Qué es diferente de SQLite JDBC de Zentus?

El controlador SQLite JDBC original de Zentus http://www.zentus.com/sqlitejdbc/ es una excelente utilidad para usar bases de datos SQLite del lenguaje Java, y nuestra biblioteca SQLiteJDBC también se basa en 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 utiliza binarios SQLite comstackdos para cada sistema operativo (win, mac, linux).

Para usar 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 progtwigs JNDI C) mediante el uso de argumentos de línea de comandos, por ejemplo, -Djava.library.path = (ruta al dll, jnilib, etc.) o -Dorg.sqlite.lib.path, etc. Este proceso era 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 mantenemos esta biblioteca SQLiteJDBC actualizada a la última versión del motor SQLite, porque somos uno de los usuarios más populares de esta biblioteca. Por ejemplo, SQLite JDBC es un componente central del Toolkit UTGB (University of Tokyo Genome Browser), que es nuestra utilidad para crear navegadores de genoma personalizados.

EDITAR : como de costumbre cuando actualizas algo, habrá problemas en algún lugar oscuro en tu código (me pasó a mí). Test test test =)

La publicación de Bernie es muy útil. No se pudo votar (no tengo suficiente reputación :(). Pero me ayudó mucho. ¡Solo para reiterar!

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

Aquí puede encontrar el último jarrón JDBC de SQLite. ¡Solo agrega el jar a 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 ayuda sobre la syntax SQL para SQLite. Saludos a SQLite 🙂

Cuando comstack y ejecuta el código, debe establecer el valor de las opciones de classpath. Al igual que el siguiente:

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

Por favor, preste atención a “.” y lo separado “;” (win, el linux es “:”)

El 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.

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

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

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

fíjense en el punto y coma después de “.jar”, espero que ayude a las personas, podría causar muchas molestias