- Lesson: JDBC Basics
- Часть 1. Введение в SQL
- Виды СУБД
- SQL
- JDBC
- Первая программа
- Разбор кода
- Блок констант:
- Обработка ошибок:
- Логика работы:
- How to Use Databases in Java
- How to Connect to a Database in Java
- Create a Statement Object for Database Queries
- How to Execute a Database Query in Java
- Closing Database Connections in Java
- Final Thoughts on Working with Database in Java
Lesson: JDBC Basics
In this lesson you will learn the basics of the JDBC API.
- Getting Started sets up a basic database development environment and shows you how to compile and run the JDBC tutorial samples.
- Processing SQL Statements with JDBC outlines the steps required to process any SQL statement. The pages that follow describe these steps in more detail:
- Establishing a Connection connects you to your database.
- Connecting with DataSource Objects shows you how to connect to your database with DataSource objects, the preferred way of getting a connection to a data source.
- Handling SQLExceptions shows you how to handle exceptions caused by database errors.
- Setting Up Tables describes all the database tables used in the JDBC tutorial samples and how to create and populate tables with JDBC API and SQL scripts.
- Retrieving and Modifying Values from Result Sets develop the process of configuring your database, sending queries, and retrieving data from your database.
- Using Prepared Statements describes a more flexible way to create database queries.
- Using Transactions shows you how to control when a database query is actually executed.
- Using JdbcRowSet Objects
- Using CachedRowSetObjets
- Using JoinRowSet Objects
- Using FilteredRowSet Objects
- Using WebRowSet Objects
- Using Large Objects
- Using SQLXML Objects
- Using Array Objects
- Using DISTINCT Data Type
- Using Structured Objects
- Using Customized Type Mappings
- Using Datalink Objects
- Using RowId Objects
Часть 1. Введение в SQL
Эта статья открывает небольшой цикл, посвященный азам взаимодействия с базами данных (БД) в Java и введению в SQL. Многие программы заняты обработкой и модификацией информации, её поддержкой в актуальном состоянии. Поскольку данные — весьма важная часть логики программ, то под них зачастую выделяют отдельное хранилище. Информация в нём структурирована и подчинена специальным правилам, чтобы обеспечить правильность обработки и хранения. Доступ к данным и их изменение осуществляется с помощью специального языка запросов — SQL (Structured Query Language).
Система управления базами данных — это ПО, которое обеспечивает взаимодействие разных внешних программ с данными и дополнительные службы (журналирование, восстановление, резервное копирование и тому подобное), в том числе посредством SQL. То есть программная прослойка между данными и внешними программами с ними работающими. В этой части ответим на вопросы что такое SQL, что такое SQL сервер и создадим первую программу для взаимодействия с СУБД.
Виды СУБД
- Иерархические. Данные организованы в виде древовидной структуры. Пример — файловая система, которая начинается с корня диска и далее прирастает ветвями файлов разных типов и папок разной степени вложенности.
- Сетевые. Видоизменение иерархической, у каждого узла может быть больше одного родителя.
- Объектно-ориентированные. Данные организованы в виде классов/объектов c их атрибутами и принципами взаимодействия согласно ООП.
- Реляционные. Данные этого вида СУБД организованы в таблицах. Таблицы могут быть связаны друг с другом, информация в них структурирована.
SQL
- Что такое SQL-Сервер и как он работает? Взаимодействие с СУБД происходит по клиент-серверному принципу. Некая внешняя программа посылает запрос в виде операторов и команд на языке SQL, СУБД его обрабатывает и высылает ответ. Для упрощения примем, что SQL Сервер = СУБД.
- Data Definition Language (DDL) – определения данных. Создание структуры БД и её объектов;
- Data Manipulation Language(DML) – собственно взаимодействие с данными: вставка, удаление, изменение и чтение;
- Transaction Control Language (TCL) – управление транзакциями;
- Data Control Language(DCL) – управление правами доступа к данным и структурам БД.
JDBC
В 80-е годы прошлого века персональные компьютеры типа PC XT/AT завоевали рынок. Во многом это произошло благодаря модульности их конструкции. Это означает, что пользователь мог довольно просто менять ту или иную составную часть своего компьютера (процессор, видеокарту, диски и тому подобное). Это замечательное свойство сохранилось и поныне: мы меняем видеокарту и обновляем драйвер (иногда он и вовсе обновляется сам, в автоматическом режиме). Чаще всего при таких манипуляциях ничего плохого не происходит, и существующие программы продолжат работать с обновившейся системой без переустановки. Аналогично и для работы в Java с СУБД. Для стандартизации работы с SQL-серверами взаимодействие с ней можно выполнять через единую точку — JDBC (Java DataBase Connectivity). Она представляет собой реализацию пакета java.sql для работы с СУБД. Производители всех популярных SQL-серверов выпускают для них драйверы JDBC. Рассмотрим схему ниже. Приложение использует экземпляры классов из java.sql. Затем мы передаем необходимые команды для получения/модификации данных. Далее java.sql через jdbc-драйвер взаимодействует с СУБД и возвращает нам готовый результат. Для перехода на СУБД другого производителя часто достаточно сменить JDBC и выполнить базовые настройки. Остальные части программы при этом не меняются.
Первая программа
Приступим к практической части. Создадим Java-проект с помощью IDE JetBrains IntelliJ IDEA. Заметим, что редакция Ultimate Edition содержит в своём составе замечательный инструмент для работы с SQL и БД — Data Grip. Однако она платная для большинства пользователей. Так что нам для учебных целей остается использовать общедоступную IntelliJ IDEA Community Edition. Итак:
- Запускаем IDE и создадём новый проект:
- Выбираем Java-проект, указываем версию SDK (в примере JDK8, однако это не критично):
- На следующем шаге выбираем в качестве типа консольное приложение:
- Указываем имя проекта, пакет и его размещение на диске (я создал специально для этого отдельную директорию):
- Отложим на минуту IDE и загрузим c www.h2database.com необходимый JDBC-файл для работы c СУБД H2 (download platform independent ZIP):
- Заходим внутрь скачанного файла (нас интересует jar-файл по пути h2\bin, который нам далее понадобится, скопируем его):
- Возвращаемся в IDE и создаём в корне проекта директории: db, где будут размещены файлы с данными СУБД; lib – здесь JAR-библиотека JDBC:
- Переносим в директорию lib jar-файл из шага 6, и добавим его в проект как библиотеку:
- Переименуем java-файл в src/sql/demo на StockExchange.java (если забыли, мы собираемся эмулировать простую «биржу»), поменяем его содержимое и запустим:
Теперь мы умеем подключаться к СУБД и отключаться от неё. Каждый шаг отражается в консоли. При первом подключении к СУБД создаётся файл базы данных stockExchange.mv.db.
Разбор кода
package sql.demo; import java.sql.*; public class StockExchangeDB < // Блок объявления констант public static final String DB_URL = "jdbc:h2:/c:/JavaPrj/SQLDemo/db/stockExchange"; public static final String DB_Driver = "org.h2.Driver"; public static void main(String[] args) < try < Class.forName(DB_Driver); //Проверяем наличие JDBC драйвера для работы с БД Connection connection = DriverManager.getConnection(DB_URL);//соединениесБД System.out.println("Соединение с СУБД выполнено."); connection.close(); // отключение от БД System.out.println("Отключение от СУБД выполнено."); >catch (ClassNotFoundException e) < e.printStackTrace(); // обработка ошибки Class.forName System.out.println("JDBC драйвер для СУБД не найден!"); >catch (SQLException e) < e.printStackTrace(); // обработка ошибок DriverManager.getConnection System.out.println("Ошибка SQL !"); >> >
Блок констант:
- DB_Driver: Здесь мы определили имя драйвера, которое можно узнать, например, кликнув мышкой на подключенную библиотеку и развернув её структуру в директории lib текущего проекта.
- DB_URL: Адрес нашей базы данных. Состоит из данных, разделённых двоеточием:
- Протокол=jdbc
- Вендор (производитель/наименование) СУБД=h2
- Расположение СУБД, в нашем случае путь до файла (c:/JavaPrj/SQLDemo/db/stockExchange). Для сетевых СУБД тут дополнительно указываются имена или IP адреса удалённых серверов, TCP/UDP номера портов и так далее.
Обработка ошибок:
Вызов методов нашего кода может вернуть ошибки, на которые следует обратить внимание. На данном этапе мы просто информируем о них в консоли. Заметим, что ошибки при работе с СУБД — это чаще всего SQLException.
Логика работы:
- Class.forName(DB_Driver) – убеждаемся в наличии соответствующего JDBC-драйвера (который мы ранее загрузили и установили).
- DriverManager.getConnection(DB_URL) – устанавливаем соединение СУБД. По переданному адресу, JDBC сама определит тип и местоположение нашей СУБД и вернёт Connection, который мы можем использовать для связи с БД.
- connection.close() – закрываем соединение с СУБД и завершаем работу с программой.
How to Use Databases in Java
Developer.com content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.
The Java Database Connectivity (JDBC) API allows developers to make their Java applications interact with any data source such as a database, spreadsheet or even a legacy file system.
In order to begin interacting with a database, you need to download a JDBC driver for your particular database (Oracle DB, MySQL, etc). This Java tutorial will be using the MySQL database. Regardless of the database you are using, however, the steps below will still apply to it.
If you enjoy learning how to program Java in an online course environment, we have a great list of the Best Online Courses to Learn Java to help you get started.
How to Connect to a Database in Java
The first step to connecting to a database with Java is to import the necessary packages, namely: java.io.* and java.sql.*. Next, you need to initialize the JDBC drivers in your application. If you are using MySQL, you can download the database connector from the official site here.
After downloading the driver, ensure that you add it to the $CLASSPATH of your application. This is a very important step. If you fail to do so, your Java application will not know where to find the DriverManager on your system.
To initialize the database driver, use the Class.forName() method, as shown in the code snippet below:
Class.forName("com.mysql.cj.jdbc.Driver"); // to initialize mysql driver
Once this is complete, you can go ahead and create a database connection. To do so, you need to create a connection object from either the DriverManager class or the DataSource class. The DriverManager class is easier to use and is therefore the one used in this tutorial.
Connection con = DriverManager.getConnection(url, username, password);
The getConnection() method of the DriverManager enables programmers to create a database connection. It requires the following three parameters:
- url: This is the database URL. The format is:
jdbc:mysql://localhost:3306/school.
mysql is the name of the database server you are using. localhost is the address of the server. 3306 is the port on which your database server is running. For MySQL, port 3306 is the default port. school is the name of the database you want to connect to. If you are not sure of the port your database server is using, you can check this using:
Create a Statement Object for Database Queries
After creating a connection, you can now create a statement object to handle your database queries. There are three different methods that you can use to do this:
- createStatement(): This implements a simple SQL statement
- createPreparedStatement(): This is used to implement prepared statements
- createCallableStatement(): This is used to implement stored procedures
You can create a statement object in Java with the following example code:
Statement st = con.createStatement();
How to Execute a Database Query in Java
The next step is to execute your query. When you do this, Java returns a ResultSet object. This object contains the results of your query. You can access data in a ResultSet through a database cursor, which allows you to traverse the rows of the result set. This cursor is initially placed before the first row of your data.
You can traverse the rows using the next() method, as shown in the following example Java code:
ResultSet rs = st.executeQuery(query); rs.next();
There are three execute() methods that developers can use with their statement object:
- execute()
- executeQuery(): This returns one ResultSet object
- executeUpdate(): This returns an integer value for the number of rows affected by an execution. This method is only applicable to INSERT, UPDATE, and DELETE statements.
An example of using executeQuery() would be:
ResultSet rs = st.executeQuery(query);
Closing Database Connections in Java
After your application is done interacting with the database, you need to close the connections to release the system resources in use. The close() method enables you to do this.
It is now time to look at a fully working code example to demonstrate the above concepts. The code below gets the list of students from the school database. You must have initially created this database and seeded it with some values in order for the code to work, so be sure you do so before running it.
Code example showing how to work with databases in Java:
import java.io.*; import java.sql.*; public class ConnectDB < public static void main(String[] args) throws Exception < String url = "jdbc:mysql://localhost:3306/school"; // database URL String username = "root"; String password = "pass4567"; try< Class.forName("com.mysql.cj.jdbc.Driver"); Connection con = DriverManager.getConnection(url, username, password); System.out.println("Connection successful. "); String query= "select * from student"; Statement st = con.createStatement(); ResultSet rs = st.executeQuery(query); rs.next(); String firstName = rs.getString("fname"); System.out.println(firstName); rs.close(); st.close(); con.close(); System.out.println("Connection closed. "); >catch (Exception e) < System.out.println(e); >> >
This results in the following output:
Connection successful. Jimmy Connection closed.
Final Thoughts on Working with Database in Java
In this programming tutorial you learned how you can use the JDBC API to connect to your database in Java. Remember, it is important for you to close all database connections after making any queries. This will ensure that your application keeps at optimal performance and also safeguards its security.