postgresql
Подключение к PostgreSQL с Java
Поиск…
Вступление
API для использования реляционной базы данных с Java - это JDBC.
Этот API реализован драйвером JDBC.
Чтобы использовать его, поместите JAR-файл с драйвером в путь класса JAVA.
В этой документации приведены примеры использования драйвера JDBC для подключения к базе данных.
замечания
URL JDBC
URL JDBC может принимать одну из следующих форм:
jdbc:postgresql:// host [: port ]/[ database ][ parameters ]
host
умолчанию -localhost
,port
- 5432.
Еслиhost
является адресом IPv6, он должен быть заключен в квадратные скобки.
Имя базы данных по умолчанию совпадает с именем подключаемого пользователя.Чтобы реализовать переход на другой ресурс, возможно наличие нескольких записей
host [: port ]
разделенных запятой.
Они стараются в свою очередь, пока соединение не удастся.jdbc:postgresql: database [ parameters ]
jdbc:postgresql:/[ parameters ]
Эти формы предназначены для соединений с
localhost
.
parameters
- это список key [= value ]
пар key [= value ]
, возглавляемых ?
и разделяются символом &
. Если value
отсутствует, оно считается true
.
Пример:
jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidatingFactory
Рекомендации
- Спецификация JDBC: http://download.oracle.com/otndocs/jcp/jdbc-4_2-mrel2-eval-spec/
- Драйвер PostgreSQL JDBC: https://jdbc.postgresql.org/
- Документация драйвера PostgreSQL JDBC: https://jdbc.postgresql.org/documentation/head/index.html
Подключение с помощью java.sql.DriverManager
Это самый простой способ подключения.
Во-первых, драйвер должен быть зарегистрирован с помощью java.sql.DriverManager
чтобы он знал, какой класс использовать.
Это делается путем загрузки класса драйвера, как правило, с помощью 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);
}
Не тот пользователь и пароль также могут быть включены в URL JDBC, и в этом случае вам не нужно указывать их в вызове метода getConnection
.
Подключение с помощью java.sql.DriverManager и свойств
Вместо указания параметров соединения, таких как пользователь и пароль (см. Полный список здесь ) в URL-адресе или отдельных параметрах, вы можете упаковать их в объект 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);
}
Подключение с помощью javax.sql.DataSource с использованием пула соединений
Обычно используется javax.sql.DataSource
с JNDI в контейнерах сервера приложений, где вы регистрируете источник данных под именем и просматриваете его, когда вам нужно соединение.
Это код, который показывает, как работают источники данных:
/**
* 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;
}
Как только вы создали источник данных, вызвав эту функцию, вы будете использовать ее следующим образом:
/* 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();