Java. Основы работы с БД


Содержание

С чего начать изучение java с привязкой к БД (или с связкой с SQL)?

Суть вопроса такова, нужно изучить основы java для работы с реляционными БД (MySQL и т.д.). Ну собственно и с Java, и с SQL я не знаком. То есть нужно изучить java(основы) и SQL. Прошу подсказать соответствующую литературу (с нужным мне уклоном), можно курсы (если free), может кто-то проходил такой же путь, подскажет план обучение и т.д. и т.п.

P.S. Знаком с pascal, delphi, php, ECMAScript, html&css.

  • Вопрос задан более трёх лет назад
  • 1068 просмотров

bromzh: У этого вопроса есть небольшая специфичность, а именно уклон изучения. А «гуглить» я умею и соответствующую общую литературу я нашёл, но без уклона.

И в целом, никак не пойму людей вроде вас, отвечающих на вопросы в вашем стиле и не по сути.

Пять секретов. Соединение Java с базой данных

Освежите свои взаимоотношения с API JDBC

Серия контента:

Этот контент является частью # из серии # статей:

Этот контент является частью серии:

Следите за выходом новых статей этой серии.

Об этом цикле статей

Вы думаете, что знаете о Java-программировании все? На самом деле большинство разработчиков только скребет по поверхности платформы Java, изучив ее лишь настолько, чтобы выполнять свою работу. В этом цикле статей Тед Ньюард углубляется в функциональные возможности платформы Java, выявляя малоизвестные факты, которые могут помочь в решении самых заковыристых задач программирования.

Сегодня многие Java-разработчики взаимодействуют с API Java Database Connectivity (JDBC) через платформу доступа к данным, такую как Hibernate или Spring. Но JDBC — это не только посредник в подключении к базе данных. Чем лучше вы будете знать его, тем эффективнее будет ваша работа с РСУБД.

В этом выпуске цикла Пять секретов… я продемонстрирую несколько новых возможностей, появившихся в период между JDBC 2.0 и JDBC 4.0. Рассчитанные на современные задачи программирования, эти функции способствуют повышению масштабируемости приложений и производительности разработки — решая две важнейшие проблемы, стоящие сегодня перед Java-программистами.

1. Скалярные функции

Развить навыки по этой теме

Этот материал — часть knowledge path для развития ваших навыков. Смотри Стать Java-программистом

Различные реализации СУБД предлагают ту или иную поддержку SQL и/или дополнительные возможности, призванные облегчить жизнь разработчика. Хорошо известно, например, что в SQL есть скалярная операция COUNT() , которая возвращает число строк, удовлетворяющих определенным критериям SQL-фильтрации (то есть утверждения WHERE ). Но в остальных случаях изменить значения, возвращаемые SQL, трудно — и попытка заставить базу данных выдавать текущую дату и время может свести с ума даже самого терпеливого (и смелого) JDBC-разработчика.

В этом плане спецификация JDBC предусматривает определенную степень изоляции/адаптации в отношении различных реализаций СУБД посредством скалярных функций. В спецификации JDBC содержится список поддерживаемых операций, которые драйверы JDBC должны распознавать и по мере необходимости приспосабливать к конкретной реализации базы данных. Для базы данных, которая поддерживает возврат текущей даты или времени, может оказаться достаточным всего лишь того, что показано в листинге 1.

Листинг 1. Который час?

Полный список скалярных функций, поддерживаемых API JDBC, приведен в приложении к спецификации JDBC (см. раздел Ресурсы), но конкретный драйвер или база данных могут не поддерживать весь этот список. С помощью объекта DatabaseMetaData , возвращаемого объектом Connection , можно получить список функций, поддерживаемых данной реализацией JDBC, как показано в листинге 2.

Листинг 2. Что ты можешь?

Список скалярных функций ― это строка ( String ) разделенных запятыми значений, возвращаемая различными методами класса DatabaseMetaData . Например, при вызове getNumericFunctions() перечисляются все числовые скаляры. Примените к результату метод String.split() и —вуаля!— мгновенно появится список equals()-testable .

2. Прокручиваемые наборы ResultSet

В JDBC очень распространена процедура создания (или получения существующего) объекта Connection и его использования для создания объектов Statement . В ответ на выражение SQL SELECT Statement возвращает ResultSet . Затем ResultSet пропускают через цикл while (подобно Iterator ) до тех пор, пока ResultSet не сообщит, что он пуст, причем тело цикла извлекает по одному столбцу за раз слева направо.

Вся эта операция настолько привычна, что ее почти не замечают: она выполняется машинально. Но увы, это совершенно не обязательно.

Прокручиваемый ResultSet

Многим разработчикам невдомек, что с годами JDBC эволюционирует, хотя все усовершенствования отражены в новых номерах версий и выпусках. Первое крупное обновление, JDBC 2.0, появилось где-то во времена выхода JDK 1.2. На момент написания этой статьи JDBC поставляется в версии 4.0.

Одно из интересных (хотя и часто игнорируемых) усовершенствований JDBC 2.0 ― это возможность «прокрутки» набора ResultSet : по мере необходимости его можно пролистывать вперед/назад или даже в обоих направлениях сразу. Однако для этого требуется некоторая предварительная информация — в вызове JDBC в момент создания объекта Statement должно быть сказано, что требуется прокручиваемый ResultSet .

Проверка типа ResultSet

Если, несмотря на то, что сказано в DatabaseMetaData , вы подозреваете, что драйвер может не поддерживать прокручиваемые наборы ResultSet , проверьте тип ResultSet , вызвав метод getType() . Конечно, при такой паранойе можно не доверять и значению, возвращаемому getType() . Что ж, если даже getType() лжет по поводу возвращаемых наборов ResultSet , то они явно прячутся от вас.

Если драйвер JDBC поддерживает прокрутку, то Statement возвратит прокручиваемый ResultSet , но это лучше выяснить до того, как обращаться к нему. О поддержке прокрутки можно узнать посредством объекта DatabaseMetaData , который можно получить посредством любого выражения Connection , как описано выше.

Имея объект DatabaseMetaData и вызвав getJDBCMajorVersion() , можно определить, поддерживает ли драйвер, по крайней мере, спецификацию JDBC 2.0. Конечно, драйвер может солгать о своем уровне поддержки данной спецификации, поэтому для пущей безопасности вызовите метод supportsResultSetType() с желаемым типом ResultSet . (Это константа класса ResultSet ; мы еще поговорим обо всех этих значениях.)

Листинг 3. Поддерживается ли прокрутка?

Запрос прокручиваемого набора ResultSet

Если драйвер сказал «да» (в противном случае необходимо заменить драйвер или базу данных), то можно запросить прокручиваемый объект ResultSet , передав вызову Connection.createStatement() два параметра, как показано в листинге 4.

Листинг 4. Хочу прокрутку!

При вызове createStatement() нужно быть особенно осторожным, потому что и первый, и второй параметры представляют собой значения типа int . (Как жаль, что до Java 5 у нас не было перечислимых типов!) С createStatement() будет работать любое значение int (включая ошибочное значение константы).

Первый параметр, указывающий на желательность «прокручиваемости» ResultSet , может принимать одно из трех допустимых значений:

  • ResultSet.TYPE_FORWARD_ONLY : это значение по умолчанию, знакомый курсор типа пожарного рукава;
  • ResultSet.TYPE_SCROLL_INSENSITIVE : такой ResultSet допускает итерации назад и вперед, но если данные в базе данных изменятся, ResultSet не отразит этого. Пожалуй, этот тип прокручиваемого ResultSet ― наиболее востребованный;
  • ResultSet.TYPE_SCROLL_SENSITIVE : этот тип ResultSet не только допускает двунаправленные итерации, но и создает «живое» представление данных в базе данных по мере их изменения.

Второй параметр обсуждается в следующем совете, так что пока оставим его.

Направленная прокрутка

Для обратной прокрутки ResultSet , полученного посредством выражения Statement , достаточно вызвать функцию previous() , которая направлена назад, а не вперед, как next() . Или же можно вызвать first() , чтобы вернуться в начало набора ResultSet , или last() для перехода в конец, или… придумайте сами.

Также могут быть полезны методы relative() и absolute() : первый перемещает курсор на указанное количество строк (вперед, если значение положительно, или назад, если оно отрицательно), а второй — к указанной строке ResultSet , где бы он ни находился в данный момент. Конечно, номер текущей строки, можно получить с помощью метода getRow() .

Если предполагается много прокрутки в определенном направлении, то может быть полезно указать это направление путем вызова функции setFetchDirection() . ( ResultSet будет работать независимо от направления прокрутки, но знание его наперед позволит оптимизировать процесс извлечения данных.)

3. Редактируемые наборы ResultSet

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

