Cómo persistir los datos a PostgreSQL en Java

Cómo persistir los datos a PostgreSQL en Java

Java es quizás el lenguaje de programación más utilizado hoy en día. Su robustez y naturaleza independiente de la plataforma permite que las aplicaciones basadas en Java se ejecuten en su mayoría de cualquier cosa. Como es el caso con cualquier aplicación, necesitamos almacenar nuestros datos de una manera confiable, esta necesidad llamó a las bases de datos a la vida.

En Java, las conexiones de la base de datos son implementadas por JDBC (API de conectividad de base de datos Java), que permite que el programador maneje diferentes tipos de bases de datos de la misma manera, lo que hace que nuestras vidas sean mucho más fáciles cuando necesitamos guardar o leer datos de una base de datos de una base de datos.

En este tutorial, crearemos una aplicación Java de ejemplo que podrá conectarse a una instancia de base de datos PostgreSQL y escribirá datos en ella. Para verificar que nuestra inserción de datos sea exitosa, también implementaremos leer e imprimiremos la tabla en la que insertamos datos.

En este tutorial aprenderás:

  • Cómo configurar la base de datos para la aplicación
  • Cómo importar el controlador JDBC PostgreSQL en su proyecto
  • Cómo insertar datos en la base de datos
  • Cómo ejecutar una consulta simple para leer el contenido de una tabla de base de datos
  • Cómo imprimir datos recuperados
Resultados de ejecutar la aplicación.

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Ubuntu 20.04
Software NetBeans IDE 8.2, PostgreSQL 10.12, JDK 1.8
Otro Acceso privilegiado a su sistema Linux como root o a través del sudo dominio.
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

La puesta en marcha



Para los fines de este tutorial, solo necesitamos una estación de trabajo (escritorio o computadora portátil) para instalar todos los componentes necesarios. No cubriremos la instalación de JDK, el IDE NetBeans o la instalación de la base de datos PostgreSQL en la máquina de laboratorio. Asumimos que la base de datos llamó Ejemplos de está en funcionamiento, y podemos conectarnos, leer y escribir usando la autenticación de contraseña, con las siguientes credenciales:

Nombre de usuario: ejemplo
Contraseña: Paso de ejemplo

Esta es una configuración de ejemplo, use contraseñas seguras en un escenario del mundo real! La base de datos está configurada para escuchar en localhost, que se necesitará cuando construyamos el JDBC URL de conexión.

El objetivo principal de nuestra aplicación es mostrar cómo escribir y leer desde la base de datos, por lo que para la valiosa información estamos ansiosos por persistir, simplemente elegiremos un número aleatorio entre 1 y 1000, y almacenaremos esa información con una única ID del cálculo y el momento exacto en que los datos se registran en la base de datos.

La ID y el tiempo de grabación serán proporcionados por la base de datos, que permite que nuestra aplicación funcione solo en el problema real (proporcionando un número aleatorio en este caso). Esto es a propósito, y cubriremos las posibilidades de esta arquitectura al final de este tutorial.

Configuración de la base de datos para la aplicación

Tenemos un servicio de base de datos en ejecución, y una base de datos llamó a Ejemplos de Tenemos derechos para trabajar con las credenciales mencionadas anteriormente. Para tener un lugar donde podamos almacenar nuestros datos preciosos (aleatorios), necesitamos crear una tabla y también una secuencia que proporcione identificadores únicos de una manera conveniente. Considere el siguiente script SQL:

Crear secuencia resultanteId_seq Comience con 0 incremento por 1 No MaxValue minValue 0 Cache 1; alter secuencia resultanteD_seq propietario a ejemplouser; Crear tabla Calc_Results (Key primaria numérica predeterminada NextVal ('resultAd_seq' :: RegClass), resultado_of_calculación numérica no nulo, registro_date timestamp predeterminado ahora ()); alter tabla calc_results propietario a ejemplouser; 
Copiar

Estas instrucciones deberían hablar por sí mismas. Creamos una secuencia, establecemos el propietario en ejemplo, Crea una tabla llamada calc_results (defender "resultados de cálculo"), establecer residuos para llenarse automáticamente con el siguiente valor de nuestra secuencia en cada inserto, y definir result_of_calculation y grabar fecha columnas que almacenarán nuestros datos. Finalmente, el propietario de la mesa también está configurado para ejemplo.

