Введение в SQL. Подключение БД и создание консольного Java приложения, JDBC

JDBC. Подключение БД и создание консольного Java приложения в IntelliJ IDEA

Введение

Эта статья открывает небольшой цикл, посвященный азам взаимодействия с базами данных (БД) в Java и введению в SQL. Многие программы заняты обработкой и модификацией информации, её поддержкой в актуальном состоянии. Поскольку данные — весьма важная часть логики программ, то под них зачастую выделяют отдельное хранилище. Информация в нём структурирована и подчинена специальным правилам, чтобы обеспечить правильность обработки и хранения. Доступ к данным и их изменение осуществляется с помощью специального языка запросов — SQL (Structured Query Language). Система управления базами данных — это ПО, которое обеспечивает взаимодействие разных внешних программ с данными и дополнительные службы (журналирование, восстановление, резервное копирование и тому подобное), в том числе посредством SQL. То есть программная прослойка между данными и внешними программами с ними работающими. В этой части ответим на вопросы что такое SQL, что такое SQL сервер и создадим первую программу для взаимодействия с СУБД.

Виды СУБД

Существует несколько видов СУБД по способу организации хранения данных:
  • Иерархические. Данные организованы в виде древовидной структуры. Пример — файловая система, которая начинается с корня диска и далее прирастает ветвями файлов разных типов и папок разной степени вложенности.
  • Сетевые. Видоизменение иерархической, у каждого узла может быть больше одного родителя.
  • Объектно-ориентированные. Данные организованы в виде классов/объектов c их атрибутами и принципами взаимодействия согласно ООП.
  • Реляционные. Данные этого вида СУБД организованы в таблицах. Таблицы могут быть связаны друг с другом, информация в них структурирована.
В цикле статей будем рассматривать именно реляционные СУБД (как самые распространённые) на примере h3 и создавать с нуля приложение, эмулирующую подобие работы биржи. Вопрос: Почему не PostgreSQL, MySQL, MSSQL или Oracle? Ответ: Чтобы не отвлекаться на вопросы установки отдельного комплекса программ. Дальнейшей настройки, создания БД, тонкостей работы в разных ОС, версий. Для работы с h3 необходимо совершить минимум действий. Но ничего не мешает поменять текущую h3 JDBC на реляционную СУБД другого производителя (изменяется только строка адреса сервера и имя класса драйвера).

SQL

Внешние программы формируют запросы к СУБД на языке управления данными Structured Query Language. Что такое SQL и чем отличается от привычных языков программирования? Одна из особенностей SQL – декларативность. То есть,
SQL — декларативный язык
. Это значит, что, вбивая команды, то есть, создавая запросы к SQL-серверу, мы описываем, что именно хотим получить, а не каким способом. Посылая серверу запрос SELECT * FROM CUSTOMER (приблизительный перевод с SQL на русский: «сделать выборку из таблицы COSTUMER, выборка состоит из всех строк таблица»), мы получим данные по всем пользователям. Совершенно неважно, как и откуда сервер загрузит и сформирует интересующие нас данные. Главное – правильно сформулировать запрос.
  • Что такое SQL-Сервер и как он работает? Взаимодействие с СУБД происходит по клиент-серверному принципу. Некая внешняя программа посылает запрос в виде операторов и команд на языке SQL, СУБД его обрабатывает и высылает ответ. Для упрощения примем, что SQL Сервер = СУБД.
Если вы умеете управлять легковым автомобилем одной марки, вы, скорее всего, без особых проблем сможете сесть за руль и других. Основы вождения везде одинаковы, за исключением небольших деталей. Аналогично и для SQL-серверов разных производителей — у каждого из них своя версия SQL, но она удовлетворяет заданным стандартам (SQL92, SQL2003 …). Мы будем использовать операторы и команды в рамках SQL92.
Основные SQL-операторы подразделяют на следующие группы:
  • Data Definition Language (DDL) – определения данных. Создание структуры БД и её объектов;
  • Data Manipulation Language(DML) – собственно взаимодействие с данными: вставка, удаление, изменение и чтение;
  • Transaction Control Language (TCL) – управление транзакциями;
  • Data Control Language(DCL) – управление правами доступа к данным и структурам БД.