Узнать о поддержке обновляемости ResultSet можно так же, как и о поддержки прокрутки. Здесь-то как раз и используется второй параметр оператора createStatement() . Вместо ResultSet.CONCUR_READ_ONLY укажите в качестве второго параметра ResultSet.CONCUR_UPDATEABLE , как показано в листинге 5.

Листинг 5. Хочу обновляемый ResultSet

Если драйвер поддерживает обновляемые курсоры (это еще одна особенность спецификации JDBC 2.0, которую поддерживает большинство реальных баз данных), то любое заданное значение в ResultSet можно обновить, перейдя в нужную строку и вызвав один из методов update. () (как показано в листинге 6). Как и методов get. () класса ResultSet , существует множество методов update. () для столбцов ResultSet разного типа. Так, чтобы изменить столбец значений с плавающей точкой PRICE , нужно вызвать updateFloat(«PRICE») . Однако это приведет лишь к обновлению значения в наборе ResultSet . Чтобы передать его в базу данных, вызовите updateRow() . Если пользователь передумал менять цену, вызов cancelRowUpdates() отменит все ожидающие обновления.

Листинг 6. Лучший способ

JDBC 2.0 поддерживает не только обновления. Чтобы добавить новую строку без создания нового объекта Statement и выполнения оператора INSERT , просто вызовите метод moveToInsertRow() , метод update. () для каждого столбца, и, наконец, метод insertRow() . Если значение для столбца не указано, предполагается SQL NULL (что может вызывать исключение SQLException , если схема базы данных не допускает значения NULL для этого столбца).

Естественно, если ResultSet поддерживает обновление строки, он должен поддерживать и ее удаление посредством вызова метода deleteRow() .

Да, пока я не забыл, вся эта прокручиваемость и редактируемость в равной мере применима и к PreparedStatement (путем передачи тех же параметров методу prepareStatement() ), который гораздо предпочтительнее обычного Statement ввиду постоянной опасности атак SQL-инъекции.

4. Наборы Rowset

Если вся эта функциональность JDBC известна большую часть десятилетия, то почему же большинство разработчиков все еще сидят на прямой прокрутке наборов ResultSet и разъединенном доступе?

Главная причина ― масштабируемость. Сохранение минимального числа соединений с базой данных ― ключевое условие поддержки большого числа пользователей, которых Интернет может привести на Web-сайт компании. Поскольку для прокрутки и/или редактирования объектов ResultSet обычно требуется открытое соединение с сетью, многие разработчики не хотят (или не могут) их использовать.

К счастью, в JDBC 3.0 появилась альтернатива, которая позволяет делать многое из того, что можно делать с ResultSet , не оставляя подключения к базе данных открытым.

Идея в том, что объект Rowset , по существу, это тот же ResultSet , но допускающий модель как с подключением, так и без него. Для этого достаточно создать Rowset , указать ему на ResultSet , и когда он заполнится, использовать его вместо ResultSet , как показано в листинге 7.

Листинг 7. Rowset вместо ResultSet

В JDBC пять «реализаций» (т.е. расширений) интерфейса Rowset . JdbcRowSet ― это реализация Rowset с подключением; остальные четыре без подключения:

  • CachedRowSet ― это просто Rowset без подключения;
  • WebRowSet — это подкласс CachedRowSet , который «знает», как преобразовать свои результаты в XML и обратно;
  • JoinRowSet ― это WebRowSet , который также «умеет» формировать эквивалент SQL JOIN без необходимости подключения к базе данных;
  • FilteredRowSet ― это WebRowSet , способный еще и отфильтровать полученные данные без необходимости подключения к базе данных.

Классы Rowset ― это полноценные модули JavaBean, которые поддерживают события типа прослушивания, так что любые изменения в Rowset можно зафиксировать, рассмотреть и при необходимости принять. На самом деле, Rowset может даже управлять всем действием в отношении базы данных, если заданы его свойства Username , Password , URL и DatasourceName (т.е. он создаст соединение с использованием DriverManager.getConnection() ) или свойства Datasource (которые, вероятно, можно получить посредством JNDI). Затем можно заказать выполнение SQL в свойстве Command , вызвать execute() и приступать к работе с результатами — больше ничего не требуется.

Реализации Rowset , как правило, предоставляются драйвером JDBC, поэтому фактическое имя и/или пакет будет зависеть от используемого драйвера JDBC. Реализации Rowset стали частью стандартного дистрибутива, начиная с Java 5, поэтому достаточно просто создать . RowsetImpl() и работать. (На тот маловероятный случай, если в драйвере его нет, Sun предлагает эталонную реализацию; см. ссылку в разделе Ресурсы).

5. Пакетные обновления

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

Чтобы определить, поддерживает ли драйвер JDBC пакетные обновления, вызовите DatabaseMetaData.supportsBatchUpdates() , и вы получите однозначный ответ. Если пакетные обновления поддерживаются (на это может указывать все что угодно, кроме SELECT -выражений), составьте очередь и передайте ее одним махом, как показано в листинге 8.

Листинг 8. Лови, база данных!

Вызов setAutoCommit() нужен потому, что по умолчанию драйвер попытается выполнить каждый оператор отдельно. В остальном код предельно прост: обычные SQL-операторы с использованием выражений Statement или PreparedStatement , но взамен метода execute() вызывается метод executeBatch() , который вместо того чтобы сразу отправить запрос, ставит его в очередь.

Когда все готово, отправьте всю очередь в базу данных, вызвав метод executeBatch() ― он возвратит массив целочисленных значений, содержащий те же результаты, что и при использовании метода executeUpdate() .

В том случае, если один из операторов в пакете не прошел, если драйвер не поддерживает пакетные обновления или какой-то оператор из пакета возвращает ResultSet , драйвер выдаст исключение BatchUpdateException . В некоторых случаях драйвер может попытаться продолжить выполнение операторов после выдачи исключения. Спецификация JDBC не определяет конкретного поведения, поэтому мы советуем предварительно поэкспериментировать с драйвером, чтобы точно знать, как он себя ведет. (Конечно же, вы выполните модульные тесты и обнаружите ошибку задолго до того, как она вызовет проблемы, не правда ли?)

Цукерберг рекомендует:  Javascript - Корзина для сайта на JavaScript

Заключение

API JDBC, один из столпов Java-программирования, каждый Java-разработчик должен знать как «Отче наш». Забавно, что большинство программистов не поспевает за усовершенствованиями API, и в результате эти разработчики упускают возможность сэкономить время с помощью приемов, описанных в этой статье.

Конечно, использовать ли новые функции JDBC, решать вам. Главный аспект, требующий рассмотрения, ― это масштабируемость системы, над которой вы работаете. Чем больше ее необходимо наращивать, тем более ограниченным будет доступ к базе данных, и следовательно, тем сильнее придется сокращать сетевой трафик к ней. В этом случае вашими помощниками будут наборы строк Rowset , скалярные вызовы и пакетные обновления. В остальных случаях попробуйте прокручиваемые и обновляемые наборы ResultSet (которые не потребляют так много памяти, как наборы Rowset ) и измерьте их влияние на масштабируемость. Не исключено, что оно не будет так велико, как может показаться.

Далее в цикле 5 секретов…: флаги командной строки.

Соединение с базой данных MySQL в Java

СУБД MySQL предоставляет приложениям Java возможность соединения с базой данных при помощи драйвера MySQL Connector , который реализует интерфейс API Java Database Connectivity (JDBC) . Этот API является независимым от СУБД стандартом связи языка программирования Java с широким спектром баз данных, электронных таблиц и т.п.

API JDBC позволяет осуществлять следующие операции:

  • Устанавливать соединение с базой данных;
  • Выполнять SQL запросы;
  • Обрабатывать результаты, полученные из базы данных.

Далее мы узнаем, как установить и настроить MySQL Connector/J ( драйвер JDBC ), а также используем его при создании приложения.

Версии MySQL Connector/J :

Версия Connector/J Версия JDBC Версия MySQL сервера Статус
5.1 3.0, 4.0 4.1, 5.0, 5.1, 5.5, 5.6, 5.7 Рекомендуемая версия
5.0 3.0 4.1, 5.0 Выпущенная версия
3.1 3.0 4.1, 5.0 Устаревшая
3.0 3.0 3.x, 4.1 Устаревшая

MySQL Connector J — это официальный драйвер JDBC для MySQL . Вы можете загрузить последнюю версию драйвера отсюда . Выберите одну из кроссплатформенных версий:

Или версию для Microsoft Windows :

Установка

Вы можете установить пакет драйверов Connector/J , используя либо бинарный установочный файл, либо исходный код. Метод с установочным файлом прост, поскольку он представляет собой набор библиотек и прочих скомпилированных файлов.

