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 es localhost , port a 5432.
    Si el host 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

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();


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow