Поиск…


Синтаксис

  • DB_URL = "jdbc: СУБД: // DB_HOST: DB_PORT / DB_NAME"

  • СУБД: Диспетчер драйверов базы данных, это могут быть любые СУБД (mysql, oracle, postgresql, sqlite, ...), например mysql: «com.mysql.jdbc.Driver»

  • DB_HOST: ваш базовый хост базы данных, IP-адрес вашей базы данных: 10.6.0.1, по умолчанию - localhost или 127.0.0.1

  • DB_PORT: порт базы данных, каждая СУБД имеет порт defeaut, пример mysql = 3306, postegesql = 5432

  • DB_NAME: имя вашей базы данных

  • Чтобы подключиться, вы должны получить ссылку на объект класса,

  • Class.forName (драйвер);

  • Чтобы подключиться к базе данных, вам необходимо создать соединение

  • java.sql.Connection con = DriverManager.getConnection (DB_URL, DB_USER_NAME, DB_PASSWORD);

  • DB_USER_NAME: имя пользователя вашей базы данных

  • DB_PASSWORD: пароль вашей базы данных

Введение (SQL)

Начиная с Java 6, рекомендуемым способом доступа к базе данных на базе SQL в Java является API JDBC (Java DataBase Connectivity).

Этот API поставляется в двух пакетах: java.sql и javax.sql .

JDBC определяет взаимодействие с базами данных с точки зрения Connections и Drivers .

Driver взаимодействует с базой данных и предоставляет упрощенный интерфейс для открытия и управления соединениями. Большинство разновидностей сервера баз данных (PostgreSQL, MySQl и т. Д.) Имеют свои собственные Drivers , которые обрабатывают настройку, разрывы и перевод, специфичные для этого сервера. Обычно Drivers не доступны напрямую; вместо этого используется интерфейс, предоставляемый объектом DriverManager .

Объект DriverManager является, по сути, ядром JDBC. Он обеспечивает (в основном) интерфейс агностики базы данных для создания Connections . Для более старых версий API JDBC необходимо было загружать Drivers зависящие от базы данных, до того, как DeviceManager мог создать соединение с этим типом базы данных.

Connection , как следует из названия, представляет собой открытое соединение с базой данных. Connections зависят от базы данных и создаются и предоставляются DriverManager . Они предоставляют ряд «ярлыков» для общих типов запросов, а также необработанный интерфейс SQL.

Использование соединения (и утверждений)

Как только мы получим Connection , мы будем использовать его главным образом для создания объектов Statement . Statements представляют собой единую транзакцию SQL; они используются для выполнения запроса и получения результатов (если они есть). Давайте посмотрим на некоторые примеры:

public void useConnection() throws SQLException{


    Connection conn = getConnection();

    //We can use our Connection to create Statements
    Statement state = conn.getStatement();

    //Statements are most useful for static, "one-off" queries
    
    String query = "SELECT * FROM mainTable";
    boolean sucess = state.execute(query);
    
    //The execute method does exactly that; it executes the provided SQL statement, and returns true if the execution provided results (i.e. was a SELECT) and false otherwise.

    ResultSet results = state.getResultSet();
    
    //The ResultSet object represents the results, if any, of an SQL statement.
    //In this case, the ResultSet contains the return value from our query statement.
    //A later example will examine ResultSets in more detail.

    ResultSet newResults = state.executeQuery(query)
    
    //The executeQuery method is a 'shortcut' method. It combines the execute and getResultSet methods into a single step.
    //Note that the provided SQL query must be able to return results; typically, it is a single static SELECT statement.
    //There are a number of similar 'shortcut' methods provided by the Statement interface, including executeUpdate and executeBatch

    //Statements, while useful, are not always the best choice. 
    
    String newQuery = "SELECT * FROM mainTable WHERE id=?";
    PreparedStatement prepStatement = conn.prepareStatement(newQuery);

    //PreparedStatements are the prefed alternative for variable statements, especially ones that are going to be executed multiple times

    for(int id:this.ids){

        prepStatement.setInt(1,id);
        //PreparedStatements allow you to set bind variables with a wide variety of set methods.
        //The first argument to any of the various set methods is the index of the bind variable you want to set. Note that this starts from 1, not 0. 

        ResultSet tempResults = prepStatement.executeQuery()
        //Just like Statements, PreparedStatements have a couple of shortcut methods. 
        //Unlike Statements, PreparedStatements do not not take a query string as an argument to any of their execute methods.
        //The statement that is executed is always the one passed to the Connector.prepareStatement call that created the PreparedStatement
    }

}

Создание соединения с помощью java.sql.DriverManager

Для подключения с помощью java.sql.DriverManager вам нужен URL-адрес JDBC для подключения к вашей базе данных. JDBC-URL-адреса специфичны для базы данных, но все они имеют форму

jdbc:<subprotocol>:<subname>

Где <subprotocol> идентифицирует драйвер или базу данных (например, postgresql , mysql , firebirdsql и т. Д.) И <subname> является подпротокольным.

Вам нужно проверить документацию своей базы данных и драйвера JDBC для конкретного подпротокола и формата вашего драйвера.

Простой пример создания соединения с базой данных с URL-адресом jdbc:somedb://localhost/foobar :

try (Connection connection = DriverManager.getConnection(
        "jdbc:somedb://localhost/foobar", "anna", "supersecretpassword")) {
    // do something with connection
}

Здесь мы используем try-with-resources, поэтому соединение автоматически закрывается, когда мы с ним работаем, даже если происходят исключения.

4,0

На Java 6 (JDBC 4.0) и более ранних версиях try-with-resources недоступно. В этих версиях вам нужно использовать finally -block, чтобы явно закрыть соединение:

Connection connection = DriverManager.getConnection(
        "jdbc:somedb://localhost/foobar", "anna", "supersecretpassword");
try {
    // do something with connection
} finally {
    // explicitly close connection
    connection.close();
}
4,0

JDBC 4.0 (Java 6) представил концепцию автоматической загрузки драйверов. Если вы используете Java 5 или более раннюю версию или старый JDBC-драйвер, который не реализует поддержку JDBC 4, вам необходимо будет явно загрузить драйвер (ы):

Class.forName("org.example.somedb.jdbc.Driver");

Эта линия должна произойти (как минимум) один раз в вашей программе, прежде чем будет выполнено какое-либо соединение.

Даже в Java 6 и выше с JDBC 4.0 может потребоваться явная загрузка драйвера: например, в веб-приложениях, когда драйвер не загружен в контейнер, а как часть веб-приложения.

Кроме того, вы также можете предоставить объект Properties для подключения:

Properties props = new Properties();
props.setProperty("user", "anna");
props.setProperty("password", "supersecretpassword");
// other, database specific, properties
try (Connection connection = DriverManager.getConnection(
        "jdbc:somedb://localhost/foobar", props)) {
    // do something with connection
}

Или даже без свойств, например, если в базе данных нет имени пользователя и пароля:

try (Connection connection = DriverManager.getConnection(
        "jdbc:somedb://localhost/foobar")) {
    // do something with connection
}

Создание подключения к MySQL

Чтобы подключиться к MySQL, вам нужно использовать драйвер MySQL Connector / J. Вы можете скачать его с http://dev.mysql.com/downloads/connector/j/ или использовать Maven:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

Основным URL-адресом JDBC для MySQL является:

jdbc:mysql://<hostname>[:<port>]/<database>[?<propertyName>=<propertyValue>[&<propertyName>=<propertyValue>]...]

Куда:

ключ Описание пример
<hostname> Имя хоста сервера MySQL localhost
<port> Порт сервера MySQL (необязательно, по умолчанию: 3306) 3306
<database> Имя базы данных foobar
<propertyName> Имя свойства соединения useCompression
<propertyValue> Значение свойства соединения true

Поддерживаемый URL-адрес более сложный, чем показано выше, но этого достаточно для большинства «нормальных» потребностей.

Для подключения:

try (Connection connection = DriverManager.getConnection(
        "jdbc:mysql://localhost/foobardb", "peter", "nicepassword")) {
    // do something with connection
}
4,0

Для более старых версий Java / JDBC:

4,0
// Load the MySQL Connector/J driver
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(
        "jdbc:mysql://localhost/foobardb", "peter", "nicepassword");
try {
    // do something with connection
} finally {
  // explicitly close connection
  connection.close();
}

Подключение к базе данных Microsoft Access с помощью UCanAccess

UCanAccess - это чистый Java JDBC драйвер, который позволяет нам читать и записывать в базы данных Access без использования ODBC . Для выполнения этих задач он использует два других пакета: Jackcess и HSQLDB .

После того, как он был настроен * , мы можем работать с данными в файлах .accdb и .mdb, используя следующий код:

import java.sql.*;

Connection conn=DriverManager.getConnection("jdbc:ucanaccess://C:/__tmp/test/zzz.accdb");
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT [LastName] FROM [Clients]");
while (rs.next()) {
    System.out.println(rs.getString(1));
}

* Для получения дополнительной информации см. Следующий вопрос:

Манипулирование базы данных Access с Java без ODBC

Соединение Oracle JDBC

Водитель:

( Примечание: драйвер не включен в Maven Central!)

Инициализация класса драйвера:

    Class.forName("oracle.jdbc.driver.OracleDriver");

URL-адрес подключения

Более старый формат с SID

"jdbc:oracle:thin:@<hostname>:<port>:<SID>"

Новый формат с именем службы

"jdbc:oracle:thin:@//<hostname>:<port>/<servicename>"

Tnsnames как запись

"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=<hostname>)(PORT=<port>))"
    +"(CONNECT_DATA=(SERVICE_NAME=<servicename>)))"

Строка подключения кластера RAC для отказоустойчивости

"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)"
    +"(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname1>)(PORT=<port1>))"
    +"(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname2>)(PORT=<port2>)))"
    +"(CONNECT_DATA=SERVICE_NAME=<servicename>)(SERVER=DEDICATED)))"

пример

connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "HR", "HRPASS");


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow