Sök…


Introduktion

API: en för att använda en relationsdatabas från Java är JDBC.

Detta API implementeras av en JDBC-drivrutin.

För att använda den, placera JAR-filen med drivrutinen på JAVA-klassvägen.

Den här dokumentationen visar exempel på hur man använder JDBC-drivrutinen för att ansluta till en databas.

Anmärkningar

JDBC URL

JDBC-URL: n kan ha en av dessa former:

  • jdbc:postgresql:// host [: port ]/[ database ][ parameters ]

    host standard till localhost , port till 5432.
    Om host är en IPv6-adress, måste den bifogas i fyrkantiga parenteser.
    Standarddatabasnamnet är samma som namnet på den anslutande användaren.

    För att implementera failover är det möjligt att ha flera host [: port ] -poster separerade med ett komma.
    De försöks i sin tur tills en anslutning lyckas.

  • jdbc:postgresql: database [ parameters ]

  • jdbc:postgresql:/[ parameters ]

    Dessa formulär är för anslutningar till localhost .

parameters är en lista över key [= value ] par, leds av ? och separeras av & . Om value saknas antas det vara true .

Ett exempel:

jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidatingFactory

referenser

Ansluter till java.sql.DriverManager

Detta är det enklaste sättet att ansluta.

Först måste föraren registreras med java.sql.DriverManager så att den vet vilken klass han ska använda.
Detta görs genom att ladda java.lang.Class.forname( <driver class name> ) , vanligtvis med 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);
}

Inte att användaren och lösenordet kan också inkluderas i JDBC URL, i vilket fall behöver du inte ange dem i getConnection .

Ansluter till java.sql.DriverManager och Properties

I stället för att ange anslutningsparametrar som användare och lösenord (se en fullständig lista här ) i URL: n eller en separat parameter, kan du packa dem i ett java.util.Properties objekt:

/**
 * 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);
}

Ansluter till javax.sql.DataSource med en anslutningspool

Det är vanligt att använda javax.sql.DataSource med JNDI i applikationsserverbehållare, där du registrerar en datakälla under ett namn och letar upp den när du behöver en anslutning.

Detta är kod som visar hur datakällor fungerar:

/**
 * 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;
}

När du har skapat en datakälla genom att kalla den här funktionen, skulle du använda den så här:

/* 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow