DriverManager.getConnection()
Открывает соединение с базой данных по JDBC-адресу.
Доступно с: Java 1.1
Синтаксис
public static Connection getConnection(String url, String user, String password) throws SQLExceptionПараметры
| Параметр | Тип | Описание |
|---|---|---|
| url | String | Адрес базы вида jdbc:postgresql://host:5432/db или jdbc:sqlite:shop.db. |
| user | String | Имя пользователя (необязательно — есть вариант только с url). |
| password | String | Пароль. |
Возвращаемое значение
ConnectionОткрытое соединение, которое нужно закрыть.
Примеры
Соединение с базой SQLite в памяти. Примеры запускаются с драйвером в classpath: java --enable-native-access=ALL-UNNAMED -cp sqlite-jdbc-3.53.4.0.jar Main.java:
import java.sql.*;
void main() throws SQLException {
try (Connection conn = DriverManager.getConnection("jdbc:sqlite::memory:")) {
IO.println(conn.getMetaData().getDatabaseProductName());
IO.println(conn.isClosed());
}
}Результат:
SQLite
falseСоздание таблицы и простые запросы через Statement:
import java.sql.*;
void main() throws SQLException {
try (Connection conn = DriverManager.getConnection("jdbc:sqlite::memory:");
Statement st = conn.createStatement()) {
st.executeUpdate("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
int added = st.executeUpdate("INSERT INTO users (name) VALUES ('Anna'), ('Oleg')");
IO.println("Added: " + added);
try (ResultSet rs = st.executeQuery("SELECT COUNT(*) FROM users")) {
rs.next();
IO.println("Total: " + rs.getInt(1));
}
}
}Результат:
Added: 2
Total: 2Если драйвера нужной базы нет в classpath:
import java.sql.*;
void main() throws SQLException {
DriverManager.getConnection("jdbc:postgresql://localhost:5432/shop", "app", "secret");
}Результат:
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432/shopПримечания
JDBC находится в модуле java.sql, поэтому нужен import java.sql.*;. Драйвер конкретной базы — отдельная библиотека: org.postgresql:postgresql, com.mysql:mysql-connector-j, org.xerial:sqlite-jdbc; он регистрируется сам, как только оказывается в classpath. Соединение — дорогой ресурс: закрывайте его через try с ресурсами, а в веб-приложениях берите соединения из пула (HikariCP). Пароль не пишут в код — читают из переменной окружения.
См. также
- PreparedStatement — Заранее подготовленный SQL-запрос с параметрами ?. Защищает от SQL-инъекций.
- ResultSet — Результат SELECT-запроса: курсор, который по одной перебирает строки таблицы.
- Connection.setAutoCommit() — Включает или выключает автофиксацию. С false несколько запросов объединяются в транзакцию: commit() или rollback().
- try-with-resources — Блок `try`, который сам закрывает открытые ресурсы — файлы, соединения, потоки.
Вопросы и ответы по теме
В учебнике
- Основы JDBC — Работа с базой данных из Java через JDBC — что такое драйвер, подключение DriverManager.getConnection, Statement для команд SQL и чтение строк через ResultSet на примере SQLite.