Рубрики
Без рубрики

Пример JDBC – MySQL, Oracle

Пример JDBC. Подключение к базе данных Java. Драйверы JDBC, соединение JDBC, Инструкция, набор результатов, JDBC MySQL, JDBC Oracle, пример файла свойств jdbc.

Автор оригинала: Pankaj Kumar.

Добро пожаловать в пример JDBC. Подключение к базе данных Java или API JDBC обеспечивает стандартное и независимое от базы данных подключение между приложениями Java и серверами реляционных баз данных. Точно так же, как программы java, которые мы можем “написать один раз и запустить везде”, JDBC предоставляет платформу для подключения к реляционным базам данных из программ java.

Пример JDBC

API JDBC используется для решения следующих задач:

  • Установление соединения с серверами реляционных баз данных, такими как Oracle, MySQL и т.д. API JDBC не предоставляет платформу для подключения к базам данных NoSQL, таким как MongoDB.
  • Отправляйте SQL-запросы к соединению, которое будет выполняться на сервере базы данных.
  • Обработайте результаты, возвращенные при выполнении запроса.

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

Драйвер JDBC

API JDBC состоит из двух частей – первая часть-это API JDBC, который будет использоваться программистами приложений. Вторая часть-это низкоуровневый API для подключения к серверу базы данных. Первая часть API JDBC является частью стандартных пакетов java в java.sql пакете.

Для второй части существует четыре различных типа драйверов JDBC:

  1. JDBC-мост ODBC плюс драйвер ODBC (Тип 1): Этот драйвер использует драйвер ODBC для подключения к серверам баз данных. У нас должны быть драйверы ODBC, установленные на машинах, с которых мы хотим подключиться к базе данных, поэтому этот драйвер почти устарел и должен использоваться только тогда, когда другие опции недоступны.
  2. Собственный API частично драйвер с поддержкой технологии Java (Тип 2): Этот тип драйвера преобразует класс JDBC в клиентский API для серверов СУБД. У нас должен быть установлен API клиента базы данных на компьютере, с которого мы хотим установить соединение с базой данных. Из-за дополнительной зависимости от драйверов API клиента базы данных это также не является предпочтительным драйвером.
  3. Чистый драйвер Java для промежуточного программного обеспечения базы данных (Тип 3): Этот тип драйвера отправляет вызовы JDBC на сервер промежуточного программного обеспечения, который может подключаться к базам данных другого типа. У нас должен быть установлен сервер промежуточного программного обеспечения для работы с такого рода драйверами. Это увеличивает количество дополнительных сетевых вызовов и снижает производительность. Следовательно, это также не широко используемый драйвер JDBC.
  4. Драйвер Java с прямым подключением к базе данных (тип 4): Это предпочтительный драйвер, поскольку он преобразует вызовы JDBC в сетевой протокол, понятный серверу баз данных. Это решение не требует каких-либо дополнительных API на стороне клиента и подходит для подключения к базе данных по сети. Однако для этого решения мы должны использовать драйверы для конкретных баз данных, например банки OJDBC, предоставляемые Oracle для Oracle DB и MySQL Connector/J для баз данных MySQL.

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

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

Установка серверов баз данных не входит в рамки этого руководства, поэтому я буду считать, что у вас установлены серверы баз данных.

Мы напишем программу для подключения к серверу базы данных, выполним простой запрос jdbc и обработаем результаты. Чтобы показать, как мы можем добиться слабой связи при подключении к базам данных с помощью API JDBC, я буду использовать системы баз данных Oracle и MySQL.

Запустите приведенные ниже сценарии SQL, чтобы создать таблицу и вставить в нее некоторые фиктивные значения.

--mysql create table
create table Users(
  id  int(3) primary key,
  name varchar(20),
  email varchar(20),
  country varchar(20),
  password varchar(20)
  );
  
--oracle create table
create table Users(
  id  number(3) primary key,
  name varchar2(20),
  email varchar2(20),
  country varchar2(20),
  password varchar2(20)
  );
    
--insert rows
INSERT INTO Users (id, name, email, country, password) 
VALUES (1, 'Pankaj', 'pankaj@apple.com', 'India', 'pankaj123');
INSERT INTO Users (id, name, email, country, password) 
VALUES (4, 'David', 'david@gmail.com', 'USA', 'david123');
INSERT INTO Users (id, name, email, country, password) 
VALUES	(5, 'Raman', 'raman@google.com', 'UK', 'raman123');
commit;

Обратите внимание, что типы данных в базах данных Oracle и MySQL различны, поэтому я предоставил два разных запроса SQL DDL для создания таблицы пользователей. Однако обе базы данных соответствуют языку SQL, поэтому запросы на вставку одинаковы для обеих таблиц базы данных.

Пример JDBC – Драйверы баз данных

Как вы можете видеть на изображении проекта, у меня есть оба MySQL (mysql-connector-java-5.0.5.jar) и Оракул (ojdbc6-11.2.0.1.0.jar) введите 4 драйвера в каталог библиотеки и добавьте их в путь сборки проекта. Убедитесь, что вы используете правильную версию драйверов Java в соответствии с версией установки сервера базы данных. Обычно эти банки поставляются вместе с установщиком, поэтому вы можете найти их в установочном пакете. Если у вас есть приложение на основе maven, вы также можете использовать приведенные ниже зависимости.


    mysql
    mysql-connector-java
    5.0.5




    com.oracle
    ojdbc6
    11.2.0.1.0

Файл свойств конфигурации базы данных JDBC

Мы прочитаем сведения о конфигурации базы данных из файлов свойств. Это поможет нам легко переключиться с Oracle на базу данных MySQL и наоборот. Все, что нам нужно, – это изменить сведения о собственности.

#mysql DB properties
#DB_DRIVER_CLASS=com.mysql.jdbc.Driver
#DB_URL=jdbc:mysql://localhost:3306/UserDB
#DB_USERNAME=pankaj
#DB_PASSWORD=pankaj123

#Oracle DB Properties
DB_DRIVER_CLASS=oracle.jdbc.driver.OracleDriver
DB_URL=jdbc:oracle:thin:@localhost:1571:MyDBSID
DB_USERNAME=scott
DB_PASSWORD=tiger

Конфигурации базы данных являются наиболее важными деталями при использовании API JDBC. Первое, что мы должны знать, – это класс драйвера для использования. Для базы данных Oracle классом драйвера является oracle.jdbc.driver.Оракул-река . Для базы данных MySQL класс драйвера – com.mysql.jdbc.Driver . Вы найдете эти классы драйверов в соответствующих файлах jar драйверов. Оба они реализуют интерфейс JDBC java.sql.Driver .

Вторая важная часть-это строка URL-адреса подключения к базе данных. У каждого драйвера базы данных есть свой собственный способ настройки URL-адреса базы данных, но все они содержат сведения о хосте, порту и схеме в URL-адресе подключения.

Формат строки подключения к базе данных MySQL: jdbc:mysql://<ХОСТ>:<ПОРТ>/<СХЕМА> .

Формат строки подключения к базе данных Oracle: jdbc:oracle:тонкий:@<ХОСТ>:<ПОРТ>: .

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

Пример программы JDBC

Давайте рассмотрим простой пример программы jdbc, чтобы увидеть, как мы можем прочитать вышеуказанные свойства и создать соединение с базой данных.

package com.journaldev.jdbc;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBConnection {

	public static Connection getConnection() {
		Properties props = new Properties();
		FileInputStream fis = null;
		Connection con = null;
		try {
			fis = new FileInputStream("db.properties");
			props.load(fis);

			// load the Driver Class
			Class.forName(props.getProperty("DB_DRIVER_CLASS"));

			// create the connection now
			con = DriverManager.getConnection(props.getProperty("DB_URL"),
					props.getProperty("DB_USERNAME"),
					props.getProperty("DB_PASSWORD"));
		} catch (IOException | ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
}

Приведенный выше пример программы jdbc действительно прост. Сначала мы считываем сведения о конфигурации базы данных из файла свойств, а затем загружаем драйвер JDBC и используем DriverManager для создания соединения. Обратите внимание, что в этом коде используются только классы API Java JDBC, и невозможно узнать, к какому типу базы данных он подключается. Это также отличный пример написания кода для интерфейсов методологии.

Важным кодом, на который следует обратить внимание, является вызов метода Class.forName () , это Отражение Java метод для создания экземпляра данного класса. Вы можете задаться вопросом, почему мы используем отражение, а не новый оператор для создания объекта, и почему мы просто создаем объект, а не используем его.

Первая причина заключается в том, что использование отражения для создания экземпляра помогает нам в написании слабо связанного кода, которого мы не можем достичь, если используем новый оператор. В этом случае мы не смогли бы переключиться на другую базу данных без внесения соответствующих изменений в код.

Причина отказа от использования объекта заключается в том, что мы не заинтересованы в его создании. Основной мотив-загрузить класс в память, чтобы класс драйвера мог зарегистрироваться в диспетчере драйверов. Если вы изучите реализацию классов драйверов, вы обнаружите, что у них есть статический блок, в котором они регистрируются в DriverManager.

oracle.jdbc.драйвер.OracleDriver.java фрагмент:

static
  {
    try
    {
      if (defaultDriver == null)
      {
        defaultDriver = new oracle.jdbc.OracleDriver();
        DriverManager.registerDriver(defaultDriver);
      }
	//some code omitted for clarity
	}
}

com.mysql.jdbc.Driver.java фрагмент:

static
  {
    try
    {
      DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
      throw new RuntimeException("Can't register driver!");
    }
  }

Это отличный пример того, как мы делаем наш код слабо связанным с использованием API отражения. Таким образом, в основном мы выполняем следующие действия, используя вызов метода Class.forName ().

Driver driver = new OracleDriver();
DriverManager.registerDriver(driver);

Метод DriverManager.getConnection() использует зарегистрированные драйверы JDBC для создания подключения к базе данных. Этот метод вызывает java.sql.SQLException , если есть какие-либо проблемы с подключением к базе данных.

Теперь давайте напишем простой пример тестовой программы jdbc для использования подключения к базе данных и выполним простой запрос.

Заявление JDBC и набор результатов

Вот простой пример программы jdbc, в которой мы используем соединение JDBC для выполнения SQL-запроса к базе данных, а затем обработки результирующего набора.

package com.journaldev.jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBConnectionTest {
	
	private static final String QUERY = "select id,name,email,country,password from Users";

	public static void main(String[] args) {
				
		//using try-with-resources to avoid closing resources (boiler plate code)
		try(Connection con = DBConnection.getConnection();
				Statement stmt = con.createStatement();
				ResultSet rs = stmt.executeQuery(QUERY)) {	
			
			while(rs.next()){
				int id = rs.getInt("id");
				String name = rs.getString("name");
				String email = rs.getString("email");
				String country = rs.getString("country");
				String password = rs.getString("password");
				System.out.println(id + "," +name+ "," +email+ "," +country+ "," +password);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

}

Обратите внимание, что мы используем функцию Java 7 try-with-resources, чтобы убедиться, что ресурсы будут закрыты, как только мы выйдем из блока try-catch.

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

Connection.createStatement() используется для создания объекта оператора, а затем ExecuteQuery() метод используется для выполнения запроса и получения объекта набора результатов.

Первый вызов набора результатов следующий() вызов метода перемещает курсор в первую строку, а последующие вызовы перемещают курсор в следующие строки в наборе результатов. Если строк больше нет, то он возвращает значение false и выходит из цикла while. Мы используем метод результирующего набора getXXX() для получения значений столбцов, а затем записываем их в консоль.

Когда мы запускаем приведенный выше пример тестовой программы jdbc, мы получаем следующий вывод.

1,Pankaj,pankaj@apple.com,India,pankaj123
4,David,david@gmail.com,USA,david123
5,Raman,raman@google.com,UK,raman123

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

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

Загрузите проект по ссылке ниже и запустите различные сценарии для лучшего понимания.