Как подключиться к SQL Server из Java с помощью JDBC

В этом руководстве вы узнаете, как подключиться к SQL Server из программы Java.

Проверка Java и JDK

Шаг 1. Откройте терминал на вашем компьютере.

Шаг 2. Выполните следующую команду:

java -version

Он вернет следующую информацию:

java version "22.0.2" 2024-07-16
Java(TM) SE Runtime Environment(build 22.0.2+9-70)
Java HotSpot(TM) 64-Bit Server VM(build 22.0.2+9-70, mixed mode, sharing)

Вывод показывает версию Java 22.0.2

Для проверки компилятора JDK можно выполнить команду javac:

javac -version

Выход:

javac 22.0.2

Если вместо этого вы видите ошибку, вам необходимо установить JDK на свой компьютер.

Загрузка драйвера Microsoft JDBC для SQL Server

Шаг 1. Откройте страницу загрузки драйвера Microsoft JDBC для SQL Server.

Шаг 2. Загрузите драйвер Microsoft JDBC для SQL Server.

Шаг 3. Распакуйте загруженный файл и скопируйте файл mssql-jdbc-12.6.3.jre11.jar в каталог, например D:\jdbc driver\mssql. Мы добавим этот файл в библиотеку проекта Java на следующем шаге.

Создание новой базы данных SQL Server

Мы создадим новую базу данных на локальном SQL Server под названием BookStore. Пожалуйста, следуйте этому руководству, чтобы создать ее.

Создание нового проекта Java

Шаг 1. Запустите IntelliJ IDE.

Шаг 2. Создайте новый проект под названием SQLServerJava.

Шаг 3. Щелкните правой кнопкой мыши по названию проекта и выберите «Открыть настройки модуля».

Шаг 4. Выберите «Библиотеки» в разделе «Настройки проекта» и нажмите «Новая библиотека проекта».

Шаг 5. Выберите файл драйвера Microsoft JDBC для SQL Server D:\jdbc driver\mssql\mssql-jdbc-12.6.3.jre11.jar и нажмите кнопку ОК.

Создание Java-программы

Шаг 1. В каталоге src создайте новый файл Main.java, в котором хранится класс Main:

import java.sql.DriverManager;
import java.sql.SQLException;
public class Main {
    public static void main(String[] args) {
        // Register JDBC driver
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        } catch(ClassNotFoundException e) {
            System.err.println("SQL exception occurred while connecting to the SQL Server.");
            e.printStackTrace();
            return;
        }
        // Connect to the SQL Server
        var url = "jdbc:sqlserver://localhost:1433;databaseName=BookStore;encrypt=true;trustServerCertificate=true;";
        var user = "joe";
        var password = "YourPassword";
        try(var connection = DriverManager.getConnection(url, user, password)) {
            System.out.println("Connected to the SQL Server database successfully.");
        } catch(SQLException e) {
            System.err.println("SQL exception occurred while connecting to the SQL Server.");
            e.printStackTrace();
        }
    }
}

Как это работает.

Сначала импортируйте классы DriverManager и SQLException из пакета java.sql:

import java.sql.DriverManager;
import java.sql.SQLException;

Во-вторых, зарегистрируйте драйвер JDBC:

try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch(ClassNotFoundException e) {
    System.err.println("SQL exception occurred while connecting to the SQL Server.");
    e.printStackTrace();
    return;
}

В-третьих, инициализируйте URL, пользователя и пароль для подключения к SQL Server:

var url = "jdbc:sqlserver://localhost:1433;databaseName=BookStore;encrypt=true;trustServerCertificate=true;";
var user = "joe";
var password = "YourStrongPassword";

URL-адрес представляет собой строку подключения для подключения Java к SQL Server, которая имеет следующую структуру:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

В этом синтаксисе:

  • serverName представляет собой имя или IP-адрес сервера, на котором в данный момент работает SQL Server.
  • instanceName: необязательное имя экземпляра SQL Server. Это имя службы SQL Server в Windows.
  • portNumber: номер порта, на котором слушает SQL Server. Номер порта по умолчанию — 1433.
  • свойство=значение указывает параметры подключения.

В программе Java URL-адрес позволяет нам подключиться к базе данных BookStore на локальном SQL-сервере и порту 1433.

Для подключения к локальному SQL Server необходимы параметры подключения encrypt=true;trustServerCertificate=true;.

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

Пароль — это пароль учетной записи пользователя.

В-четвертых, установите соединение с SQL Server, вызвав статический метод getConnection класса DriverManger:

try(var connection = DriverManager.getConnection(url, user, password))

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

В-пятых, выведите на экран сообщение об успешном подключении:

System.out.println("Connected to the SQL Server database successfully.");

Наконец, покажите сообщение об ошибке с подробной трассировкой стека, если во время подключения возникли какие-либо ошибки:

System.err.println("SQL exception occurred while connecting to the SQL Server.");
e.printStackTrace();

Шаг 2. Запустите программу Java.

Если вы видите следующий вывод, вы успешно подключились к SQL Server из программы Java:

Connected to the SQL Server database successfully.

Программа работает нормально, но небезопасна, поскольку в ее исходном коде жестко закодирована информация, включая учетную запись пользователя с паролем.

Чтобы исправить это, вы можете сохранить конфиденциальную информацию в файле конфигурации, например в файле .properties.

Создание файла конфигурации базы данных

Шаг 1. Создайте новый файл db.properties в каталоге src.

Шаг 2. Добавьте параметры подключения в файл db.properties:

db.url=jdbc:sqlserver://localhost:1433;databaseName=BookStore;encrypt=true;trustServerCertificate=true;
db.username=joe
db.password=YourStrongPassword

В этом файле db.properties мы определяем три параметра db.url, db.username и db.password. Чтобы использовать эти параметры в программе, мы можем определить новый класс.

Определение класса конфигурации

Создайте новый класс Config, который считывает файл db.properties:

import java.io.IOException;
import java.util.Properties;
public class Config {
    private static final Properties properties = new Properties();
    static {
        try(var input = Config.class.getClassLoader().getResourceAsStream("db.properties")) {
            if(input == null) {
                System.err.println("Sorry, could not find the db.properties file");
                System.exit(1);
            }
            // Load the properties file
            properties.load(input);
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
    public static String getDbUrl() {
        return properties.getProperty("db.url");
    }
    public static String getDbUsername() {
        return properties.getProperty("db.username");
    }
    public static String getDbPassword() {
        return properties.getProperty("db.password");
    }
}

Класс Config считывает параметры соединения из файла db.properties. Он включает три статических метода, которые раскрывают параметры базы данных:

  • getDbUrl() – возвращает URL-адрес базы данных.
  • getDbUsername() – возвращает имя пользователя базы данных.
  • getDbPassword() – возвращает пароль базы данных.

Создать класс DBException

public class DBException extends Exception {
    public DBException(String message) {
        super(message);
    }
}

Создание класса SQLSeverConnection

Создайте повторно используемый класс SQLServerConnection, который подключается к SQL Server:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SQLServerConnection {
    public static Connection connect() throws DBException {
        try {
            // Register JDBC Driver
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            // Create a new connection
            return DriverManager.getConnection(
                    Config.getDbUrl(),
                    Config.getDbUsername(),
                    Config.getDbPassword()
            );
        } catch(SQLException | ClassNotFoundException e) {
            throw new DBException(e.getMessage());
        }
    }
}

Изменение основного класса

Измените метод main() класса Main, чтобы использовать класс SQLServerConnection для подключения к SQL Server:

import java.sql.SQLException;
public class Main {
    public static void main(String[] args) {
        try(var connection = SQLServerConnection.connect()){
            System.out.println("Connected to the SQL Server database successfully!");
        } catch(SQLException | DBException e){
            System.err.println(e.getMessage());
        }
    }
}

Если вы запустили программу и увидели следующее сообщение, вы успешно подключились к SQL Server с помощью JDBC:

Connected to the SQL Server database successfully!

Мы будем использовать класс SQLSeverConnection в следующих уроках.

Загрузите исходный код проекта

Загрузите исходный код проекта

Краткое содержание

  • Загрузите драйвер Microsoft JDBC для SQL Server и используйте его для подключения к SQL Server из программы Java.
Мирослав С.

Автор статей, ИБ-специалист