В цикле статей мы рассмотрим первые три группы, особо уделяя внимание DML.

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. Итак:
  1. Запускаем IDE и создадём новый проект:

  2. Выбираем Java-проект, указываем версию SDK (в примере JDK8, однако это не критично):

  3. На следующем шаге выбираем в качестве типа консольное приложение:

  4. Указываем имя проекта, пакет и его размещение на диске (я создал специально для этого отдельную директорию):

  5. Отложим на минуту IDE и загрузим c www.h3database.com необходимый JDBC-файл для работы c СУБД h3 (download platform independent ZIP):

  6. Заходим внутрь скачанного файла (нас интересует jar-файл по пути h3\bin, который нам далее понадобится, скопируем его):

  7. Возвращаемся в IDE и создаём в корне проекта директории: db, где будут размещены файлы с данными СУБД; lib – здесь JAR-библиотека JDBC:

  8. Переносим в директорию lib jar-файл из шага 6, и добавим его в проект как библиотеку:

  9. Переименуем 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:h3:/c:/JavaPrj/SQLDemo/db/stockExchange";
    public static final String DB_Driver = "org.h3.Driver";

    public static void main(String[] args) {
        try {
            Class.forName(DB_Driver); 
            Connection connection = DriverManager.getConnection(DB_URL);
            System.out.println("Соединение с СУБД выполнено.");
            connection.close();       
            System.out.println("Отключение от СУБД выполнено.");
        } catch (ClassNotFoundException e) {
            e.printStackTrace(); 
            System.out.println("JDBC драйвер для СУБД не найден!");
        } catch (SQLException e) {
            e.printStackTrace(); 
            System.out.println("Ошибка SQL !");
        }
    }
}

Блок констант:

  1. DB_Driver: Здесь мы определили имя драйвера, которое можно узнать, например, кликнув мышкой на подключенную библиотеку и развернув её структуру в директории lib текущего проекта.
  2. DB_URL: Адрес нашей базы данных. Состоит из данных, разделённых двоеточием:
  3. Протокол=jdbc
  4. Вендор (производитель/наименование) СУБД=h3
  5. Расположение СУБД, в нашем случае путь до файла (c:/JavaPrj/SQLDemo/db/stockExchange). Для сетевых СУБД тут дополнительно указываются имена или IP адреса удалённых серверов, TCP/UDP номера портов и так далее.

Обработка ошибок:

Вызов методов нашего кода может вернуть ошибки, на которые следует обратить внимание. На данном этапе мы просто информируем о них в консоли. Заметим, что ошибки при работе с СУБД — это чаще всего SQLException.

Логика работы:

  1. Class.forName(DB_Driver) – убеждаемся в наличии соответствующего JDBC-драйвера (который мы ранее загрузили и установили).
  2. DriverManager.getConnection(DB_URL) – устанавливаем соединение СУБД. По переданному адресу, JDBC сама определит тип и местоположение нашей СУБД и вернёт Connection, который мы можем использовать для связи с БД.
  3. connection.close() – закрываем соединение с СУБД и завершаем работу с программой.
В следующей части цикла мы познакомимся с DDL-операторами и типами SQL-данных, а также создадим начальную структуру нашей БД и наполним её таблицами. Вторая часть Третья часть

javarush.ru

Работа с базой данных MySql в Java

Это 5 статья из цикла статей: «Простой сайт на Java» и сегодня мы поговорим о работе с базой данных в Java. На повестке дня:

  • создание записи;
  • выбор всех записей;
  • изменение, удаление записей;
  • выбор по определенному параметру.

Перез началом, настоятельно рекомендую почитать теорию об SQL.

Для создания запроса создается объект PreparedStatement. Его удобнее использовать для отправки операторов SQL в базу данных. Этот особый тип инструкции выводится из более общего класса, Statement.

PreparedStatement создается не как обычный новый объект. Он берется как результат метода prepareStatement объекта Connection. Общий вид записи будет выглядеть так:

  1. Connection con = ConnectionPool.getInstance().getConnection(); — получение соединения с базой данных

Чтобы выполнить запрос нужно вызвать метод executeUpdate() для создания, редактирования, удаления записи или executeQuery() для извлечения записи. Метод executeQuery() возвращает ResultSet объект из которого уже можно получить данные и использовать их для наших целей. Чтобы долго не расписывать теорию предлагаю сразу перейти к примерам.

В прошлой статье мы уже создали базу данных и создали пул соединений. Теперь пришло время поработать с базой.

В этой статье будет показано пример работы с таблицей Article. Работу с остальными доменными классами можно будет посмотреть в видео или скачать готовый код, который будет в конце статьи.