Метод с использованием исходного кода пригодится, если вы хотите настроить или изменить процесс установки. Помимо этого нужно будет вручную добавить путь к Connector/J в переменную Java classpath .

MySQL Connector/J поставляется как архив .zip или .tar.gz , содержащий файлы исходных классов. После распаковки архива установите драйвер, поместив MySQL-connector-java-version-bin.jar в ваш classpath . Для этого добавьте полный путь к нему в переменную окружения classpath или укажите его в параметре -cp при старте JVM .

Переменную окружения classpath можно установить в системах Unix , Linux или Mac OS X локально для пользователя в его файле .profile , .login или ином login-файле . Или же установить её, изменив глобальный файл /etc/profile .

Например, добавьте драйвер MySQL Connector J ava в переменную classpath с помощью любой из следующих команд в зависимости от используемой оболочки командной строки:

В Windows 2000 , Windows XP , Windows Server 2003 и Windows Vista можно установить переменную окружения в панели управления.

Установка Java Connector в Microsoft Windows

Выберите и загрузите нужный вам установщик здесь .

Затем выполните следующие шаги :

Дважды щёлкните по файлу установщика.

Нажмите ‘ Run ‘ и дождитесь завершения процесса.

Соединение с MySQL с помощью MySQL Connector/J

Приведенный ниже пример MySQL Connector показывает, как соединиться с базой данных, разорвать соединение и обработать ошибки.

Версия Java 7 Update 25 (сборка 1.7.0_25-b16):

Чтобы создать jdbc-подключение к базе данных c помощью MySQL Connector ODBC , нужно импортировать следующие пакеты из java.sql :

  • sql.Connection ;
  • sql.DriverManager ;
  • sql.SQLException ;

Далее мы создаём класс ‘ test ‘ и метод main .

Приведенный ниже код создаёт соединение с базой данных:

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

В коде, приведенном выше, мы использовали следующие url-адрес , имя пользователя и пароль:

  • Строка url «jdbc:MySQL://localhost/sakila» , в которой первая часть — « jdbc:MySQL://localhost » — это тип базы данных ( в данном случае MySQL ) и сервер ( в данном случае — localhost ). Остальная часть — название базы данных ( в данном случае — ‘ sakila ‘ ).
  • Имя пользователя MySQL определяется в переменной ‘ userName ‘.
  • Пароль для MySQL определяется в переменной ‘ password ‘.

DriverManager пытается соединиться с базой данных. Если соединение проходит успешно, создаётся объект Connection (сохраняется в переменной ‘ conn ’) и программа отображает сообщение “ Database Connection Established… ” (“ Соединение с базой данных установлено …”).

Если попытка соединения c помощью MySQL Connector оканчивается неудачей ( например, если указан неверный пароль, адрес сервера и т.п .), тогда нужно обработать эту ситуацию. Мы ловим эту ошибку в блоке catch выражения try … catch , отображаем соответствующие сообщения и в конце закрываем соединение.

Компиляция и исполнение кода

Предположим, что файл ‘ test.java ’ находится на диске E :, а ‘ MySQL-connector-java-5.1.31-bin.jar ’ хранится в « C:Program FilesMySQLMySQL Connector J «.

Примечание : Путь class path – это путь, по которому Java Runtime Environment (JRE) ищет классы и другие файлы ресурсов. Можно изменить этот путь, используя опции -classpath или -cp некоторых команд Java , когда вы вызываете JWM или другие инструменты JDK , или изменив переменную окружения classpath .

Запросы к данным с использованием MySQL Connector/J

Предположим, что мы хотим получить имена ( first_name, last_name ) и размер зарплаты ( salary ) работников, которые получают больше средней зарплаты и работают в ИТ-отделе.

Структура базы данных ‘ hr’:

Пример таблицы ‘ работники ’ (‘ employees ’) :

| 100 | Steven | King | SKING | 515.123.4567 | 1987-06-17 | AD_PRES | 24000.00 | 0.00 | 0 | 90 |

| 101 | Neena | Kochhar | NKOCHHAR | 515.123.4568 | 1987-06-18 | AD_VP | 17000.00 | 0.00 | 100 | 90 |

| 102 | Lex | De Haan | LDEHAAN | 515.123.4569 | 1987-06-19 | AD_VP | 17000.00 | 0.00 | 100 | 90 |

| 103 | Alexander | Hunold | AHUNOLD | 590.423.4567 | 1987-06-20 | IT_PROG | 9000.00 | 0.00 | 102 | 60 |

| 104 | Bruce | Ernst | BERNST | 590.423.4568 | 1987-06-21 | IT_PROG | 6000.00 | 0.00 | 103 | 60 |

| 105 | David | Austin | DAUSTIN | 590.423.4569 | 1987-06-22 | IT_PROG | 4800.00 | 0.00 | 103 | 60 |

| 106 | Valli | Pataballa | VPATABAL | 590.423.4560 | 1987-06-23 | IT_PROG | 4800.00 | 0.00 | 103 | 60 |

| 107 | Diana | Lorentz | DLORENTZ | 590.423.5567 | 1987-06-24 | IT_PROG | 4200.00 | 0.00 | 103 | 60 |

| 108 | Nancy | Greenberg | NGREENBE | 515.124.4569 | 1987-06-25 | FI_MGR | 12000.00 | 0.00 | 101 | 100 |

| 109 | Daniel | Faviet | DFAVIET | 515.124.4169 | 1987-06-26 | FI_ACCOUNT | 9000.00 | 0.00 | 108 | 100 |

| 110 | John | Chen | JCHEN | 515.124.4269 | 1987-06-27 | FI_ACCOUNT | 8200.00 | 0.00 | 108 | 100 |

| 111 | Ismael | Sciarra | ISCIARRA | 515.124.4369 | 1987-06-28 | FI_ACCOUNT | 7700.00 | 0.00 | 108 | 100 |

| 112 | Jose Manuel | Urman | JMURMAN | 515.124.4469 | 1987-06-29 | FI_ACCOUNT | 7800.00 | 0.00 | 108 | 100 |

| 113 | Luis | Popp | LPOPP | 515.124.4567 | 1987-06-30 | FI_ACCOUNT | 6900.00 | 0.00 | 108 | 100 |

| 114 | Den | Raphaely | DRAPHEAL | 515.127.4561 | 1987-07-01 | PU_MAN | 11000.00 | 0.00 | 100 | 30 |

| 115 | Alexander | Khoo | AKHOO | 515.127.4562 | 1987-07-02 | PU_CLERK | 3100.00 | 0.00 | 114 | 30 |

| 116 | Shelli | Baida | SBAIDA | 515.127.4563 | 1987-07-03 | PU_CLERK | 2900.00 | 0.00 | 114 | 30 |

| 117 | Sigal | Tobias | STOBIAS | 515.127.4564 | 1987-07-04 | PU_CLERK | 2800.00 | 0.00 | 114 | 30 |

| 118 | Guy | Himuro | GHIMURO | 515.127.4565 | 1987-07-05 | PU_CLERK | 2600.00 | 0.00 | 114 | 30 |

| 119 | Karen | Colmenares | KCOLMENA | 515.127.4566 | 1987-07-06 | PU_CLERK | 2500.00 | 0.00 | 114 | 30 |

| 120 | Matthew | Weiss | MWEISS | 650.123.1234 | 1987-07-07 | ST_MAN | 8000.00 | 0.00 | 100 | 50 |

| 121 | Adam | Fripp | AFRIPP | 650.123.2234 | 1987-07-08 | ST_MAN | 8200.00 | 0.00 | 100 | 50 |

| 122 | Payam | Kaufling | PKAUFLIN | 650.123.3234 | 1987-07-09 | ST_MAN | 7900.00 | 0.00 | 100 | 50 |

| 123 | Shanta | Vollman | SVOLLMAN | 650.123.4234 | 1987-07-10 | ST_MAN | 6500.00 | 0.00 | 100 | 50 |

| 124 | Kevin | Mourgos | KMOURGOS | 650.123.5234 | 1987-07-11 | ST_MAN | 5800.00 | 0.00 | 100 | 50 |

| 125 | Julia | Nayer | JNAYER | 650.124.1214 | 1987-07-12 | ST_CLERK | 3200.00 | 0.00 | 120 | 50 |

| 126 | Irene | Mikkilineni | IMIKKILI | 650.124.1224 | 1987-07-13 | ST_CLERK | 2700.00 | 0.00 | 120 | 50 |

| 127 | James | Landry | JLANDRY | 650.124.1334 | 1987-07-14 | ST_CLERK | 2400.00 | 0.00 | 120 | 50 |

| 128 | Steven | Markle | SMARKLE | 650.124.1434 | 1987-07-15 | ST_CLERK | 2200.00 | 0.00 | 120 | 50 |

