¿Una biblioteca de base de datos Java simple?

Estoy buscando una biblioteca para administrar una "base de datos" en mi aplicación Java. Quiero algo simple y fácil de usar. Específicamente, estoy buscando algo que:

  • Es fácil de empezar a usar. Me gustaría tener un solo JAR para agregar a mi proyecto, y la base de datos es un solo Java File. Quiero evitar tener que configurar un servidor local o conexiones y similares. Completamente Java sin dependencias nativas sería bueno.

  • Es fácil de usar. Solo necesito almacenar una tabla con algunas cadenas y hacer consultas simples, por ejemplo. para todo en una fila específica.

  • es ligero

Básicamente estoy buscando algo para emular una especie de "tabla", como una hoja de Excel, con datos de texto.

¿Alguna biblioteca como esta?

Mi primera pregunta aquí, así que por favor sean amables :-)
Como dice la respuesta de Flimzy, debe proporcionar más información. [A] ¿Qué tipo de base de datos: archivo plano, relacional, clave-valor, documento, objeto? Si no comprende los tipos, presente ejemplos de datos pequeños pero específicos. [B] ¿La base de datos está diseñada para integrarse en la aplicación y ser utilizada solo por la aplicación, o la base de datos debe aceptar conexiones de otras aplicaciones/clientes?

Respuestas (6)

H2

Sin más información específica sobre sus necesidades, mi primer pensamiento es el proyecto Motor de base de datos H2 . H2 es una base de datos relacional de Java puro, de código abierto y sin costo que se ha desarrollado activamente durante años.

El "2" se refiere al hecho de que esta es la segunda base de datos de este tipo (Hypersonic SQL, más tarde bifurcada como HSQLDB ) construida por su autor principal, Thomas Mueller , por lo que sabe lo que hace.

Si bien H2 se puede ejecutar como un servidor, es especialmente hábil para integrarse dentro de una aplicación y puede ejecutarse con relativamente poca memoria si es necesario.

Al ser Java puro, H2 está diseñado específicamente para el acceso a JDBC . Viene incluido con su propio controlador JDBC.

El sitio web principal tiene buena documentación que incluye una descripción general de inicio rápido y un tutorial .

Deberá aprender los conceptos básicos de tablas, columnas, tipos de datos y comandos SQL. Puedes enseñarte a ti mismo. Obtener alguna tutoría de alguien familiarizado con las bases de datos relacionales reducirá drásticamente esa curva de aprendizaje.

H2 es similar a SQLite pero con más funciones. Al ser Java puro e integrable, H2 se adapta mejor a sus necesidades y probablemente sea más fácil para comenzar.

En el sitio hermano, Stack Overflow, he escrito algunas respuestas que proporcionan el código fuente para una aplicación completa de ejemplo de Java que usa H2. Así , esto , esto , esto , esto y más . _

derby

El proyecto Apache Derby es bastante similar a H2. Anteriormente conocido como IBM Cloudscape , y también conocido como "Java DB" cuando lo proporcionaba Oracle en un paquete con Java SDK.

Derby es más complicado que H2, incluido su uso como servidor. Sospecho que H2 se adapta mejor a sus necesidades.

archivos

Si todo lo que necesita son datos relativamente simples en cantidades lo suficientemente pequeñas como para guardarlas en la memoria, omita la base de datos. Almacene sus datos como texto en archivos sin formato.

Los formatos comunes para tales archivos de texto sin formato incluyen:

  • CSV , valores separados por comas.
  • TSV . Delimitado por tabulador .
  • Separadores ASCII , códigos ASCII # 28-31.
    Marcas de archivo, grupo, registro y unidad/campo). Menos común que Tab pero más sensato y flexible)

Tenga en cuenta que, si bien CSV suena simple, varios programadores han encontrado formas de mezclar las cosas con variaciones. Durante décadas, nadie se molestó en escribir una especificación hasta el RFC 4180 en 2005.