Para crear estos objetos de base de datos, cambiamos a post -put usuario:

$ sudo Su - Postgres

Y ejecute el script (almacenado en un archivo de texto llamado table_for_java.sql) en contra de Ejemplos de base de datos:

$ PSQL -D EXAMPLEDB < table_for_java.sql CREATE SEQUENCE ALTER SEQUENCE CREATE TABLE ALTER TABLE

Con esto, nuestra base de datos está lista.

Importación del controlador JDBC PostgreSQL en el proyecto



Para crear la aplicación, usaremos NetBeans IDE 8.2. Los primeros pasos son el trabajo manual. Elegimos el menú de archivos, creamos un nuevo proyecto. Dejaremos los valores predeterminados en la página siguiente del asistente, con categoría de "Java" y proyecto en "Aplicación Java". Presionaremos a continuación. Le damos un nombre a la aplicación (y opcionalmente definimos una ubicación no predeterminada). En nuestro caso se llamará persisttopostgres. Esto hará que el IDE cree un proyecto de Java base para nosotros.

En el panel de proyectos, hacemos clic con el botón derecho en "Bibliotecas" y seleccionamos "Agregar biblioteca ...". Aparecerá una nueva ventana, donde buscamos y seleccionamos el controlador JDBC PostgreSQL, y la agregará como una biblioteca.

Agregar el controlador JDBC PostgreSQL al proyecto.

Comprender el código fuente

Ahora agregamos el siguiente código fuente a la clase principal de nuestra aplicación, Persisttopostgres:

paquete persistTopostgres; importar java.sql.Conexión; importar java.sql.Drivermanager; importar java.sql.Conjunto resultante; importar java.sql.Sqlexception; importar java.sql.Declaración; importar java.utilizar.concurrente.ThreadLocalrandom; clase pública PersistToPostgres public static void main (string [] args) int result = ThreadLocalRandom.actual().nextint (1, 1000 + 1); Sistema.afuera.println ("El resultado del cálculo difícil de resolver es:" + resultado); Sistema.afuera.println ("----- PostgreSQL JDBC PRUEBA DE CONEXIÓN ------"); Prueba clase.FORNIMIR ("Org.postgresql.Controlador "); Catch (ClassNotFoundException CNFE) Sistema.afuera.println ("Sin controlador JDBC PostgreSQL en la ruta de la biblioteca!"); CNFE.printStackTrace (); devolver;  Sistema.afuera.println ("PostgreSQL JDBC Driver registrado!"); Conexión conn = null; try conn = Drivermanager.getConnection ("JDBC: Postgresql: // localhost: 5432/exampledb", "Ejemplo User", "EjemploPass");  Catch (SQLException SQLE) Sistema.afuera.println ("Falló la conexión! Verifique la consola de salida "); SQLE.printStackTrace (); devolver;  if (Conn != nulo) sistema.afuera.println ("Conexión de base de datos establecida"); // consulta de construcción prueba Declaración st = Conn.createStatement (); calle.ExecuteUpdate ("insertar en valores de calc_results (result_of_calculation) (" + resultado + ")"); ResultSet RS = ST.EjecuteQuery ("Seleccione residente, resultado_of_calculation, registro_date de calc_results"); Sistema.afuera.println ("Los resultados registrados en EjempledB siguen: \ n ----------------------- \ n"); Mientras (RS.next ()) sistema.afuera.println (RS.getString ("residente") + "\ t" + rs.getString ("result_of_calculation") + "\ t" + rs.getString ("Record_date"));  // limpiar en salida st.cerca(); conn.cerca();  Catch (SQLException SQLE2) Sistema.afuera.println ("Error en la consulta"); sqle2.printStackTrace ();  else sistema.afuera.println ("No se pudo hacer la conexión!"); 
Copiar

  • En la línea 12 calculamos un número aleatorio y lo almacenamos en el resultado variable. Este número representa el resultado de un cálculo pesado que
    Necesitamos almacenar en la base de datos.
  • En la línea 15 intentamos registrar el controlador JDBC PostgreSQL. Esto dará como resultado un error si la aplicación no encuentra el controlador en tiempo de ejecución.
  • En la línea 26, construimos la cadena de conexión JDBC usando el nombre de host, la base de datos se ejecuta en (localhost), el puerto en la base de datos en el que escucha (5432, el puerto predeterminado para PostgreSQL), el nombre de la base de datos (EjempledB) y las credenciales mencionadas en el comienzo.
  • En la línea 37 ejecutamos el insertar en Instrucción SQL que inserta el valor del resultado variable en el result_of_calculation columna del calc_results mesa. Solo especificamos el valor de estas columnas individuales, por lo que se aplican los valores predeterminados: residuos se obtiene de la secuencia que
    establecer, y grabar fecha predeterminado a ahora(), ¿Cuál es el tiempo de la base de datos en el momento de la transacción?.
  • En la línea 38 construimos una consulta que devolverá todos los datos contenidos en la tabla, incluido nuestro inserto en el paso anterior.
  • De la línea 39 presentamos los datos recuperados imprimiéndolo de manera similar a una mesa, recursos liberados y salidas.

Ejecutando la aplicación

Ahora podemos limpiar, construir y ejecutar el persisttopostgres Aplicación, desde el IDE en sí o desde la línea de comandos. Para ejecutar desde el IDE, podemos usar el botón "Ejecutar proyecto" en la parte superior. Para ejecutarlo desde la línea de comando, necesitamos navegar hasta el distrito directorio del proyecto e invoca el JVM con el FRASCO Paquete como argumento:

$ java -jar persisttopostgres.El resultado del JAR del cálculo difícil de resolver es: 173 ----- Postgresql Prueba de conexión JDBC ------ Conexión de la base de datos Los resultados establecidos en EjempledB siguen: ------------- ---------- 0 145 2020-05-31 17:40:30.974246

Las ejecuciones de la línea de comando proporcionarán la misma salida que la consola IDE, pero lo que es más importante aquí es que cada ejecución (ya sea desde el IDE o la línea de comando) insertará otra fila en nuestra tabla de base de datos con el número aleatorio dado calculado en cada uno correr.

Es por eso que también veremos un número creciente de registros en la salida de la aplicación: cada ejecución crece la tabla con una fila. Después de algunas ejecuciones, veremos una larga lista de filas de resultados en la tabla.

La salida de la base de datos muestra los resultados de cada ejecución de la aplicación.

Conclusión

Si bien esta simple aplicación apenas tiene un uso del mundo real, es perfecto para demostrar algunos aspectos reales importantes. En este tutorial, dijimos que hacemos un cálculo importante con la aplicación e insertamos un número aleatorio cada vez, porque el propósito de este tutorial es mostrar cómo persistir los datos. Este objetivo que completamos: con cada ejecución, la aplicación sale y los resultados de los cálculos internos se perderían, pero la base de datos conserva los datos.

Ejecutamos la aplicación a partir de una sola estación de trabajo, pero si realmente necesitamos resolver algunos cálculos complicados, solo tendríamos que cambiar la URL de la base de datos para apuntar a una máquina remota que ejecuta la base de datos, y podríamos iniciar el cálculo en múltiples computadoras Al mismo tiempo, creando cientos o miles de casos de esta aplicación, tal vez resolviendo pequeñas piezas de un rompecabezas mayor, y almacene los resultados de una manera persistente, lo que nos permite escalar nuestra potencia informática con unas pocas líneas de código y un poco de planificación.

Por qué se necesita planificar? Para permanecer con este ejemplo: si no dejáramos la asignación de identificadores de fila o una campaña de tiempo a la base de datos, nuestra aplicación habría sido mucho más grande, mucho más lenta y mucho más llena de errores, algunos de ellos solo surgen cuando ejecutamos dos instancias de la Aplicación en el mismo momento.

Tutoriales de Linux relacionados:

  • Ubuntu 20.04 Instalación de PostgreSQL
  • Ubuntu 22.04 Instalación de PostgreSQL
  • Cómo evitar la comprobación de conectividad de NetworkManager
  • Cosas para instalar en Ubuntu 20.04
  • Cómo trabajar con la API REST de WooCommerce con Python
  • Cómo verificar la duración de la batería en Ubuntu
  • Programador EEPROM CH341A: lea y escriba datos para chips en ..
  • Cosas para instalar en Ubuntu 22.04
  • Instalación de Oracle Java en Ubuntu 20.04 fossa focal Linux
  • Cómo instalar Java en Manjaro Linux