| 129 | Laura | Bissot | LBISSOT | 650.124.5234 | 1987-07-16 | ST_CLERK | 3300.00 | 0.00 | 121 | 50 |

| 130 | Mozhe | Atkinson | MATKINSO | 650.124.6234 | 1987-07-17 | ST_CLERK | 2800.00 | 0.00 | 121 | 50 |

| 131 | James | Marlow | JAMRLOW | 650.124.7234 | 1987-07-18 | ST_CLERK | 2500.00 | 0.00 | 121 | 50 |

| 132 | TJ | Olson | TJOLSON | 650.124.8234 | 1987-07-19 | ST_CLERK | 2100.00 | 0.00 | 121 | 50 |

| 133 | Jason | Mallin | JMALLIN | 650.127.1934 | 1987-07-20 | ST_CLERK | 3300.00 | 0.00 | 122 | 50 |

| 134 | Michael | Rogers | MROGERS | 650.127.1834 | 1987-07-21 | ST_CLERK | 2900.00 | 0.00 | 122 | 50 |

| 135 | Ki | Gee | KGEE | 650.127.1734 | 1987-07-22 | ST_CLERK | 2400.00 | 0.00 | 122 | 50 |

| 136 | Hazel | Philtanker | HPHILTAN | 650.127.1634 | 1987-07-23 | ST_CLERK | 2200.00 | 0.00 | 122 | 50 |

| 137 | Renske | Ladwig | RLADWIG | 650.121.1234 | 1987-07-24 | ST_CLERK | 3600.00 | 0.00 | 123 | 50 |

| 138 | Stephen | Stiles | SSTILES | 650.121.2034 | 1987-07-25 | ST_CLERK | 3200.00 | 0.00 | 123 | 50 |

| 139 | John | Seo | JSEO | 650.121.2020 | 1987-07-26 | ST_CLERK | 2700.00 | 0.00 | 123 | 50 |

| 140 | Joshua | Patel | JPATEL | 650.121.1834 | 1987-07-27 | ST_CLERK | 2500.00 | 0.00 | 123 | 50 |

| 141 | Trenna | Rajs | TRAJS | 650.121.8009 | 1987-07-28 | ST_CLERK | 3500.00 | 0.00 | 124 | 50 |

| 142 | Curtis | Davies | CDAVIES | 650.121.2994 | 1987-07-29 | ST_CLERK | 3100.00 | 0.00 | 124 | 50 |

| 143 | Randall | Matos | RMATOS | 650.121.2874 | 1987-07-30 | ST_CLERK | 2600.00 | 0.00 | 124 | 50 |

| 144 | Peter | Vargas | PVARGAS | 650.121.2004 | 1987-07-31 | ST_CLERK | 2500.00 | 0.00 | 124 | 50 |

| 145 | John | Russell | JRUSSEL | 011.44.1344.429268 | 1987-08-01 | SA_MAN | 14000.00 | 0.40 | 100 | 80 |

| 146 | Karen | Partners | KPARTNER | 011.44.1344.467268 | 1987-08-02 | SA_MAN | 13500.00 | 0.30 | 100 | 80 |

| 147 | Alberto | Errazuriz | AERRAZUR | 011.44.1344.429278 | 1987-08-03 | SA_MAN | 12000.00 | 0.30 | 100 | 80 |

| 148 | Gerald | Cambrault | GCAMBRAU | 011.44.1344.619268 | 1987-08-04 | SA_MAN | 11000.00 | 0.30 | 100 | 80 |

| 149 | Eleni | Zlotkey | EZLOTKEY | 011.44.1344.429018 | 1987-08-05 | SA_MAN | 10500.00 | 0.20 | 100 | 80 |

| 150 | Peter | Tucker | PTUCKER | 011.44.1344.129268 | 1987-08-06 | SA_REP | 10000.00 | 0.30 | 145 | 80 |

| 151 | David | Bernstein | DBERNSTE | 011.44.1344.345268 | 1987-08-07 | SA_REP | 9500.00 | 0.25 | 145 | 80 |

| 152 | Peter | Hall | PHALL | 011.44.1344.478968 | 1987-08-08 | SA_REP | 9000.00 | 0.25 | 145 | 80 |

| 153 | Christopher | Olsen | COLSEN | 011.44.1344.498718 | 1987-08-09 | SA_REP | 8000.00 | 0.20 | 145 | 80 |

| 154 | Nanette | Cambrault | NCAMBRAU | 011.44.1344.987668 | 1987-08-10 | SA_REP | 7500.00 | 0.20 | 145 | 80 |

| 155 | Oliver | Tuvault | OTUVAULT | 011.44.1344.486508 | 1987-08-11 | SA_REP | 7000.00 | 0.15 | 145 | 80 |

| 156 | Janette | King | JKING | 011.44.1345.429268 | 1987-08-12 | SA_REP | 10000.00 | 0.35 | 146 | 80 |

| 157 | Patrick | Sully | PSULLY | 011.44.1345.929268 | 1987-08-13 | SA_REP | 9500.00 | 0.35 | 146 | 80 |

| 158 | Allan | McEwen | AMCEWEN | 011.44.1345.829268 | 1987-08-14 | SA_REP | 9000.00 | 0.35 | 146 | 80 |

| 159 | Lindsey | Smith | LSMITH | 011.44.1345.729268 | 1987-08-15 | SA_REP | 8000.00 | 0.30 | 146 | 80 |

| 160 | Louise | Doran | LDORAN | 011.44.1345.629268 | 1987-08-16 | SA_REP | 7500.00 | 0.30 | 146 | 80 |

| 161 | Sarath | Sewall | SSEWALL | 011.44.1345.529268 | 1987-08-17 | SA_REP | 7000.00 | 0.25 | 146 | 80 |

| 162 | Clara | Vishney | CVISHNEY | 011.44.1346.129268 | 1987-08-18 | SA_REP | 10500.00 | 0.25 | 147 | 80 |

| 163 | Danielle | Greene | DGREENE | 011.44.1346.229268 | 1987-08-19 | SA_REP | 9500.00 | 0.15 | 147 | 80 |

| 164 | Mattea | Marvins | MMARVINS | 011.44.1346.329268 | 1987-08-20 | SA_REP | 7200.00 | 0.10 | 147 | 80 |

| 165 | David | Lee | DLEE | 011.44.1346.529268 | 1987-08-21 | SA_REP | 6800.00 | 0.10 | 147 | 80 |

| 166 | Sundar | Ande | SANDE | 011.44.1346.629268 | 1987-08-22 | SA_REP | 6400.00 | 0.10 | 147 | 80 |

| 167 | Amit | Banda | ABANDA | 011.44.1346.729268 | 1987-08-23 | SA_REP | 6200.00 | 0.10 | 147 | 80 |

| 168 | Lisa | Ozer | LOZER | 011.44.1343.929268 | 1987-08-24 | SA_REP | 11500.00 | 0.25 | 148 | 80 |

| 169 | Harrison | Bloom | HBLOOM | 011.44.1343.829268 | 1987-08-25 | SA_REP | 10000.00 | 0.20 | 148 | 80 |

| 170 | Tayler | Fox | TFOX | 011.44.1343.729268 | 1987-08-26 | SA_REP | 9600.00 | 0.20 | 148 | 80 |

| 171 | William | Smith | WSMITH | 011.44.1343.629268 | 1987-08-27 | SA_REP | 7400.00 | 0.15 | 148 | 80 |

| 172 | Elizabeth | Bates | EBATES | 011.44.1343.529268 | 1987-08-28 | SA_REP | 7300.00 | 0.15 | 148 | 80 |

| 173 | Sundita | Kumar | SKUMAR | 011.44.1343.329268 | 1987-08-29 | SA_REP | 6100.00 | 0.10 | 148 | 80 |

| 174 | Ellen | Abel | EABEL | 011.44.1644.429267 | 1987-08-30 | SA_REP | 11000.00 | 0.30 | 149 | 80 |

| 175 | Alyssa | Hutton | AHUTTON | 011.44.1644.429266 | 1987-08-31 | SA_REP | 8800.00 | 0.25 | 149 | 80 |

| 176 | Jonathon | Taylor | JTAYLOR | 011.44.1644.429265 | 1987-09-01 | SA_REP | 8600.00 | 0.20 | 149 | 80 |

| 177 | Jack | Livingston | JLIVINGS | 011.44.1644.429264 | 1987-09-02 | SA_REP | 8400.00 | 0.20 | 149 | 80 |

| 178 | Kimberely | Grant | KGRANT | 011.44.1644.429263 | 1987-09-03 | SA_REP | 7000.00 | 0.15 | 149 | 0 |

| 179 | Charles | Johnson | CJOHNSON | 011.44.1644.429262 | 1987-09-04 | SA_REP | 6200.00 | 0.10 | 149 | 80 |