Cuando necesite estos datos, léalos en la memoria, cree instancias de objetos definiendo sus propias clases como "Persona" o "Factura", recopile esos objetos y busque esas colecciones para encontrar los objetos deseados.

Si bien es conceptualmente simple, hay muchos errores posibles. Uno de los propósitos principales de un motor de base de datos es manejar esos problemas por usted.

  • Debe asegurarse de cerrar los archivos después de usarlos, aunque al salir o fallar, la JVM debería cerrar automáticamente todos los archivos abiertos.
  • Podría considerar la corrupción de archivos. ¿Qué sucede si la aplicación se bloquea o se interrumpe de alguna otra manera en medio de la escritura de un archivo? Una forma de manejar esto es escribir un nuevo archivo y solo eliminar el antiguo después.
  • Si tiene varios subprocesos, debe protegerse contra los problemas de concurrencia. No desea que diferentes subprocesos intenten reemplazar datos para el mismo archivo al mismo tiempo.

CSV común de Apache

El proyecto Apache Commons CSV es una biblioteca gratuita de Java puro relativamente nueva para manejar la tarea de leer y escribir archivos de texto sin formato. Maneja todos los formatos mencionados, no solo CSV (a pesar de su nombre). Usé la versión 1.1 y la encontré bastante útil, robusta y confiable.

Su pregunta es demasiado amplia para responder de manera definitiva. No nos dices en absoluto qué tipo de base de datos quieres usar. ¿Necesita un RDBMS? ¿Almacén de clave/valor? ¿Algo más?

Si lo que tiene en mente es una base de datos relacional, SQLite es el estándar de facto y tiene soporte para Java (así como soporte para prácticamente todos los demás lenguajes y plataformas bajo el sol).

Gracias, intentaré mejorar mi pregunta. Básicamente estoy buscando algo para emular una especie de "tabla", como una hoja de Excel, con datos de texto. SQLite funcionaría, pero estoy buscando algo más simple.
@JonasCz: SQLite aún cumple con todos sus requisitos establecidos: no hay servidores para configurar, no hay conexiones para hacer, etc.

Puedes echar un vistazo a HeftyDB . Es un almacén rápido de clave-valor , escrito en Java, y es de código abierto.

Xodus

Según sus requisitos, creo que JetBrains Xodus es una base de datos muy elegida. Tiene tres tipos de bases de datos: un almacenamiento de clave-valor, un almacén de entidades y una base de datos para archivos y flujos.

#1 : Es muy fácil de empezar a usar. Si está utilizando maven, simplemente agregue una o dos dependencias . O también puede importar .jararchivos directamente a su proyecto.

No es necesario crear ningún servidor. Simplemente cree un instante Environmenty estará listo para comenzar. Y puede darle el nombre de su carpeta para almacenar datos.

final Environment env = Environments.newInstance("/Users/me/.myAppData");

#2 : En lugar de administrar tablas, solo puede almacenar entidades. Es muy similar a las tablas relacionales, pero mucho más fácil. Echa un vistazo aquí para saber cómo hacerlo.

final Entity user = txn.newEntity("User");
user.setProperty("login", loginName);
user.setProperty("fullName", fullName);
user.setProperty("email", email);
final String salt = MessageDigestUtil.sha256(Double.valueOf(Math.random()).toString());
user.setProperty("salt", salt);
user.setProperty("password", MessageDigestUtil.sha256(salt + password)); 

#3 : Más ligero que cualquier otra base de datos no relacional disponible. Ver su prueba de referencia .

Otra opción es MapDB . También es un almacén de clave-valor rápido y de código abierto escrito en Java.

¡La tragedia de las preguntas de alto nivel en los foros de Stack! "Recomendaciones de software" es un buen lugar pero no es muy visitado. Encontré en Stack Overflow casi la misma pregunta en algunas versiones con algunas respuestas más buenas:

tiene enlaces a artículos generales y algunas menciones adicionales:

  • NivelDB
  • berkeley DB
  • jsondb.io