postgresql
Conéctate a PostgreSQL desde Java
Buscar..
Introducción
La API para usar una base de datos relacional de Java es JDBC.
Esta API es implementada por un controlador JDBC.
Para usarlo, coloque el archivo JAR con el controlador en la ruta de la clase JAVA.
Esta documentación muestra ejemplos de cómo utilizar el controlador JDBC para conectarse a una base de datos.
Observaciones
URL de JDBC
La URL de JDBC puede tomar una de estas formas:
jdbc:postgresql:// host [: port ]/[ database ][ parameters ]
host
defecto eslocalhost
,port
a 5432.
Si elhost
es una dirección IPv6, debe estar entre corchetes.
El nombre predeterminado de la base de datos es el mismo que el nombre del usuario que se conecta.Para implementar la conmutación por error, es posible tener varias entradas de
host [: port ]
separadas por una coma.
Se prueban a su vez hasta que una conexión tiene éxito.jdbc:postgresql: database [ parameters ]
jdbc:postgresql:/[ parameters ]
Estas formas son para conexiones a
localhost
.
parameters
es una lista de pares key [= value ]
, encabezados por ?
y separados por &
. Si falta el value
, se asume que es true
.
Un ejemplo:
jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidatingFactory
Referencias
- Especificación JDBC: http://download.oracle.com/otndocs/jcp/jdbc-4_2-mrel2-eval-spec/
- Controlador JDBC de PostgreSQL: https://jdbc.postgresql.org/
- Documentación del controlador JDBC de PostgreSQL: https://jdbc.postgresql.org/documentation/head/index.html
Conectando con java.sql.DriverManager
Esta es la forma más sencilla de conectarse.
Primero, el controlador debe estar registrado con java.sql.DriverManager
para que sepa qué clase usar.
Esto se hace cargando la clase de controlador, generalmente con java.lang.Class.forname( <driver class name> )
.
/**
* Connect to a PostgreSQL database.
* @param url the JDBC URL to connect to; must start with "jdbc:postgresql:"
* @param user the username for the connection
* @param password the password for the connection
* @return a connection object for the established connection
* @throws ClassNotFoundException if the driver class cannot be found on the Java class path
* @throws java.sql.SQLException if the connection to the database fails
*/
private static java.sql.Connection connect(String url, String user, String password)
throws ClassNotFoundException, java.sql.SQLException
{
/*
* Register the PostgreSQL JDBC driver.
* This may throw a ClassNotFoundException.
*/
Class.forName("org.postgresql.Driver");
/*
* Tell the driver manager to connect to the database specified with the URL.
* This may throw an SQLException.
*/
return java.sql.DriverManager.getConnection(url, user, password);
}
No es posible que el usuario y la contraseña también se puedan incluir en la URL de JDBC, en cuyo caso no tiene que especificarlos en la llamada al método getConnection
.
Conectando con java.sql.DriverManager y Propiedades
En lugar de especificar parámetros de conexión como usuario y contraseña (vea una lista completa aquí ) en la URL o en parámetros separados, puede empaquetarlos en un objeto java.util.Properties
:
/**
* Connect to a PostgreSQL database.
* @param url the JDBC URL to connect to. Must start with "jdbc:postgresql:"
* @param user the username for the connection
* @param password the password for the connection
* @return a connection object for the established connection
* @throws ClassNotFoundException if the driver class cannot be found on the Java class path
* @throws java.sql.SQLException if the connection to the database fails
*/
private static java.sql.Connection connect(String url, String user, String password)
throws ClassNotFoundException, java.sql.SQLException
{
/*
* Register the PostgreSQL JDBC driver.
* This may throw a ClassNotFoundException.
*/
Class.forName("org.postgresql.Driver");
java.util.Properties props = new java.util.Properties();
props.setProperty("user", user);
props.setProperty("password", password);
/* don't use server prepared statements */
props.setProperty("prepareThreshold", "0");
/*
* Tell the driver manager to connect to the database specified with the URL.
* This may throw an SQLException.
*/
return java.sql.DriverManager.getConnection(url, props);
}
Conectando con javax.sql.DataSource usando un grupo de conexiones
Es común usar javax.sql.DataSource
con JNDI en los contenedores del servidor de aplicaciones, donde registra una fuente de datos con un nombre y la busca cada vez que necesita una conexión.
Este es un código que demuestra cómo funcionan las fuentes de datos:
/**
* Create a data source with connection pool for PostgreSQL connections
* @param url the JDBC URL to connect to. Must start with "jdbc:postgresql:"
* @param user the username for the connection
* @param password the password for the connection
* @return a data source with the correct properties set
*/
private static javax.sql.DataSource createDataSource(String url, String user, String password)
{
/* use a data source with connection pooling */
org.postgresql.ds.PGPoolingDataSource ds = new org.postgresql.ds.PGPoolingDataSource();
ds.setUrl(url);
ds.setUser(user);
ds.setPassword(password);
/* the connection pool will have 10 to 20 connections */
ds.setInitialConnections(10);
ds.setMaxConnections(20);
/* use SSL connections without checking server certificate */
ds.setSslMode("require");
ds.setSslfactory("org.postgresql.ssl.NonValidatingFactory");
return ds;
}
Una vez que haya creado una fuente de datos al llamar a esta función, la usaría así:
/* get a connection from the connection pool */
java.sql.Connection conn = ds.getConnection();
/* do some work */
/* hand the connection back to the pool - it will not be closed */
conn.close();