| 180 | Winston | Taylor | WTAYLOR | 650.507.9876 | 1987-09-05 | SH_CLERK | 3200.00 | 0.00 | 120 | 50 |

| 181 | Jean | Fleaur | JFLEAUR | 650.507.9877 | 1987-09-06 | SH_CLERK | 3100.00 | 0.00 | 120 | 50 |

| 182 | Martha | Sullivan | MSULLIVA | 650.507.9878 | 1987-09-07 | SH_CLERK | 2500.00 | 0.00 | 120 | 50 |

| 183 | Girard | Geoni | GGEONI | 650.507.9879 | 1987-09-08 | SH_CLERK | 2800.00 | 0.00 | 120 | 50 |

| 184 | Nandita | Sarchand | NSARCHAN | 650.509.1876 | 1987-09-09 | SH_CLERK | 4200.00 | 0.00 | 121 | 50 |

| 185 | Alexis | Bull | ABULL | 650.509.2876 | 1987-09-10 | SH_CLERK | 4100.00 | 0.00 | 121 | 50 |

| 186 | Julia | Dellinger | JDELLING | 650.509.3876 | 1987-09-11 | SH_CLERK | 3400.00 | 0.00 | 121 | 50 |


| 187 | Anthony | Cabrio | ACABRIO | 650.509.4876 | 1987-09-12 | SH_CLERK | 3000.00 | 0.00 | 121 | 50 |

| 188 | Kelly | Chung | KCHUNG | 650.505.1876 | 1987-09-13 | SH_CLERK | 3800.00 | 0.00 | 122 | 50 |

| 189 | Jennifer | Dilly | JDILLY | 650.505.2876 | 1987-09-14 | SH_CLERK | 3600.00 | 0.00 | 122 | 50 |

| 190 | Timothy | Gates | TGATES | 650.505.3876 | 1987-09-15 | SH_CLERK | 2900.00 | 0.00 | 122 | 50 |

| 191 | Randall | Perkins | RPERKINS | 650.505.4876 | 1987-09-16 | SH_CLERK | 2500.00 | 0.00 | 122 | 50 |

| 192 | Sarah | Bell | SBELL | 650.501.1876 | 1987-09-17 | SH_CLERK | 4000.00 | 0.00 | 123 | 50 |

| 193 | Britney | Everett | BEVERETT | 650.501.2876 | 1987-09-18 | SH_CLERK | 3900.00 | 0.00 | 123 | 50 |

| 194 | Samuel | McCain | SMCCAIN | 650.501.3876 | 1987-09-19 | SH_CLERK | 3200.00 | 0.00 | 123 | 50 |

| 195 | Vance | Jones | VJONES | 650.501.4876 | 1987-09-20 | SH_CLERK | 2800.00 | 0.00 | 123 | 50 |

| 196 | Alana | Walsh | AWALSH | 650.507.9811 | 1987-09-21 | SH_CLERK | 3100.00 | 0.00 | 124 | 50 |

| 197 | Kevin | Feeney | KFEENEY | 650.507.9822 | 1987-09-22 | SH_CLERK | 3000.00 | 0.00 | 124 | 50 |

| 198 | Donald | OConnell | DOCONNEL | 650.507.9833 | 1987-09-23 | SH_CLERK | 2600.00 | 0.00 | 124 | 50 |

| 199 | Douglas | Grant | DGRANT | 650.507.9844 | 1987-09-24 | SH_CLERK | 2600.00 | 0.00 | 124 | 50 |

| 200 | Jennifer | Whalen | JWHALEN | 515.123.4444 | 1987-09-25 | AD_ASST | 4400.00 | 0.00 | 101 | 10 |

| 201 | Michael | Hartstein | MHARTSTE | 515.123.5555 | 1987-09-26 | MK_MAN | 13000.00 | 0.00 | 100 | 20 |

| 202 | Pat | Fay | PFAY | 603.123.6666 | 1987-09-27 | MK_REP | 6000.00 | 0.00 | 201 | 20 |

| 203 | Susan | Mavris | SMAVRIS | 515.123.7777 | 1987-09-28 | HR_REP | 6500.00 | 0.00 | 101 | 40 |

| 204 | Hermann | Baer | HBAER | 515.123.8888 | 1987-09-29 | PR_REP | 10000.00 | 0.00 | 101 | 70 |

| 205 | Shelley | Higgins | SHIGGINS | 515.123.8080 | 1987-09-30 | AC_MGR | 12000.00 | 0.00 | 101 | 110 |

| 206 | William | Gietz | WGIETZ | 515.123.8181 | 1987-10-01 | AC_ACCOUNT | 8300.00 | 0.00 | 205 | 110 |

Далее следует код Java ( версия 7 Update 25 (сборка 1.7.0_25-b16 ) ) с использованием MySQL Connector J :

// Блок запроса SQL -> Начало здесь
Statement stmt = null;
ResultSet rs = null;

try <
stmt = conn.createStatement();
rs = stmt.executeQuery(«SELECT first_name, last_name, salary FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_name LIKE ‘IT%’) AND salary > (SELECT avg(salary) FROM employees)»);

// Запрашиваем данные из запроса
System.out.println («n————-SQL DATA————-n»);
while(rs.next()) <
//Получаем по имени столбца
String fname = rs.getString(«first_name»);
String lname = rs.getString(«last_name»);
int salary = rs.getInt(«Salary»);

//Отображаем значения
System.out.print(«Name » + fname+’ ‘+lname);
System.out.print(«,Salary: » + salary);
>
System.out.println («nn————-END————-n»);
>
catch (SQLException ex) <
// обрабатываем ошибки
System.out.println(«SQLException: » + ex.getMessage());
System.out.println(«SQLState: » + ex.getSQLState());
System.out.println(«VendorError: » + ex.getErrorCode());
>
finally <
if (rs != null) <
try <
rs.close();
> catch (SQLException sqlEx) < >// игнорируем ошибку
rs = null;
>

if (stmt != null) <
try <
stmt.close();
> catch (SQLException sqlEx) < >// игнорируем ошибку

stmt = null;
>
>
// Блок SQL запроса заканчивается здесь

>
catch (Exception ex)
<
System.err.println («Cannot connect to database server»);
ex.printStackTrace();
>
finally
<
if (conn != null)
<
try
<
// System.out.println(«n***** Let terminate the Connection *****»);
conn.close ();
// System.out.println («nnDatabase connection terminated…»);
>
catch (Exception ex)
<
System.out.println («Error in connection termination!»);
>
>
>
>
>

Компиляция и исполнение кода

Предположим, что файл ‘ testsql.java ’ находится на диске E :, а ‘ MySQL-connector-java-5.1.31-bin.jar ‘ хранится в « C:Program FilesMySQLMySQL Connector J» .

Примечание : Путь >MySQL Connector Java , по которому Java Runtime Environment ( JRE ) ищет классы и другие файлы ресурсов. Можно изменить этот путь, используя опции -classpath или -cp некоторых команд Java , когда вы вызываете JWM или другие инструменты JDK , либо изменив переменную окружения classpath .

Цукерберг рекомендует:  Событийная модель JavaScript

Данная публикация представляет собой перевод статьи « MySQL Java Connector » , подготовленной дружной командой проекта Интернет-технологии.ру

Руководство по Servlets. Работа с базой данных.

В данной статье мы рассмотрим пример работы с базой данных (далее – БД) с помощью сервлетов.

В качестве БД мы будем использовать PostgreSQL, а основу приложения возьмём из данной статьи.

Для начала, создадим БД. Открываем терминал (операционная система – Ubuntu 16.04 LTS – при использовании другой ОС – способ создания БД может отличаться) и выполняем следующую команду:

После ввода пароля открываем консоль БД:

И создаем саму базу данных:

Подключим нашу БД к Idea:

Внесем некоторые изменения, чтобы получилась следующая структура приложения:

Поочередно выполним оба эти файла.
В результате мы получим следующую таблицу:

Добавим в наш pom.xml файл зависимости для postgres коннектора:

Перейдём к созданию самого сервлета.
Класс DatabaseDemo.java

В терминале выполним команду:

Откроем браузер и перейдём по ссылке:

В результате мы получим следующую страницу:

На этом мы заканчиваем изучение работы с БД с помощью сервлетов.

В следующей статье мы рассмотрим работу с датой и временем.

Технологии доступа к БД в Java. JDBC API

Читайте также:

  1. Aware- интерфейсы. Получение доступа к контектсу
  2. Gigabit Ethernet, 10GE и дальнейшее развитие технологии Ethernet.
  3. Альтернативные технологии доступа к БД в Java
  4. Анализ технологии.
  5. Аппаратная реализация современных методов несанкционированного доступа к информации
  6. Архитектура технологии Gigabit Ethernet. Стандарт IEEE 802.3.
  7. Биометрические технологии идентификации
  8. В ТЕХНОЛОГИИ ОБЪЕМНЫХ ЭЛЕМЕНТОВ
  9. Введение в информационные технологии
  10. Вопрос 16 — Информационные технологии в управлении проектом
  11. Геоинформационные технологии
  12. ГОСТ Р ИСО/МЭК 13335-4-2007 Информационные технологии. Методы и средства обеспечения безопасности Часть 4. Выбор защитных мер

Лекция 7

Для доступа к базам данных в технологии Java принято использовать стандартный API JDBC (Java DataBase Connectivity)[16]. В стандарте определен набор интерфейсов, которые позволяют манипулировать данными в БД передавая команды в виде запросов SQL. JDBC API может использоваться как для простого обмена данных с локальной БД, так и для обмена данными с удалёнными БД в гетерогенной среде. Стандарт JDBC основан на стандарте X/Open SQL CLI (Call Level Interface). На этом же стандарте основан ODBC (Open DataBase Connectivity). Впервые JDBC был введён в январе 1997 года и с тех пор является самым широкоиспользуемым API для доступа к БД в технологии Java.

Для начала работы необходимо получить соединение с БД. Это можно сделать двумя способами:

  1. Используя интерфейс DriverManager, передав которому connection string (строку параметров трибуты с БД) можно получить соединение с БД. Необходимо отметить, что бывает необходимо предварительно загрузить класс с JDBC драйвером (используя Class.forName())
  2. Используя интерфейс DataSource, который позволяет программисту абстрагироваться от деталей подключения к БД и используется как правило в управляемых средах, таких как сервера приложений. В сервере приложений конкретный DataSource можно настроить испоьлзуя андминистративный интерфейс пользователя. При этом приложение, работающее с БД не изменяется.

Под JDBC драйвером подразумевается абстракция (реализующая интерфейс java.sql.Driver), которая предоставляет стандартный способ для создания, открытия и закрытия соединений с нижележащим источником данных, например БД.

Для работы с конкретной БД необходим JDBC драйвер. В общем случае драйвером называется набор классов, которые, помимо указанного интерфейса, реализуют ещё ряд обязательных и опциональных интерфейсов. Этот набор классов, как правило, упаковывается в виде jar-архива и доступен для загрузки с сайта производителя конкретной СУБД. Существует так же большое количество независимых производителей JDBC драйверов, которые предлагают коммерческие версии, утверждая что они показывают лучшие параметры производительности. В сети Интернет на сайтах производителей СУБД доступны бесплатные версии драйверов для всех популярных версий СУБД, таких как Oracle, MS SQL Server, MySQL, PostgreSQL и многих других.

После получения соединения, можно выполнять запросы к БД. Соединение представлено абстракцией, реализующей интерфейс java.sql.Connection. Этот интерфейс предоставляет методы для посылки SQL запросов на подсоединённый сервер БД и получение ответа. Для того чтобы запустить запрос необходимо из Connection’а получить абстракцию, предоставляющую запрос. Эта абстракция представлена интерфейсом java.sql.Statement и может быть получена из Connection.createStatement().

После получения Statement он может быть запущен. Для запуска, необходимо вызвать метод Statement.executeQuery(String sqlString). Этому методу необходимо передать строку SQL (например “select * from order”). Для получения результатов запроса, метод executeQuery() возвращает абстракцию представленную интерфейсом java.sql.ResultSet. Этот интерфейс позволяет осуществлять построчный доступ к результатам запроса.

Важно заметить, что все вышеописанные абстракции, получаемые и используемые для запуска запросов в БД являются ограниченными ресурсами, т.е. их количество достаточно ограничено и их поддержание является ресурсоёмкой задачей как для сервера БД, так и для сервера приложений (если он используется). Кроме того, количество одновременно открытых соединений с БД обычно ограничивается ещё и лицензионным соглашением. Таким образом, в результате неправильного использования можно прийти к ситуации когда приложение больше не сможет открывать соединения и обработка запросов окажется невозможной – приложение либо аварийно завершит свою работу, либо зависнет. Поэтому, для всех вышеописанных ресурсов (Connection, Statement, ResultSet) определён метод close() который ОБЯЗАТЕЛЬНО вызывать после того, как ваше обращение к БД закончилось.

В случае возникновения ошибки или исключительной ситуации, инфраструктура JDBC генерирует java.sql.SQLException или один из его подклассов.

Вот простой пример вывода табличных данных из базы.

EasyJava

Java в примерах для начинающих

Встраиваемые базы данных в Java

Когда говорят о базах данных, чаще всего имеют ввиду либо enterprise монстров, вроде Oracle или DB2, либо распространённые опенсорсные SQL базы, вроде MySQL или PostgreSQL. Все эти базы имеют свою нишу и своё предназначение. И все они имеют объединящий их недостаток: они большие и их неудобно распространять.

В самом деле, в приложениих регулярно хочется иметь какую-нибудь базу данных, к которой и требований вообщем-то никаких не выдвигается, ни по производительности, но по устойчивости. Распространённые решения, подобные перечисленным выше, неудобны тем, что требуют дополнительной установки и настройки. Хорошо бы иметь базу, которая распространяется прямо внутри приложения. В мире C/C++ существуют SQLite и MySQL embedded, а в мире Java — базы данных, написанные на pure java.

Pure java databases не так хорошо масштабируются, не очень быстро работают и не так уж много функционала имеют. С другой стороны, они маленькие (в среднем добавляют 1-2 мегабайта к вашему приложению), встраиваются прямо в приложение и имеют возможность работать с данными прямо в памяти. Типичных областей применения у таких баз данных несколько: замена основной базе в интеграционных тестах, собственная база данных приложения для внутренних данны, механизм обработки данных в приложении и т.д.

Наиболее распространены три java базы данных и каждую из них мы опробуем.

H2 я уже показывал в Hello, JDBC. Это наиболее молодая из рассматриваемых баз данных, разработка которой началась в 2004. Ключевые возможности:

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

Использовать H2 в приложении крайне просто: её достаточно добавить в classpath и можно сразу подключаться к ней.

Прикладное программирование с нуля.

AVR, STM, Android, IoT. Встраиваемые системы.

JDBC. Взаимодействие Java-приложения и MySQL. Шаг №51

Всем привет. Сегодня мы рассмотрим управление базой данных непосредственно с java-приложения, но через СУБД. Как Вы помните, в прошлой статье мы рассмотрели работу с базой данных через консоль. Теперь же SQL запросы будем посылать непосредственно из программы, на java используя методы JDBC и драйвер. Итак, разложим все по полкам. Что такое JDBC ( Java DataBase Connectivity — соединение с базами данных на Java )

Теперь приступим к программе. Используем классы пакета java.sql.

import java.sql.Connection; /*Выбирает методы для создания сеанса связи с базой данных*/
import java.sql.DriverManager; /*Исключения для работы с БД*/
import java.sql.SQLException;
import java.sql.ResultSetMetaData; /*Методы для обработки результата обращения к базе данных*/
import java.sql.Statement; /*Методы для передачи SQL-запроса базе данных*/
import java.sql.ResultSet; /*Методы для обработки результата обращения к базе данных*/
import java.util.Vector; /*Содержит элементы, к которым можно получить доступ, используя целочисленный индекс.*/
public class conMySQL <
private Connection con = null;
public conMySQL (String driver, String url, String login, String pass) < /*driver – имя нашего драйвера MySQL Connector/J; url – адрес базы данных (имя) ; login – имя пользователя; pass – пароль.*/
try <
>/*forName-загрузка драйвера для базы данных*/
con = DriverManager.getConnection(url, login, pass);
> catch ( >/*Если нет драйвера */ <
System.err.println («conMySQL.Cannot find this db driver classes.»);
ex.printStackTrace ();
> catch (SQLException e) < /*если DriverManager не может соединиться c базой*/
System.err.println («KFDB.Cannot connect to this db.»);
e.printStackTrace ();
>
>
public Vector > getNomen (String query) /*Возврат информации базы данных*/ <
Vector > retVector = new Vector >();
try <
Statement st = con.createStatement (); /*Посылка запроса БД*/
ResultSet rs = st.executeQuery (query); /*Выполнение запроса и возврат данных*/
ResultSetMetaData rsmd = rs.getMetaData (); /*Устойстве набора данных*/
int cols = rsmd.getColumnCount (); /*Количество колонок в наборе данных*/
while (rs.next ()) < /*Перемещаеся по строкам набора данных.*/
Vector newRow = new Vector ();
for (int i = 1; i /*Извлекаем значение из каждой ячейки строки*/
newRow.add (rs.getObject (i));
>
retVector.add (newRow); /*retVector отображение набора данных rs.*/
>
rs.close ();
st.close ();
> catch (SQLException e) <
System.err.println («conMySQL.There are problems with the query » + query);
e.printStackTrace ();
>
return retVector;
>
>

Выведем информацию содержащуюся в базе данных в приложение. Для этого создадим еще один класс, который будет хранить информацию с базы данных и передавать в таблицу.
import java.util.Vector;
import javax.swing.table.AbstractTableModel; /*Реализации методов в интерфейсе TableModel*/
public class modelMySQL extends AbstractTableModel <
private static final long serialVersionU >
protected Vector columnNames; /*Имена колонок*/
private Vector > tableData; /*Данные*/
protected Vector vCol >/*Классы колонок*/
public modelMySQL () <
super ();
vCol >();
vColClass.add (0, Float.class);
vColClass.add (1, Float.class);
vColClass.add (2, String.class);
vColClass.add (3, String.class);
columnNames = new Vector ();
columnNames.add («Температура 1»);
columnNames.add («Температура 2»);
columnNames.add («Время»);
columnNames.add («Дата»);
>
@Override
public int getColumnCount () <
return columnNames.size ();
>
@Override
public int getRowCount () <
return getTableData ().size ();
>
@Override
public Object getValueAt (int row, int column) <
return getTableData ().get (row).get (column);
>
/* заголовки колонок*/
public String getColumnName (int column) <
return columnNames.get (column);
>
/* Запрещаем редактировать первую колонку*/
public boolean isCellEditable (int row, int column) <
if (column == 0) <
return false;
>
return true;
>
public void setValueAt (Object obj, int row, int column) <
if (column == 0) <
(getTableData ().get (row)).set (column, (Integer) obj);
>
else if (column == 1) <
(getTableData ().get (row)).set (column, (String) obj);
>
fireTableCellUpdated (row, column);
>
public Class getColumnClass (int col) <
Class c = Object.class;
try <
c = (Class ) vColClass.get (col);
> catch (RuntimeException e) <
System.out.println (e);
>
return c;
>
public void setTableData (Vector > tableData) <
this.tableData = tableData;
>
public Vector > getTableData () <
return tableData;
>
>

Ну и последнее наш основной класс. Я его полностью не буду переписывать, только дополненные части. Полный текст в статье логирование на java , где мы сохраняли данные логгера в текстовый файл.
import javax.swing.JScrollPane; /*Добавляем прокрутку в таблицу*/
import javax.swing.JTable; /*таблица для показа базы данных*/
public class readLog extends Frame <
. .
private JTable table;
private modelMySQL model; /*Объект для передачи данных базы в таблицу */
private conMySQL baza; /*Создаем объект базы*/
.
public readLog () <
.
/*Указываем драйвер, размещение базы данных, пароль и имя пользователя*/
baza = new conMySQL («com.mysql.jdbc.Driver», «jdbc:mysql://localhost:3306/logger», «root», «root»);
model = new modelMySQL ();
model.setTableData (baza.getNomen («SELECT * FROM log»)); /*Запрос таблицы*/
table = new JTable (model); /*Передаем в таблицу данные базы, обработанные в классе modelMySQL*/
add (new JScrollPane (table), BorderLayout.CENTER);
table.getColumnModel ().getColumn (2).setMaxWidth (50);
.
>
>

На рисунке слева данные таблицы базы. Вы можете сравнить их с предыдущей статьей, где мы рассматривали способы записи данных в базу. Теперь немного о встроенном сервере MySQL. К сожалению через язык java нет возможности встроить сервер. Только с помощью интерфейса С/С++. Конечно можно было бы попробовать с помощью машинно-независимых методов JNI . Но мы не будем тратить время и возьмем прекрасное приложение (движок) SQLite . В следующей статье мы познакомимся с этой СУБД и встроим в нашу программу. На этом сегодня и остановимся. Всем пока.

Работа с базой данных 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 приведены в официальной документации.

Содержание

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

Программное обеспечение или материал Требуемая версия
IDE NetBeans 7.2, 7.3, 7.4, 8.0, Java EE
Комплект для разработчика на языке Java (JDK) Версия 7 или 8
Java DB версии 10.4.x, 10.5.x
  • 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необходимо создать подключение к ней. Для соединения с базой данных контактов выполните следующие шаги.

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

Узел подключения к базе данных ( ) отображается ниже узла ‘Базы данных’. Имя базы данных отображается ниже узла Java DB.

Примечание. Также отобразится соединение с базой данных образец [app on APP] , которое является схемой базы данных по умолчанию.

Щелкните правой кнопкой мыши узел подключения к базе данных контактов (jdbc:derby://localhost:1527/contact [nbuser on NBUSER]) и выберите команду «Подключить».

Отобразится весь значок узла подключения ( ), что означает, что соединение установлено успешно.

  • Задайте удобное отображаемое имя для базы данных, щелкнув правой кнопкой мыши узел подключения к базе данных (jdbc:derby://localhost:1527/contact [nbuser on NBUSER]) и выберите ‘Переименовать’. В текстовом поле введите Contact DB и нажмите кнопку «ОК».
  • Создание таблиц

    Созданная база данных contact в настоящее время пуста. Она еще не наполнена таблицами или данными. В IDE NetBeans можно добавить таблицу баз данных либо с помощью диалогового окна ‘Создать таблицу’ или путем ввода оператора SQL и запуска его напрямую из редактора SQL. Можно использовать оба метода:

    Использование диалогового окна «Создание таблицы»

    Разверните узел подключения Contact DB и обратите внимание, что он имеет несколько подузлов. В этом учебном курсе рассматривается схема «app». Щелкните правой кнопкой мыши узел «APP» и выберите «Установить как схему по умолчанию».

  • Разверните узел APP и обратите внимание, что он имеет три подкаталога: «Таблицы», «Представления» и «Процедуры». Правой кнопкой мыши щелкните узел ‘Таблицы’ и выберите ‘Создать таблицу’, чтобы открыть диалоговое окно ‘Создание таблицы’.
  • Введите FRIENDS в текстовое поле «Имя таблицы».
  • Нажмите кнопку «Добавить столбец». Появится диалоговое окно «Добавить столбец».
  • В поле «Имя столбца» введите id. В поле «Тип данных» выберите элемент INTEGER в раскрывающемся списке.
  • При определенных обстоятельствах может потребоваться установить флажок «Первичный ключ» для указания того, что данный столбец является первичным ключом для таблицы. Все таблицы, созданные в реляционных базах данных, должны содержать первичный ключ. Обратите внимание, что при выборе флажка «Первичный ключ» выполняется автоматическая установка флажков «Индекс» и «Уникальный», а флажок «Значение отсутствует» при этом снимается. Это объясняется тем, что первичные ключи используются для определения уникальной строки базы данных и по умолчанию применяются как индекс таблицы. Поскольку все строки должны быть определены, первичные ключи не могут иметь значение Null.
  • Теперь повторите эту процедуру, определив поля, как показано на таблице ниже.
  • Ключ Индекс Значение отсутствует Уникальный Имя таблицы Тип данных Размер
    [установлен] [установлен] [установлен] идентификатор INTEGER
    [установлен] firstName VARCHAR 20
    [установлен] lastName VARCHAR 20
    [установлен] nickName VARCHAR 30
    [установлен] friendSince DATE
    [установлен] эл. почта VARCHAR 60

    В создаваемой таблице FRIENDS для каждой записи контакта содержатся следующие данные:

    • имя;
    • фамилия;
    • псевдоним;
    • дата включения в список контактов;
    • адрес электронной почты.

    Если диалоговое окно «Создание таблицы» содержит значения, идентичные вышеописанным, нажмите кнопку «ОК». В IDE создается таблица FRIENDS в базе данных и отображается новый узел таблицы FRIENDS ( ) ниже узла ‘Таблицы’. Под узлом таблицы перечислены столбцы (поля), начиная с первичного ключа ( ).

    Использование редактора SQL

    1. В окне ‘Службы’ либо щелкните правой кнопкой мыши узел подключения Contact DB или узел ‘Таблицы’ под ним и выберите пункт ‘Выполнить команду’. В главном окне редактора SQL отобразится пустой холст.
    2. Введите в редактор SQL запрос, как описывается ниже. Определение создаваемой таблицы COLLEAGUES:

    Примечание Операторы и запросы, сформированные в редакторе SQL, анализируются в соответствии с нормами языка структурированных запросов (Structured Query Language, SQL). Для SQL характерны строгие синтаксические правила, применяемые также при работе с редактором среды IDE. Синтаксис SQL также может быть различаться в зависимости от системы управления базами данных. Дополнительные сведения приведены в Справочном пособии по JavaDB.

  • Нажмите кнопку ‘Выполнить SQL’ ( ) на панели задач в верхней части редактора (Ctrl-Shift-E) для выполнения запроса. В окне «Вывод» (CTRL+4) будет выведено сообщение об успешном выполнении оператора.
  • Для проверки изменений щелкните правой кнопкой мыши узел подключения Contact DB в окне ‘Службы’ и выберите ‘Обновить’. В результате этого действия будет произведено обновление компонента пользовательского интерфейса среды выполнения до текущего состояния указанной базы данных. Этот шаг необходим при запуске запросов из редактора SQL в IDE NetBeans. Обратите внимание, что новый зузел таблицы COLLEAGUES ( ) теперь отображается ниже ‘Таблицы’ в окне ‘Службы’.
  • Добавление данных в таблицу

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

    • Запишите в редакторе SQL оператор SQL, который предоставляет значение для каждого поля в схеме таблицы.
    • Используйте редактор SQL для добавления записей в таблицу.
    • Используйте внешний сценарий SQL для импорта записей в таблицу.

    Для получения сведений об использовании всех описанных методов заполнения таблицы FRIENDS данными обратитесь к указанным ниже разделам.

    Выполнение оператора SQL

    1. Разверните ‘Таблицы’ под узлом Contact DB в окне ‘Службы’, щелкните правой кнопкой мыши таблицу FRIENDS и выберите ‘Выполнить команду’, чтобы открыть окно редактора SQL.
    2. Введите в окне редактора SQL следующий оператор:

    При вводе можно использовать функцию автозавершения кода редактора SQL.

  • Щелкните правой кнопкой мыши в пространстве внутри редактора SQL и выберите команду «Выполнить оператор». В окне «Вывод» появится сообщение об успешном выполнении оператора.
  • Чтобы убедиться, что новая запись была добавлена к таблице FRIENDS щелкните правой кнопкой мыши узел таблицы FRIENDS в окне ‘Службы’ и выберите ‘Просмотреть данные’.

    При выборе команды «Просмотреть данные» на верхней панели редактора SQL автоматически создается запрос на выбор всех данных таблицы. На нижней панели редактора SQL выводятся выходные данные оператора. В этом случае таблица FRIENDS будет отображена на нижней панели. Обратите внимание, что новая строка была добавлена с данными, предоставленными в операторе SQL.

    Использование редактора SQL

    1. Щелкните правой кнопкой мыши узел таблицы FRIENDS и выберите «Просмотреть данные» (если просмотр не был выполнен в последнем действии предыдущего раздела).
    2. Нажмите кнопку «Вставить записи» (ALT+I) для добавления строки.
      Появится диалоговое окно «Вставить записи».
    3. Щелкните каждую ячейку и введите записи. Обратите внимание, что для ячеек с типом данных срока можно выбрать дату из календаря. Нажмите кнопку «ОК» после выполнения действия.

    В редакторе SQL можно отсортировать результаты, щелкнув заголовок строки, изменить и удалить существующие записи, а также просмотреть сценарий SQL для действий, выполняемых в редакторе (команда «Показать сценарий SQL» во всплывающем меню).

    Удаление таблиц

    В следующем действии потребуется использование внешнего сценария SQL для создания новой таблицы COLLEAGUES. При этом в предыдущем действии раздела Использование редактора SQL уже была создана таблица COLLEAGUES. Чтобы убедиться в возможности создавать новые таблицы при помощи сценария SQL, можно удалить существующую таблицу COLLEAGUES. Для удаления таблицы баз данных выполните следующие действия:

    1. Разверните узел ‘Таблицы’ под узлом соединения с базой данных в окне ‘Службы’.
    2. Щелкните правой кнопкой мыши таблицу, которую необходимо удалить, и выберите команду «Удалить».

    Использование внешнего сценария SQL

    Ввод команд из внешнего сценария SQL является распространенным способом управления базой данных. Возможно, сценарий SQL уже создан в другом местоположении и требуется выполнить его импорт в IDE NetBeans для запуска в указанной базе данных.

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

    1. Загрузите colleagues.sql в локальную систему.
    2. В главном меню среды IDE выберите «Файл» > «Открыть». В браузере файлов перейдите к месту хранения файла colleagues.sql и нажмите «Открыть». Сценарий автоматически откроется в редакторе SQL.

    В качестве альтернативы вы можете скопировать содержимое colleagues.sql, а затем открыть редактор SQL и вставить содержимое файла в редактор SQL.

  • Убедитесь, что подключение к базе данных Contact DB в раскрывающемся списке «Подключение» на панели инструментов в верхней части редактора выбрано.
  • Нажмите кнопку ‘Выполнить SQL’ ( ) на панели инструментов редактора SQL. Сценарий будет выполнен для выбранной базы данных, возвращаемые данные будут выведены в окне «Вывод».
  • Для проверки изменений щелкните правой кнопкой мыши узел подключения Contact DB в окне ‘Службы’ и выберите ‘Обновить’. Обратите внимание, что новая таблица COLLEAGUES сценария SQL теперь отображена в виде узла таблицы contact в окне «Службы».
  • Для просмотра данных. содержащихся в новой таблице, щелкните правой кнопкой мыши таблицу COLLEAGUES и выберите ‘Просмотреть данные’. Таким образом можно сравнить данные в таблицах с данными сценария SQL, чтобы убедиться в их соответствии.
  • Восстановление таблиц из различных баз данных

    При наличии таблицы из другой базы данных, которую необходимо повторно создать в базе данных, с которой пользователь работает из IDE NetBeans, среда IDE обеспечивает для этой задачи удобный инструмент. Для начала потребуется наличие второй базы данных, зарегистрированной в среде IDE, как описывается в начале учебного курса. Для работы в рамках данного учебного курса используйте пример базы данных, входящий в пакет Java DB. Этот процесс выполняется в два этапа: сначала необходимо «захватить» определение выбранной таблицы, а потом восстановить таблицу в выбранной базе данных.

      Подключитесь к базе данных sample щелкнув правой кнопкой мыши узел подключения под узлом ‘Базы данных’ в окне ‘Службы’ и выберите ‘Подключение’ (имя пользователя и пароль: app).

    Разверните узел ‘Таблицы’ под подключением к базе данных sample, щелкните правой кнопкой мыши узел таблицы CUSTOMER и выберите ‘Копировать структуру’.

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

    Определение выбранной таблицы будет записано в файл захвата.

    В открывшемся диалоговом окне «Восстановление таблицы» перейдите по пути хранения файла захвата CUSTOMER, скопируйте файл и нажмите кнопку «Открыть», чтобы открыть диалоговое окно ‘Именование таблицы’.

    В выведенном окне можно изменить имя таблицы или отредактировать ее определение. Для немедленного создания таблицы в базе данных contact нажмите кнопку «ОК». Узел таблицы CUSTOMER отобразится под узлом подключения к базе данных Contact DB.

    Если просмотреть данные в новой таблице CUSTOMER, то будет видно, что в базе данных отсутствуют записи, но структура таблицы совпадает с скопированной таблицей.

    Дополнительные сведения

    Это заключительный раздел учебного курса по работе с базой данных Java DB (Derby). В этом учебном курсе описывается настройка соединения с базой данных DB Java в IDE NetBeans. Также были описаны способы создания, просмотра, изменения и удаления таблиц в окне «Службы» среды IDE. Кроме того, были представлены методы работы с редактором SQL для добавления данных в таблицы и использование возможностей среды IDE для восстановления таблиц при помощи определений из других баз данных.

    Более подробные учебные курсы представлены на следующих ресурсах:

    • Подключение к базе данных MySQL. Описывается настройка и подключение к базе данных MySQL в IDE NetBeans.
    • Создание простого веб-приложения, использующего базу данных MySQL. Демонстрируется способ создания простого веб-приложения, устанавливающего подключение к серверу базы данных MySQL.
    • Учебный курс по приложению CRUD для платформы NetBeans. В этом учебном курсе демонстрируется способ интеграции базы данных Java DB в приложение, работающее на платформе NetBeans.

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

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

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

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

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

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

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

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

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

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

    12. Урок по Java. JDBC Базы данных

    Вэтом уроке мы соединимся с сервером баз данных, в нашем примере это будет ms sql server 2012, но в общем этот подходит для понимания общей логики, для подключения к другим БД Вам нужно только сменить по сути драйвер

    Предполагается, что Вы работаете в Eclipse

    Для начала скачаем драйвер JDBC для sql server https://www.microsoft.com/ru-ru/download/confirmation.aspx? >

    В eclipse создайте новый проект, далее подключите скачанный jar файл так:

    Правой кнопкой мыши по проекту — свойства — Java Build Path — Add External JARs и выбирете файл sqljdbc4.jar

    Далее привожу листинг с комментариями:

    Если Вы хотите обменяться ссылками со мной между сайтами — пишите в контактах

    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих