Подключаемся к базе данных с помощью JDBC. Выборка данных (Java)

В данной статье рассматриваем возможность подключение к БД с помощью JDBC.

Что такое JDBC

JDBC — это стандарт взаимодействия Java с различными СУБД, входящий в пакет java.sql.

Позволяет использовать один интерфейс для подключения к любым базам данных, для которых созданы JDBC коннекторы.

java-jdbc

Пример:

package Database;

import java.sql.*;

public class DB {
    private Connection connection;

    public DB(String driver, String conString, String user, String pass) throws SQLException, ClassNotFoundException {
        if(this.connection == null) {
            Class.forName(driver);
            this.connection = DriverManager.getConnection(conString, user, pass);

        }
    }

    public ResultSet select(String q) throws SQLException {
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery(q);
        return rs;
    }

    public void close() throws SQLException{
        if(this.connection!=null)
            if(!this.connection.isClosed())
                this.connection.close();
    }
}

Здесь реализован конструктор, в котором осуществляется подключение к базе, метод select, выполняющий запрос и возвращающий результат в виде объекта ResultSet, и метод close, закрывающий соединение.

Так же мы избежали обработку исключений в конструкторе с помощью throws SQLException, ClassNotFoundException.

Можно поступить иначе: в блоке try создать подключение, а в блоке catch обработать исключения, выброшенные JDBC.

Я часто использую multicatch, имеющий следующий вид:

catch (SQLException | ClassNotFoundException ex){....}

Чтобы использовать multicatch необходимо в среде разработки поднять уровень языка до 8.

Если используете Maven, подойдет следующая конструкция:

<build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>Main.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

Здесь говориться о том, что используется Main класс с именем Main, собираться проект будет в единый jar, уровень языка — 8.

Работать с объектом ResultSet можно следующим образом:

while (rs.next()){
    rs.getString(1);
    rs.getString(2);
    rs.getString(3);
}
rs.getStatement().close();

То есть считываем значения, пока они не закончатся. С помощью команды rs.getString(1) считываем значение из 1 колонки текущего кортежа в виде текста. Счет колонок начинается с единицы. То же касается с имен столбцов таблицы, считать которые можно так:

for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
    rs.getMetaData().getColumnLabel(i + 1);
}

Примеры строк подключения

Oracle

jdbc:oracle:thin:@127.0.0.1:1521/serviceName

Имя драйвера: oracle.jdbc.OracleDriver

MySQL

jdbc:mysql://127.0.0.1:3306/DatabaseName

Имя драйвера: com.mysql.jdbc.Driver

Microsoft Sql Server

jdbc:sqlserver://127.0.0.1:1433;instanceName=DataBaseName

Имя драйвера: com.microsoft.sqlserver.jdbc.SQLServerDriver

Postgree

jdbc:postgresql://127.0.0.1:5432/DatabaseName

Имя драйвера: org.postgresql.Driver