Для начала нужно извлечь все данные с таблицы article:

  1. public List<Article> getAllArticles() {

  2.         List<Article> articles = new ArrayList<Article>();//создаем список статей. пока пустой

  3.         Article article = null;

  4.         Connection con = ConnectionPool.getInstance().getConnection();
  5.         try {//PreparedStatement выбрасывает SQLException. Поэтому, нужно всегда следить за тем, чтобы код был обработан обработчиком try-catch

  6.             PreparedStatement pr = con.prepareStatement(«select id, title, body, category_id, users_id from article»);
  7.             ResultSet rs = pr.executeQuery();
  8.             while (rs.next()){//пока у ResultSet есть данные

  9.                 article = new Article();

  10.                 article.setId(rs.getInt(1));//вынимаем данные в том порядке, в котором мы указали в запросе. Можно выбирать не по

  11. //цифре, а по имени поля в таблице базы например можно было бы указать rs.getInt(«id»)

  12.                 article.setTitle(rs.getString(2));

  13.                 article.setBody(rs.getString(3));

  14.                 Category category = new Category();//не забываем о вложенных объектах

  15.                 category.setId(rs.getInt(4));

  16.                 article.setCategory(category);

  17.                 Users user = new Users();

  18.                 user.setId(rs.getInt(5));

  19.                 article.setUsers(user);

  20.                 articles.add(article);

  21.             }

  22.             // TODO Auto-generated catch block

  23.             e.printStackTrace();

  24.         }

  25.         try {

  26.             con.close();//после выполнения запроса нужно закрыть соединение

  27. //метод close тоже выбрасывает исключение. Для избежания громоздких записей лучше обработать исключение один раз в отдельном методе например closeConnection

  28. //и потом вызывать только его

  29.             // TODO Auto-generated catch block

  30.             e.printStackTrace();

  31.         }

  32.         return articles;

  33.     }

Такой же механизм и в выборе данных по определенному критерию:

  1. public Article getArticleById(int id) {

  2.         Article article = null;

  3.         Connection connection = ConnectionPool.getInstance().getConnection();
  4.         try {

  5.             PreparedStatement pr = connection.prepareStatement(«select id, title, body, «
  6.                     + «category_id, users_id from article where id=?»);

  7.             pr.setInt(1, id);//то, что нужно вставить вместо первого знака вопроса

  8. //можно было бы написать «select id, title, body, » + «category_id, users_id from article whereli1″>

    //но в целях безопасности советую подставлять значение через метод сет.

  9.             ResultSet rs = pr.executeQuery();
  10.             if (rs.next()){

  11.                 article = new Article();

  12.                 article.setId(rs.getInt(1));

  13.                 article.setTitle(rs.getString(2));

  14.                 article.setBody(rs.getString(3));

  15.                 Category category = new Category();

  16.                 category.setId(rs.getInt(4));

  17.                 article.setCategory(category);

  18.                 Users user = new Users();

  19.                 user.setId(rs.getInt(5));

  20.                 article.setUsers(user);

  21.             }

java-master.com

Работа с базой данных Java DB (Derby)

Вь этом документе описывается настройка соединения с базой данных Java DB в IDE NetBeans. По завершении установки подключения можно начинать работу с базой данных в среде IDE, позволяющей создавать таблицы, заполнять их данными, выполнять операторы и запросы SQL и т.д.

База данных Java DB является поддерживаемым корпорацией Sun дистрибутивом Apache Derby. Java DB — полностью транзакционный безопасный сервер базы данных на основе стандартов, написанный целиком на языке Java, полностью поддерживающий технологии SQL, интерфейс API JDBC и Java EE. База данных Java DB поставляется с сервером приложений GlassFish , а также включена в пакет JDK 6. Дополнительные сведения о базе данных Java DB приведены в официальной документации.

Содержание

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

Примечание.

  • Java DB был установлен при установке JDK 7 или JDK 8 (за исключением Mac OS X). При использовании Mac OS X можно загрузить и установить базу данных Java вручную или использовать базу данных Java, установленную с помощью версии Java EE средства установки IDE NetBeans.

Настройка базы данных

При регистрации сервера GlassFish Server в установленной среде IDE NetBeans база данных Java DB также будет зарегистрирована. Для получения дополнительных сведений обратитесь к разделу Запуск сервера и создание базы данных.

Если сервер GlassFish загружен отдельно, и требуется помощь в регистрации его в среде IDE NetBeans, ознакомьтесь со справкой по среде IDE (F1), раздел Регистрация экземпляра сервера GlassFish.

Если вы только что самостоятельно загрузили Java DB, выполните следующие действия.

  1. Выполните самораспаковывающийся файл. В месте хранения файла будет создана папка javadb. Если требуется, чтобы сервер базы данных находился не в той папке, в которую он был извлечен, его необходимо переместить сразу по завершении загрузки Java DB.
  2. Создайте в системе новый каталог для использования в качестве домашнего каталога для отдельных экземпляров сервера базы данных. Например, можно создать эту папку в корневом каталоге базы данных Java DB (javadb) или в другой папке.

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

  • Подкаталог demo содержит демонстрационные версии программ.
  • Подкаталог bin содержит сценарии для выполнения служебных программ и настройки среды.
  • Подкаталог javadoc содержит документацию по интерфейсу API, созданную из комментариев исходного кода.
  • Подкаталог docs содержит документацию по Java DB.
  • Подкаталог lib содержит архивы JAR базы данных Java DB.

Регистрация базы данных в IDE NetBeans

Теперь, после настройки базы данных, выполните следующие шаги для регистрации Java DB в среде IDE.

  1. В окне ‘Службы’ щелкните правой кнопкой мыши узел базы данных DB Database и выберите ‘Свойства’, чтобы открыть диалоговое окно ‘Настройки  DB Java’.
  2. В текстовое поле «Установка Java DB» введите путь к корневому каталогу Java DB (javadb), указанный в предыдущем шаге.
  3. В качестве местоположения базы данных используйте местоположение по умолчанию, если оно предлагается. Нажмите кнопку «OK».

    Например, на компьютере под управлением Windows местоположение по умолчанию может иметь следующий вид: C:\Documents and Settings\username\.netbeans-derby.

    Примечание. Если поле ‘Расположение базы данных’ пустое необходимо указать путь к каталогу, который содержит базы данных. Если каталога нет, для баз данных потребуется создать каталог.

Запуск сервера и создание базы данных

Параметры меню базы данных Java DB отображаются при щелчке правой кнопкой мыши узла Java DB в окне ‘Службы’. Появившиеся пункты контекстного меню позволяют запускать сервер базы данных и останавливать его работу, создавать новые экземпляры базы данных, а также регистрировать серверы базы данных в среде IDE (как описано в предыдущем действии). Запуск сервера базы данных.

  1. В окне ‘Службы’ щелкните правой кнопкой мыши узел Java DB и выберите ‘Запустить сервер’. Обратите внимание на следующую информацию, выведенную в окне «Вывод» и сообщающую о запуске сервера:
  2. Правой кнопкой мыши щелкните узел Java DB и выберите «Создать базу данных», чтобы открыть диалоговое окно «Создание базы данных DB».
  3. В качестве имени базы данных введите contact.
  4. В качестве имени пользователя и пароля введите nbuser. Нажмите кнопку «ОК».

    Примечание. Поле «Расположение базы данных» указан путь по умолчанию, определенный во время установки Java DB из GlassFish. Если база данных Java DB установлена отдельно, это местоположение может быть другим.

После создания базы данных при развертывании узла ‘Базы данных’ в окне ‘Службы’, можно увидеть, что среда IDE создала соединение с базой данных и что база данных была добавлена в список под узлом Java DB.

Подключение к базе данных

Итак, сервер базы данных успешно запущен, и в среде IDE создан экземпляр базы данных с именем contact. В окне ‘Службы’ в IDE вы можете выполнять следующие общие задачи в структурах баз данных.

  • создание, удаление, изменение таблиц;
  • заполнение таблиц данными;
  • просмотр табличных данных;
  • выполнение операторов SQL и запросов.

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

  1. Разверните узел ‘Базы данных’ в окне ‘Службы’ и найти новую базу данных и узлы подключения к базе данных.

    Узел подключения к базе данных (

netbeans.org

Java и базы данных | Введение

JDBC

Последнее обновление: 08.08.2018

Для хранения данных мы можем использовать различные базы данных — Oracle, MS SQL Server, MySQL, Postgres и т.д. Все эти системы упраления базами данных имеют свои особенности. Главное, что их объединяет это взаимодействие с хранилищем данных посредством команд SQL. И чтобы определить единый механизм взаимодействия с этими СУБД в Java еще начиная с 1996 был введен специальный прикладной интерфейс API, который называется JDBC.

То есть если мы хотим в приложении на языке Java взаимодействовать с базой данных, то необходимо использовать функциональные возможности JDBC. Данный API входит в состав Java (на текущий момент это версия JDBC 4.3), в частности, для работы с JDBC в программе Java достаточно подключить пакет java.sql. Для работы в Java EE есть аналогичный пакет javax.sql, который расширяет возможности JDBC.

Однако не все базы данных могут поддерживаться через JDBC. Для работы с определенной СУБД также необходим специальный драйвер. Каждый разработчик определенной СУБД обычно предоставляет свой драйвер для работы с JDBC. То есть если мы хотим работать с MySQL, то нам потребуется специальный драйвер для работы именно MySQL. Как правило, большиство драйверов доступны в свободном доступе на сайтах соответствующих СУБД. Обычно они представляют JAR-файлы. И преимущество JDBC как раз и состоит в том, что мы абстрагируемся от строения конкретной базы данных, а используем унифицированный интерфейс, который един для всех.

Для взаимодействия с базой данных через JDBC используются запросы SQL. В то же время возможности SQL для работы с каждой конкретной СУБД могут отличаться. Например, в MS SQL Server это T-SQL, в Oracle — это PL/SQL. Но в целом эти разновидности языка SQL не сильно отличаются.

Особенности запуска программы

На процесс компиляции необходимость работы с БД никак не сказывается, но влияет на процесс запуска программы. При запуске программы в командной строке необходимо указать путь к JAR-файлу драйвера после параметра -classpath.


java -classpath путь_к_файлу_драйвера:путь_к_классу_программы  главный_класс_программы

Например, в папке C:\Java располагаются файл программы — Program.java, скомпилированный класс Program и файл драйвер, допустим, MySQL — mysql-connector-java-8.0.11.jar. Для выполнения класса Program мы можем использовать следующую команду:


java -classpath c:\Java\mysql-connector-java-8.0.11.jar;c:\Java Program

Если C:\Java является текущим каталогом, то мы можем сократить команду:


java -classpath mysql-connector-java-8.0.11.jar;. Program

В принципе мы можем и не использовать параметр -classpath, и запустить програму на выполнение обычным способом с помощью команды «java Program». Но в этом случае путь к драйверу должен быть добавлен в переменную Path.

metanit.com

Подключение базы данных MySql | Java master

Мы продолжаем писать простой сайт на языке Java и сегодня настало время подключить базу данных к нашему веб приложению. Подключать мы будем MySql базу данных, но схема будет работать для любой другой реляционной базы. Мы будем использовать jdbc драйвер для подключения. Он очень прост и понятен в обращении.

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

Для начала откроем наше приложение в том виде, в котором мы его оставили с предыдущей статьи. Напомню, что мы подключили статические ресурсы и добавили внешний вид. Хочу сразу уточнить, что так приложение писать не нужно. Я имею ввиду такую последовательность. База данных — это основа всего приложения. С ее проектирования и нужно начинать. Я начал именно с ней, но выложил статьи в разной последовательности. О внешнем виде нужно думать в последнюю очередь.

Тематикой нашего сайта будет простой блог. Как я уже сказал выше, у меня уже есть готовая схема базы данных.

Она очень примитивна и проста. Ее цель показать, как работать с такими вещами.

К стати говоря, создал эту схему я в MySql Workbench — это бесплатное приложение, в котором можно проектировать базу данных, а потом експортировать все это в код. В конце статьи есть подробное видео, где все это проделывается. Поэтому на это мы не будем тратить время.

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

Я намерено опускаю такие термины как EJB, JPA, Entity POJO, хотя мы используем или будем из использовать. Например классы-сущности, которые мы создадим для представления БД — это Entity. Дело в том, что на просторах Интернета есть очень много ресурсов, где все это четко излагается, но очень мало ресурсов, которые действительно показывают: как создать веб приложение с нуля и до запуска в сети Интернет. Я лично, когда начинал изучать веб для джава находил только отдельный статьи, в которых показывались отдельные части веб приложений. В нашей теме, если Вы будете идти от начало и до конца, то сможете написать самое простое, но полноценное приложение на Java, а уже когда начнете изучать все далее, эта практика поможет Вам изучать технологии и фреймворки легче.

Теперь к практике. Создайте в своем приложении новый пакет entity. Должна получиться такая структура:

Теперь в новом пакете нужно создать четыре класса: Article, Category, Role, Users имплементировать интерфейс Serializable для успешной передачи по сети. В видео ниже я использую Netbeans и его стандартные инструменты для генерации этих классов из базы данных. Но все же, я советую для начинающих сделать это вручную, чтобы Вы понимали где откуда берется. В каждом созданном классе нужно создать приватные поля, которые соответствуют названиям из базы данных. Для доступа к полям нужно создать геттеры и сеттеры. Для сравнения объекта нужно создать методы equals hashCode их можно с генерировать в еклипсе. Не плохо было бы добавить метод toString. Приведу пример на Article.

Вот, как выглядит наша таблица article в базе данных. Как видим у нее есть идентификатор id, поля title, body, которые будут хранить соответственно заголовок статьи и текст статьи. Есть поля category_id, users_id, которые будут хранить информацию о категории и пользователи соответственно. Эти поля — идентификаторы из таблиц category и users. Так нам и нужно построить класс Article:

  1.  

  2.     private static final long serialVersionUID = 1L;

  3.  

  4.  

  5.     private Category category;

  6.  

  7.     private Users users;

  8.  

  9.     public Article() {

  10.     }

  11.  

  12.     public String getTitle() {
  13.         return title;

  14.     }

  15.  

  16.     public void setTitle(String title) {
  17.         this.title = title;

  18.     }

  19.  

  20.     public String getBody() {
  21.         return body;

  22.     }

  23.  

  24.     public void setBody(String body) {
  25.         this.body = body;

  26.     }

  27.  

  28.     public Category getCategory() {

  29.         return category;

  30.     }

  31.  

  32.     public void setCategory(Category category) {

  33.         this.category = category;

  34.     }

  35.  

  36.     public Users getUsers() {

  37.         return users;

  38.     }

  39.  

  40.     public void setUsers(Users users) {

  41.         this.users = users;

  42.     }

  43.  

  44.     @Override

  45.     public int hashCode() {

  46.         final int prime = 31;

  47.         int result = 1;

  48.         result = prime * result + ((body == null) ? 0 : body.hashCode());

  49.         result = prime * result + ((category == null) ? 0 : category.hashCode());

  50.         result = prime * result + ((title == null) ? 0 : title.hashCode());

  51.         result = prime * result + ((users == null) ? 0 : users.hashCode());

  52.         return result;

  53.     }

  54.     @Override

  55.     public boolean equals(Object obj) {
  56.         if (this == obj)

  57.             return true;

  58.         if (obj == null)

  59.             return false;

  60.         if (getClass() != obj.getClass())

  61.             return false;

  62.         Article other = (Article) obj;

  63.         if (body == null) {

  64.             if (other.body != null)

  65.                 return false;

  66.         } else if (!body.equals(other.body))

  67.             return false;

java-master.com

Создание простого веб-приложения, использующего базу данных MySQL

Автор: Трой Джуниперо (Troy Giunipero)

В этом документе описана процедура создания простого веб-приложения, которое подключается к серверу базы данных MySQL. Здесь также рассмотрены основные идеи и технологии веб-разработки, такие какJavaServer Pages (JSP), библиотека стандартных тегов JavaServer Pages (JSTL), интерфейс API связи с базами данных Java (JDBC) и двухуровневая архитектура между клиентом и сервером. Этот учебный курс разработан для начинающих разработчиков, обладающих базовыми знаниями в области веб-разработок и желающих применить свои знания к базе данных MySQL.

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

Этот учебный курс является продолжением учебного курса Подключение к базе данных MySQL и в нем предполагается, что уже создана база данных MySQL с именем MyNewDatabase, для которой зарегистрировано подключение в IDE NetBeans. Табличные данные, используемые в этом учебном курсе, содержатся в ifpwafcad.sql и также необходимы для работы с этим учебным курсом. Этот файл SQL создает две таблицы Subject и Counselor и затем заполняет их данными для примера. При необходимости сохраните этот файл на компьютер, затем откройте его в IDE NetBeans и запустите его в базе данных MySQL с именем MyNewDatabase.

Содержание

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

Примечания:

  • Комплект загрузки Java среды IDE NetBeans позволяет пользователям установить сервер GlassFish. Для работы с данным учебным курсом требуется сервер GlassFish.
  • MySQL Connector/J JDBC Driver, необходимый для взаимодействия между платформами и протоколом баз данных MySQL, включен в IDE NetBeans.
  • Если необходимо сравнить проект с работающим решением, можно загрузить демонстрационное приложение.

Планирование структуры

С помощью двухуровневой архитектуры, в которой клиент взаимодействует с сервером напрямую, можно создать простое веб-приложение. В рамках данного учебного курса веб-приложение Java взаимодействует напрямую с базой данных MySQL с использованием API связи с базами данных Java. В сущности, именно драйвер MySQL Connector/J JDBC обеспечивает обмен данными между кодом Java, распознанным сервером приложения (GlassFish), и любым содержимым на SQL, языке, понятном для сервера базы данных (MySQL).

Приложение, создаваемое в этом учебном курсе, предполагает создание двух страниц JSP. На каждой такой странице с помощью HTML и CSS реализован простой интерфейс, и применяется технология JSTL для выполнения логики, напрямую запрашивающей базу данных с вставкой извлеченных данных на двух страницах. В базе данных MySQL MyNewDatabase содержатся две таблицы базы данных Subject и Counselor, которые были созданы при работе с учебным курсом Подключение базы данных MySQL. Рассмотрим следующий двухуровневый сценарий.

Страница приветствия index.jsp представляется пользователю с помощью простой формы HTML. При запросе браузеромindex.jsp код JSTL на странице инициирует запрос в MyNewDatabase. Выполняется извлечение данных из таблицы Subject со вставкой их на страницу перед ее передачей в браузер. При передаче данных о выборе пользователя в форме HTML на странице приветствия инициируется запрос страницы ответов (response.jsp). И снова код JSTL на странице инициирует запрос в MyNewDatabase. На этот раз данные извлекаются из обеих таблиц — Subject и Counselor. После чего выполняется их вставка на страницу, что позволяет пользователю просматривать данные в зависимости от вариантов выбора при возврате страницы в браузер.

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

index.jsp
response.jsp

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

Сначала необходимо создать новый веб-проект в среде IDE:

  1. Выберите «Файл > Новый проект» (CTRL+SHIFT+N; &#8984+SHIFT+N в Mac ОС) в главном меню. Выберите категорию «Java Web», а затем выберите «Веб-прилож

netbeans.org

Установление связи с базой данных с использованием JDBC

Содержание

1 Введение
2 Интерфейсы Connection и DatabaseMetaData и класс DriverManager
3 Java Data Objects

Введение

JDBC является библиотекой Java 2 Standard Edition (J2SE), используемой для взаимодействия с базами данных SQL. Для изучения данной статьи вам потребуется доступ к базе данных. Если у вас не установлены базы данных, можно воспользоваться базой данных MYSQL, бесплатной БД, которую можно скачать на сайте www.mysql.org. Она работает во многих операционных средах.

Кроме работающей БД, вам также потребуется JDBC-драйвер. И хотя JDBC может работать почти со всеми базами данных, вам потребуется отдельный драйвер, предназначенный именно для вашей базы данных. Драйвера могут быть различными, некоторые из них могут работать даже с несколькими базами данных. Скачать их можно, воспользовавшись ссылкой JDBC Technology — Drivers.

Драйвер отображает JDBC-команды на используемую вами базу данных. Для MySQL драйвер можно найти на сайтах Sourceforge.net и MySQL.org.

Для работы с JDBC-библиотеками вам необходимо запустить сервер БД и JDBC-драйвер. Как и при работе с любыми классами, необходимо сделать классы JDBC-драйвера доступными для компилятора и рабочего окружения. Сконфигурируйте переменную окружения CLASPATH или скопируйте соответствующий JAR-файл со всеми его классами в директорию $JAVA_HOME/jre/lib/ext, расположенную в основной инсталляционной директории Java 2 Platform (J2SE).

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

Шаг 1: Загрузите необходимый JDBC драйвер. Заметьте, что сделать классы доступными для рабочего окружения недостаточно.

Шаг 2: Установите соединение с базой данных. Соединение включает в себя указание на определенный источник данных. От этого источника зависит выбор необходимого драйвера.

Далее представлены способы, позволяющие осуществить выполнение этих шагов.

Шаг 1: Загрузка JDBC-драйвера

При поверхностном рассмотрении JDBC-драйверы можно считать классами. Они должны реализовывать интерфейс java.sql.Driver, однако разработчикам редко требуется использовать этот интерфейс напрямую. Единственным требованием к реализации драйвера является то, что при загрузке класс должен самостоятельно регистрироваться при помощи java.sql.DriverManager. Выполнение данного требования находится под ответственностью поставщика драйвера, но ни в коем случае не пользователя. Вам необходимо только загрузить класс, причем сделать это можно тремя различными способами:

Первый возможный способ загрузки JDBC-драйвера:

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

Например, если в пути для доступа к SQL прописано mysql-2.0.13-bin.jar, вам потребуется создать экземпляр класса org.gjt.mm.mysql.Driver:

Driver d = new org.gjt.mm.mysql.Driver();

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

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

Второй возможный способ загрузки JDBC-драйвера:

Можно избежать создания двух экземпляров драйвера путем передачи в строке методу forName класса Class имени класса. Данное имя класса должно быть полностью пригодным (например, в случае с MySQL-драйвером им может быть org.gjt.mm.mysql.Driver) и задаваться в кавычках:

Class.forName("org.gjt.mm.mysql.Driver");

В обоих из этих случаев жестко задается имя драйвера базы данных, однако предпочтительнее использовать второй способ. Так как драйвер динамически загружается во время рабочего цикла, то при компиляции классам драйвера вовсе не обязательно быть доступными. При этом вам не требуется жестко задавать строку. Все что вы можете сделать – это извлечь имя драйвера из командной строки (или откуда-либо еще) и передать его. Таким образом, ваша программа будет работать и с MySQL, и с любым другим сервером БД, не требуя при этом никаких изменений или перекомпиляций кода.

String driver = args[0];
Class.forName(driver);

Третий способ загрузки JDBC-драйвера:

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

java -Djdbc.drivers=org.gjt.mm.mysql.Driver ProgName

Теперь в случае необходимости драйвер будет автоматически доступен для DriverManager. Если необходимо сделать доступными несколько драйверов, напишите их список, разделив элементы знаком «двоеточие».

Шаг 2: Установление соединения с базой данных

Источники данных идентифицируются при помощи URI-адреса, начинающегося с “jdbc:”. Продолжение строки зависит от вашего JDBC-драйвера. Каждому драйверу соответствует уникальная строка для отображения на драйвер, а также определенный механизм для локализации сервера, с которым должен будет взаимодействовать драйвер.

В случае драйвера MySQL, используется строка «mysql», а локализация задается другим URI. Полная строка будет иметь следующий формат:

jdbc:mysql://[hostname][:port]/[dbname][?param1=value1][¶m2=value2].....

Более конкретно, если хост, с которым вы хотите установить соединение, расположен на вашей же машине, именем базы данных является test и вам не требуется проверка имени пользователя и пароля, то в конечном итоге строка примет следующий вид:

jdbc:mysql://localhost/test

Если у вас есть соответствующий URI, необходимый для идентификации драйвера, и драйвер, который может установить соединение с источником данных, то возможно фактическое соединение с источником. Для подобного поиска DriverManager обеспечивает метод getConnection. Данный метод возвращает объект Connection от первого драйвера, поддерживающего специальный протокол (в данном случае mysql). Если протокол не поддерживается ни одним зарегистрированным драйвером, то во время рабочего цикла возникнет ошибка.

String uri = "jdbc:mysql://localhost/test";
Connection con =
   DriverManager.getConnection(uri, username, password);

Имя субпротокола (в данном случае mysql) определено в документации для JDBC-драйвера.

После установки соединения доступ к источнику данных становится открытым. Тем не менее, существует и второй способ, позволяющий идентифицировать и устанавливать соединение с источником данных. Источники данных могут быть получены посредством именной службы JNDI (Java Naming and Directory Interface).

Устанавливая соединение при помощи интерфейса JNDI, вместо DriverManager используется DriverSource и Context. Конкретнее, в случае MySQL реализацией javax.sql.DriverSource является класс org.gjt.mm.mysql.jdbc2.optional.MysqlDataSource, который обычно регистрируется вне области действия приложения. Вашему приложению остается только найти источник данных, основываясь на имени, привязанному к контексту.

Context ctx = new InitialContext();
ctx.addToEnvironment(Context.INITIAL_CONTEXT_FACTORY,
   "com.sun.jndi.fscontext.RefFSContextFactory");
DataSource ds = (DataSource)ctx.lookup("/tmp/jdbc/test");
Connection con = ds.getConnection(username, password);

Установив соединение, вы получаете доступ к базе данных, так же, как и при поиске DriverManager. Поиск DriverManager обычно производится в контексте приложения J2EE.

О наличие доступа к JNDI окружению станет известно, так как обычно оно не настроено только на поиск JDBC-источника.

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

Проверить полученные знания можно при помощи он-лайн теста.

Интерфейсы Connection и DatabaseMetaData и класс DriverManager

JDBC обеспечивает программный интерфейс API, позволяющий при помощи языка программирования Java получать доступ к данным, хранимым в таких источниках, как реляционная база данных, а также обрабатывать их. API включает в себя пакет java.sql, называемый основным API для JDBC, а также пакет javax.sql, являющийся необязательным API для JDBC (он включен в поставку J2SE версии 1.4).

Описываемые здесь интерфейсы и класс можно найти в пакете java.sql.

Интерфейс Connection представляет сессию соединения с базой данных, обеспечиваемую драйвером. Он также обеспечивает методы для создания выражений, управления соединениями и их свойствами. Метод ConnectiongetMetaData:

public DatabaseMetaData getMetaData()

бросает исключение SQLException.

Класс DriverManager является классом утилиты, управляющим JDBC-драйверами. Он содержит список зарегистрированных в системе JDBC-драйверов и устанавливает соединение с драйвером. Данный класс используется в основном для получения ссылки на объект Connection посредством метода getConnection:

  • getConnection(String url) Пытается установить соединение с URL-адресом заданной базы данных.

  • getConnection(String url, Properties info) Пытается установить соединение с URL-адресом заданной базы данных. Параметры: url – адрес в формате jdbc:subprotocol:subname, info – список произвольных пар тег/значение типа String, передаваемых в качестве аргументов соединения. Обычно должна быть включена хотя бы одна пара «имя пользователя»/«пароль».

  • getConnection(String url, String user, String password) Пытается установить соединение с URL-адресом заданной базы данных. Параметры: url – адрес в формате jdbc:subprotocol:subname, user – пользователь базы данных, от имени которого устанавливается соединение, password – пароль пользователя.

Интерфейс DatabaseMetaData обеспечивает информацию о самой базе данных. Некоторые методы в этом интерфейсе принимают форму строк. Метод, извлекающий информацию о свойстве, не поддерживаемом драйвером, бросает исключение SQLException.

Вот несколько методов данного интерфейса:

  • getDriverName Извлекает имя текущего JDBC-драйвера.

  • getDriverVersion Извлекает значение версии JDBC-драйвера в виде строки.

  • getDatabaseProductVersion Извлекает значение версии текущего продукта БД.

Программные задачи
  • Создайте программу, устанавливающую соединение с вашей базой данных

  • Отобразите информацию о базе данных и о драйвере, используемом для установки соединения

Методы для получения доступа к информации о базе данных доступны посредством интерфейса DatabaseMetaData, ассоциированного с соединением.

Возможное решение задачи.

Java Data Objects

JDO (Java Data Objects – объекты данных Java) является программным интерфейсом API, позволяющим устанавливать «прозрачный» доступ к базе данных. Программист может написать код на языке Java, организующий «прозрачный» доступ к основному хранилищу данных, не привлекая для этой цели специальный код БД.

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

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

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

API JDO создается в Java Community Process.

javatutor.net