Пример java postgresql: Подключение к PostgreSQL в Java с помощью JDBC

Содержание

Доклады конференции PgConf.Russia 2016: PostgreSQL и Java: мастер-класс

Альваро Эрнандес
8Kdata, CEO

IT-предприниматель (Мадрид, Испания). Основатель и генеральный директор компании 8Kdata (www.8kdata.com), специализирующейся на разработке БД. Основной разработкой является проект ToroDB (www.torodb.com) – первая БД, комбинирующая реляционную и нереляционную (NoSQL) модели, которая совместима с MongoDB и может быть запущена поверх PostgreSQL. Разработчик-энтузиаст, активный участник open-source проектов. Java-разработчик, член группы JavaSpecialists.eu и вместе с тем DBA, консультант и частый докладчик на международных конференциях по вопросам БД. Основатель испанского сообщества PostgreSQL (www.postgrespaña.es), одного из крупнейших в мире, которое объединяет более 700 человек.

Java – один из наиболее популярных языков программирования для СУБД PostgreSQL. На этом мастер-классе вы узнаете основные способы соединения с postgres и лучшие методики программирования по стандарту JDBC, а также познакомитесь с jOOQ – менеджером памяти, позволяющим использовать все возможности SQL и postgres для построения сложных запросов, не используя при этом шаблонный код.

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

  • Введение в Java и PostgreSQL.
  • Варианты соединения с PostgreSQL из Java-приложения (и не только с помощью JDBC!)
  • Введение в JDBC. Типы JDBC. PostgreSQL JDBC
  • Демонстрация кода: JDBC и PostgreSQL. От Java 1.4 к Java 8, лучшие практики и примеры кода.
  • Демонстрация кода: jOOQ, менеджер памяти для PostgreSQL.
  • Java в PostgreSQL.
  • Будущее Java и PostgreSQL. Примерно две трети времени займут демонстрации и разбор примеров кода. Все примеры кода, собранные с помощью maven, будут доступны в публичных open-source репозиториях. При желании вы сможете скачать их и поэкспериментировать с ними во время мастер-класса.

ВИДЕО

Часть 1

Часть 2

Часть 4

Слайды

Spring Boot + PostgreSQL + JS в Doсker

В этой статье покажу, как поднять в Docker-контейнере приложение, состоящее из трех частей:

  • Spring Boot REST API – бекэнд на встроенном Tomcat-сервере
  • База данных PostgreSQL
  • Фронтэнд на JavaScript (JQuery) на Nginx-сервере

Приложение можно скачать тут.

Оно состоит из одного контроллера и одного html и js-файла, позволяющего выводить и добавлять животных. Животные хранятся в базе.

Как выглядит приложение

Установка Docker

Чтобы развернуть приложение в Docker, для начала нужно установить Docker на компьютер. В Window 7 это проблематично, в Windows 10 и других ОС вполне возможно.

Чтобы убедиться, что Docker установлен, выполните из командной строки:

docker --version

Будет выведена версия Docker.

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

PostreSQL в контейнере

Одна из причин, почему Java-разработчику полезен Docker, это то, что можно не устанавливать различное дополнительное ПО. Например, базы данных различных версий. Ведь потом их придется удалять, остаются артефакты. Все это нежелательно, да и долго. С Docker проще.Например, чтобы испытать работу приложения с базой данных PostgreSQL 12 версии, можно не устанавливать ее на компьютер, а поднять в Docker-контейнере.

Для этого из командной строки запустим контейнер с базой:

docker run --name some-postgres --volume db-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=qqq -e POSTGRES_DB=vv -p 5434:5432 postgres:12-alpine

Теперь с базой можно соединиться по такому url:

jdbc:postgresql://localhost:5434/vv

Что и удается:

Вкладка Databases в Intellij Idea Ultimate

Разберем строку выше. Она поднимает контейнер из образа PostgreSQL:

docker run ...параметры ....postgres:12-alpine

Параметры команды

postgres:12-alpine – это имя образа. Готовые образы лежат на Docker Hub, там есть разные версии базы. При запуске контейнера образ сначала загружается оттуда, если его нет на компьютере локально.

–name some-postgres – задает имя контейнера. Все контейнеры, которые есть локально, можно просмотреть с помощью команды docker ps –all.

-e POSTGRES_PASSWORD=qqq -e POSTGRES_DB=vv – переменные среды, задаются параметром -e. Эти параметры задают название базы, которая будет создана по умолчанию (vv) и пароль доступа для пользователя

postgres (это имя тоже можно переписать с помощью переменной среды POSTGRES_USER, но мы не будем).

db-data – название volume, то есть того места на нашем диске, где реально будет храниться база из контейнера. Если не задавать volume, то при каждом новом запуске контейнера будет создаваться новый volume, и данные в базе для нас окажутся как бы не сохраненные. А с volume они будут сохраняться. Через двоеточие указан путь внутри контейнера, которому соответствует volume.

-p 5434:5432 – указан порт на локальной машине 5434, которому соответствует порт внутри контейнера 5432. То есть выставляем наружу  порт контейнера 5432, чтобы присоединяться к базе снаружи через порт нашего локального компьютера 5434 (выбран другой порт (не 5432) чтобы не было конфликтов с локально установленной базой, если она есть).

Таким образом, мы соединились с базой со вкладки Databases редактора Intellij Idea. Так же можно соединяться и из приложения, не устанавливая базу на компьютер, а запуская любую ее версию в контейнере.

Файл

docker-compose.yml

Обычно приложение состоит из нескольких компонентов, которые зависят друг от друга, но могут быть запущены изолированно на разных машинах. Например, Spring Boot приложение, предоставляющее REST API, PostgreSQL и фронтэнд на сервере Nginx. Наш пример именно такой. Для такой связки удобно применить docker-compose – это и команда, и файл.

Файл docker-compose.yml представлен ниже:

version: '3.8' services: postgres: build: context: services/postgres dockerfile: Dockerfile.development ports: - "5433:5432" environment: - POSTGRES_USER=postgres - POSTGRES_DB=vv - POSTGRES_PASSWORD=qqq volumes: - "db-data:/var/lib/postgresql/data" app: build: context: services/app dockerfile: Dockerfile.development environment: - PORT=8091 - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres/vv - JS_URL=http://localhost image: 'my-java-application' ports: - 8091:8091 depends_on: - postgres js: build: context: services/js dockerfile: Dockerfile.
development image: 'my-js-app' ports: - 80:80 volumes: db-data:

services – ключевое слово, под ним перечислены папки, в которых лежат три части нашего проекта: app, js, postgres.

docker-compose.yml со структурой папок

docker-compose.yml лежит в корне иерархии рядом с папкой services, в которой перечислены сервисы – то есть компоненты, из который состоит наш проект.

Начнем с postgres.

Сервис Postgres: база данных PostgreSQL

Мы уже запускали postgres-контейнер из командной строки. Теперь все параметры вынесены из командной строки в файл docker-compose.yml – переменные среды, volume, порты. Копирую фрагмент этого файла:

postgres:
  build:
    context: services/postgres
    dockerfile: Dockerfile.development
  ports:
    - "5433:5432"
  environment:
    - POSTGRES_USER=postgres
    - POSTGRES_DB=vv
    - POSTGRES_PASSWORD=qqq
  volumes:
    - "db-data:/var/lib/postgresql/data"

Кстати, volume с именем db-data создается отдельной строкой в конце файла:

volumes: db-data:

Обратите внимание, что каждого сервиса указан Dockerfile (файл для сборки образа):

dockerfile: Dockerfile. development

для Postgres он лежит в папке services/postgres (см. скриншот выше). Его содержимое предельно кратко:

FROM postgres:12-alpine

Строка выше означает, что мы просто берем готовый образ postgres:12-alpine и ничего к нему не добавляем.

Кстати, порты, указанные в docker-compose.yml:

ports:
  - "5433:5432"

можно и не выставлять, ведь к базе будем подключаться не мы с localhost, а Spring Boot из соседнего контейнера. А запись выше именно для доступа с локальной машины.

Другие образы будут чуть сложнее.

Сервис App: Spring Boot приложение

Скопирую фрагмент из docker-compose.yml, касающийся приложения Spring Boot:

app:
  build:
    context: services/app
    dockerfile: Dockerfile.development
  command: java -jar ./app.jar
  environment:
    - PORT=8091
    - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres/vv
    - JS_URL=http://localhost
  image: 'my-java-app'
  ports:
    - 8091:8091
  depends_on:
    - postgres

Рассмотрим, из чего он состоит.

Порты
ports:
  - 8091:8091

Порты указаны так же, как в сервисе postgres, только теперь на указанном порту запущен не сервер базы данных, а http-сервер. Порту 8091 контейнера соответствует порт 8091 нашего компьютера.

Зависимость
depends_on: 
    - postgres

Тут сказано, что наш сервис зависит от сервиса postgres – это означает, что сначала запускается сервис postgres, а потом сервис app.

Имя образа

image: ‘my-java-app’ дает название образу.

Переменные среды

В environment перечислены переменные среды, к которым наше Spring Boot приложение имеет доступ. Мы их прописываем в application.yml приложения таким образом (через двоеточие стоит значение по умолчанию, которое используется в случае, если переменной окружения нет; у меня это просто значения для локального запуска без контейнера):

server:
  port: ${PORT:8091}
spring:
  datasource:
    url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost/mydb}
Доступ из одного контейнера в другой

Обратите внимание, что доступ из одного контейнера к другому происходит по имени сервиса. То есть к базе данных мы обращаемся не по localhost, а по postgres:

jdbc:postgresql://postgres/vv

Это значение мы указывали выше в docker-compose.yml в переменной среды SPRING_DATASOURCE_URL.

Dockerfile.development

Сервис app использует такой докер-файл:

FROM bellsoft/liberica-openjdk-alpine-musl:11.0.3
WORKDIR /usr/local/app
ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar ./app.jar

Тут мы собираем образ на основе готового образа openjdk, задаем рабочую папку и копируем в нее наше приложение docker-demo-0.0.1-SNAPSHOT.jar (оно лежит рядом docker-файлом см. структуру папок выше – надо его сюда скопировать) под именем app.jar. А затем запускаем приложение с помощью команды:

java -jar ./app.jar

Наконец, рассмотрим последний компонент.

Сервис JS: JavaScript приложение

Тут все аналогично, только заданы другие порты и другое имя образа:

js:
  build:
    context: services/js
    dockerfile: Dockerfile.development
  image: 'my-js-app'
  ports:
      - 80:80
Dockerfile.development

Докер-файл у сервиса js такой:

FROM nginx:alpine
WORKDIR /usr/share/nginx/html
COPY dist/ .

То есть мы собираем образ  на основе готового образа nginx:alpine. Затем копируем в папку сервера Nginx /usr/share/nginx/html файлы из папки dist (лежит рядом с докер-файлом, содержит html и js-файлы).

Как всё запустить: команда

docker-compose

Наконец, из папки с файлом docker-compose.yml надо выполнить команду:

docker-compose up

Команда выше и построит образы, и запустит на их основе контейнеры.

Теперь в браузере по адресу

http://localhost

будет доступно наше приложение.

Чтобы остановить и удалить контейнеры, выполним команду:

docker-compose down

Если нужно удалить и volume с данными, делаем так:

docker-compose down --volume

Если вы сохраняли каких-то животных в приложении, то после этой команды при следующем запуске приложения их не будет.

Создание базы данных PostgreSQL и подключение к ней – AWS

Сеть и безопасность

  • Public accessibility: выберите Yes. Инстансу базы данных будет присвоен IP-адрес, что позволит подключаться к базе данных непосредственно с пользовательского устройства.
  • VPC security groups: выберите Create new VPC security group. Будет создана группа безопасности, поддерживающая соединение между IP-адресом используемого устройства и созданной базой данных.

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

  • Database name: введите имя базы данных, содержащее от 1 до 64 буквенно-цифровых символов. Если имя не указано, Amazon RDS не сможет автоматически создать базу данных на основе нового инстанса БД. Для этого учебного пособия используется myDatabase.
  • Port: сохраните значение по умолчанию «5432».
  • Option group: Эта настройка недоступна на уровне бесплатного пользования. С помощью групп настроек в Amazon RDS активируются и настраиваются дополнительные возможности.  Дополнительную информацию см. в разделе Работа с группами настроек.
  • IAM DB authentication: выберите Disable. С помощью этой настройки можно управлять данными для доступа к базе данных с использованием пользователей и групп AWS IAM.

Шифрование

Эта настройка недоступна на уровне бесплатного пользования. Дополнительную информацию см. в разделе Шифрование ресурсов Amazon RDS.

Резервное копирование

  • Backup Retention Period: в этом поле можно выбрать количество дней, в течение которых сохраняются резервные данные. Для этого учебного пособия выберите значение 1 day.
  • Backup Window: задайте значение по умолчанию – No Preference.

Мониторинг

  • Enhanced Monitoring: выберите Enable Enhanced Monitoring. При активации расширенного мониторинга в режиме реального времени становятся доступны метрики для операционной системы (ОС), на которой работает инстанс БД. Дополнительную информацию см. в разделе Просмотр метрик инстанса БД.

Performance Insights

Для выполнения заданий этого учебного пособия выберите Disable Performance Insights.

Обслуживание

  • Auto Minor Version Upgrade: выберите Enable auto minor version upgrade, чтобы получать доступные автоматические обновления.
  • Maintenance Window: выберите значение No Preference.

Защита от удаления

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

Создание простого веб-приложения, использующего базу данных 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», а затем выберите «Веб-приложение». Нажмите кнопку «Далее».

    С помощью этого мастера можно создать пустое веб-приложение в стандартном проекте IDE. В стандартном проекте для компиляции, развертывания и выполнения приложения используется созданный в среде IDE сценарий сборки проекта Ant.

  2. В поле «Имя проекта» введите «IFPWAFCAD». Также укажите местоположение проекта на компьютере. По умолчанию проекты в среде IDE помещаются в папку NetBeansProjects в домашнем каталоге. Нажмите кнопку «Далее».
  3. В панели «Сервер и параметры» укажите сервер GlassFish в качестве сервера, на котором будет запускаться приложение.

    Примечание.Сервер GlassFish отображается в раскрывающемся списке ‘Сервер’, если установлена версия Java IDE NetBeans. Поскольку сервер GlassFish включен в загрузку, он регистрируется в среде IDE автоматически. Для использования в проекте другого сервера нажмите кнопку «Добавить» рядом с полем с раскрывающимся списком «Сервер» и зарегистрируйте другой сервер в среде IDE. Работа с другими серверами, помимо GlassFish в рамках данного учебного курса не рассматривается.

  4. В поле «Версия Java EE» выберите Java EE 5.

    Для веб-проектов Java EE 6 и Java EE 7 использование дескриптора развертывания web.xml не требуется. Шаблон проекта NetBeans не содержит файл web.xml в проектах Java EE 6 и Java EE 7. Однако в данном учебном курсе рассматривается процесс объявления источника данных в дескрипторе развертывания. Функции, характерные только для Java EE 6 или Java EE 7, не требуются, поэтому в качестве версии проекта можно указать Java EE 5.

    Примечание. Точно так же можно указать в качестве версии проекта Java EE 6 или Java EE 7, а затем создать дескриптор развертывания web.xml. В мастере создания файла выберите категорию «Web», а затем выберите «Стандартный дескриптор развертывания».

  5. Нажмите кнопку «Завершить». Создается шаблон проекта для всего приложения и в редакторе открывается пустая страница JSP (index.jsp). Файл index.jspслужит в приложении страницей приветствия.

Подготовка веб-интерфейса

Начните с подготовки страницы приветствия (index.jsp) и страницы ответов (response.jsp). На странице приветствия реализована форма HTML для сбора пользовательских данных. На обеих страницах для просмотра структурированных данных используется таблица HTML. В этом разделе также рассматривается процесс создания таблицы стилей, которая расширяет внешний вид обеих страниц.

Настройка страницы приветствия

Убедитесь, что страница index.jsp открыта в редакторе. Если файл еще не открыт, дважды щелкните index.jsp под узлом «Веб-страницы» проекта IFPWAFCAD в окне «Проекты».

  1. В редакторе измените текст между тегами <title> на Домашняя страница IFPWAFCAD.
  2. Измените текст между тегами <h2> на Добро пожаловать в IFPWAFCAD, Международную ассоциацию по консультированию и развитию для бывших профессиональных борцов!
  3. Откройте палитру среды IDE, выбрав в главном меню «Окно» > «Палитра» (CTRL+SHIFT+8; &#8984+SHIFT+8 в ОС Mac). Наведите курсор на значок «Таблица» в категории «HTML» и обратите внимание на то, что отображается фрагмент кода для элемента по умолчанию.

    Палитру можно настроить в соответствии с существующими требованиями — щелкните правой кнопкой мыши палитру и выберите ‘Показать крупные значки’ и ‘Скрыть имена элементов’, чтобы палитра выглядела как на рисунке выше.
  4. Установите курсор сразу же после тегов <h2>. (Именно в этом месте будет внедрена новая таблица HTML). Далее в окне «Палитра» дважды щелкните значок «Таблица».
  5. В появившемся диалоговом окне «Вставка таблицы» укажите следующие значения и затем нажмите кнопку «ОК»:
    • Рядов: 2
    • Столбцов: 1
    • Размер границы: 0
    Код таблицы HTML создан и добавлен на страницу.
  6. Добавьте следующее содержимое в заголовок таблицы и ячейку первой строки таблицы (новое содержимое выделено полужирным шрифтом):
    <table border="0">
        <thead>
            <tr>
                <th>IFPWAFCAD offers expert counseling in a wide range of fields.</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>To view the contact details of an IFPWAFCAD certified former
                    professional wrestler in your area, select a subject below:</td>
            </tr>
  7. Для нижней строки таблицы вставьте форму HTML. Для этого поместите курсор между второй парой тегов <td> и дважды щелкните значок формы HTML ( ) на палитре. В диалоговом окне «Вставка формы» введите response.jsp в текстовом поле «Действие» и нажмите кнопку «ОК».
  8. Между тегами <form> введите следующее содержимое (новое содержимое выделено полужирным шрифтом):
    <tr>
        <td>
            <form action="response. jsp">
                <strong>Select a subject:</strong>
            </form>
        </td>
    </tr>
  9. Нажмите клавишу Enter, чтобы добавить пустую строку после добавленного содержимого, затем дважды щелкните «Список» в палитре, чтобы открыть диалоговое окно «Вставить список».
  10. В диалоговом окне «Вставить список» ведите subject_id для текстового поля «Имя» и нажмите «OK». Обратите внимание на то, что к форме добавляется фрагмент кода для раскрывающегося списка.

    Количество параметров для раскрывающегося списка не имеет значения. Позже в этом учебном курсе будет показано добавление тегов JSTL для динамического создания на основе данных, полученных из таблицы базы данных «Subject».

  11. Добавьте элемент кнопки ‘Отправить’ ( ) в точку, расположенную непосредственно после только что добавленного раскрывающегося списка. Для этого можно использовать окно «Палитра» или вызвать дополнение кода в редакторе, как показано в предыдущем шаге. В диалоговом окне «Вставка кнопки» в текстовых полях «Подпись» и «Имя» введите Отправить и нажмите кнопку ОК.
  12. Для форматирования кода щелкните правой кнопкой мыши в редакторе и выберите ‘Формат’ (Alt-Shift-F; Ctrl-Shift-F в Mac). Код автоматически форматируется и должен теперь выглядеть следующим образом:
    <body>
        <h3>Welcome to <strong>IFPWAFCAD</strong>, the International Former
            Professional Wrestlers' Association for Counseling and Development!
        </h3>
    
        <table border="0">
            <thead>
                <tr>
                    <th>IFPWAFCAD offers expert counseling in a wide range of fields.</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>To view the contact details of an IFPWAFCAD certified former
                        professional wrestler in your area, select a subject below:</td>
                </tr>
                <tr>
                    <td>
                        <form action="response. jsp">
                            <strong>Select a subject:</strong>
                            <select name="subject_id">
                                <option></option>
                            </select>
                            <input type="submit" value="submit" name="submit" />
                        </form>
                    </td>
                </tr>
            </tbody>
        </table>
    </body>

    Для просмотра этой страницы в браузере щелкните правой кнопкой мыши в редакторе и выберите ‘Запустить файл’ (Shift-F6; Fn-Shift-F6 в Mac). После этого страница JSP будет автоматически скомпилирована и развернута на сервере. Открывается браузер по умолчанию, и в нем выводится страница из местоположения, где она развернута.

Создание страницы ответов

Для подготовки интерфейса для страницы response.jsp сначала необходимо создать файл в проекте. Обратите внимание на то, что большая часть содержимого, отображаемого на странице, создана динамически с помощью технологии JSP. Поэтому в следующих шагах будет необходимо добавить метки-заполнители, которые позже будут заменены кодом JSP.

  1. Щелкните правой кнопкой мыши узел проекта «IFPWAFCAD» в окне «Проекты» и выберите «Создать > JSP». Откроется диалоговое окно «Новый файл JSP».
  2. В поле «Имя файла JSP» введите response. Обратите внимание на то, что в настоящий момент для поля «Расположение» выбран каталог «Веб-страницы», это означает, что файл будет создан в каталоге проекта web. Это то же местоположение, что и для страницы приветствия index.jsp.
  3. Примите остальные значения по умолчанию и нажмите кнопку «Готово». В редакторе выполняется создание и открытие шаблона новой страницы response.jsp. Новый узел JSP также отображается в каталоге «Веб-страницы» в окне «Проекты».
  4. В редакторе измените заголовок на IFPWAFCAD - {местозаполнитель}
  5. Удалите строку <h2>Hello World!</h2> строка между тегами <body>. Скопируйте и вставьте в тело страницы следующую таблицу HTML:
    <table border="0">
        <thead>
            <tr>
                <th colspan="2">{placeholder}</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><strong>Description: </strong></td>
                <td><span>{placeholder}</span></td>
            </tr>
            <tr>
                <td><strong>Counselor: </strong></td>
                <td>{placeholder}
                    <br>
                    <span>
                    member since: {placeholder}</span>
                </td>
            </tr>
            <tr>
                <td><strong>Contact Details: </strong></td>
                <td><strong>email: </strong>
                    <a href="mailto:{placeholder}">{placeholder}</a>
                    <br><strong>phone: </strong>{placeholder}
                </td>
            </tr>
        </tbody>
    </table>

    Для просмотра этой страницы в браузере щелкните правой кнопкой мыши в редакторе и выберите ‘Запустить файл’ (Shift-F6; Fn-Shift-F6 в Mac). Выполняется компиляция и развертывание страницы на сервере GlassFish с последующим открытием в браузере по умолчанию.

Создание таблицы стилей

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

  1. Откройте мастер создания файлов, нажав кнопку ‘Создать файл’ ( ) на главной панели инструментов IDE. Выберите категорию «Web», а затем выберите «Каскадная таблица стилей» и нажмите кнопку «Далее».
  2. Введите style в поле «Имя файла CSS» и нажмите кнопку «Готово». Среда IDE создает пустой файл CSS и располагает его в том же местоположении проекта, что и index.jsp и response.jsp. Обратите внимание на то, что узел для style. css отображается теперь внутри проекта в окне «Проекты», а файл открывается в редакторе.
  3. В редакторе добавьте следующее содержимое к файлу style.css:
    body {
        font-family: Verdana, Arial, sans-serif;
        font-size: smaller;
        padding: 50px;
        color: #555;
    }
    
    h2 {
        text-align: left;
        letter-spacing: 6px;
        font-size: 1.4em;
        color: #be7429;
        font-weight: normal;
        width: 450px;
    }
    
    table {
        width: 580px;
        padding: 10px;
        background-color: #c5e7e0;
    }
    
    th {
        text-align: left;
        border-bottom: 1px solid;
    }
    
    td {
        padding: 10px;
    }
    
    a:link {
       color: #be7429;
       font-weight: normal;
       text-decoration: none;
    }
    
    a:link:hover {
       color: #be7429;
       font-weight: normal;
       text-decoration: underline;
    }
  4. Подключите таблицу стилей к index.jsp и response.jsp. На обеих страницах добавьте следующую строку между тегами <head>:
    <link rel="stylesheet" type="text/css" href="style. css">
    Для быстрого перехода между открытыми в редакторе файлами нажмите CTRL+TAB, а затем выберите требуемый файл.

Подготовка средств обмена данными между приложениями и базой данных

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

После подготовки источника данных и пула подключений для сервера необходимо определить в приложении необходимость использования источника данных. Как правило, для этого создается запись в дескрипторе развертывания приложения web.xml. Наконец, необходимо проверить доступность для сервера драйвера базы данных (JDBC MySQL Connector/J).

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

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

В качестве пароля в этом учебном курсе используется nbuser. Для установки пароля nbuser в командной строке откройте в системе MySQL каталог bin и введите следующие данные:

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('nbuser')
    ->     WHERE User = 'root';
mysql> FLUSH PRIVILEGES;

Дополнительные сведения приведены в официальном справочном руководстве по работе с MySQL: Защита исходных учетных записей MySQL.


  1. Настройка источника данных JDBC и пула подключений
  2. Обращение к источнику данных из приложения
  3. Добавление файла JAR драйвера базы данных к серверу

Настройка источника данных JDBC и пула подключений

Сервер GlassFish Server Open Source Edition содержит библиотеку формирования пула подключений к базе данных (DBCP) с функцией формирования пула подключений в прозрачном для разработчика режиме. Для этого необходимо настроить для сервера источник данных JDBC (связь с базами данных Java) для использования в приложении при формировании пула подключений.

Дополнительные сведения о технологии JDBC приведены в документе Учебные курсы Java: основы JDBC.

Источник данных можно настроить непосредственно в консоли администратора сервера GlassFish или объявить необходимые для приложения ресурсы в файле glassfish-resources.xml, как описано ниже. При развертывании приложения сервер считывает объявления ресурсов и создает требуемые ресурсы.

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

  1. Откройте мастер создания файлов, нажав кнопку ‘Создать файл’ ( ) на главной панели инструментов IDE. Выберите категорию сервера GlassFish, затем выберите «Ресурс JDBC» и нажмите кнопку «Далее».
  2. В шаге 2, в области «Общие атрибуты» выберите параметр «Создать новый пул соединений JDBC», а затем в текстовом поле «Имя JNDI» введите jdbc/IFPWAFCAD.

    Источник данных JDBC использует JNDI. В интерфейсе API JNDI предоставляется единый для всех приложений способ поиска источников данных и получения доступа к ним. Дополнительные сведения приведены в Учебном курсе по JND.
  3. Дополнительно можно добавить описание источника данных. Например, укажите Обеспечивает доступ к базам данных, поставляющим данные для приложения IFPWAFCAD.
  4. Нажмите кнопку «Далее». После этого еще раз нажмите кнопку «Далее» и пропустите шаг 3, «Дополнительные свойства».
  5. В шаге 4 укажите имя пула подключений JDBC IfpwafcadPool. Убедитесь, что выбран параметр «Извлечь из существующего соединения» и выберите jdbc:mysql://localhost:3306/MyNewDatabase из раскрывающегося списка. Нажмите кнопку «Далее».

    Примечание. Мастер обнаруживает все соединения с базой данных, настроенные в IDE. Поэтому на этот момент должно существовать созданное подключение к базе данных MyNewDatabase. Можно проверить, какие подключения были созданы, открыв окно ‘Службы’ (Ctrl-5; ⌘-5 в Mac) и выполнив поиск узлов подключения ( ) в категории ‘Базы данных’.

  6. На этапе 5 выберите файл javax.sql.ConnectionPoolDataSource в списке «Тип ресурса».

    Обратите внимание на то, что среда IDE извлекает информацию из подключенной базы данных, указанной на предыдущем этапе, и задает свойства «имя-значение» для нового пула подключений.

  7. Нажмите кнопку «Завершить». Мастер ресурсов создает файл glassfish-resources.xml, который содержит записи для источника данных и указанный пул подключения.

В окне «Проекты» можно открыть glassfish-resources. xml, созданный в дереве узла «Серверные ресурсы». Обратите внимание, что в тегах <resources> источник данных и пул соединений объявлены как содержащие ранее указанные значения.

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

  1. В окне ‘Проекты’, щелкните правой кнопкой мыши узел проекта IFPWAFCAD и выберите ‘Развернуть’. Запустится сервер, если это не было выполнено ранее, и проект будет скомпилирован и развернут на этом сервере.
  2. Откройте окно «Службы» (CTRL+5; &#8984+5 в системе Mac OS) и разверните узлы «Серверы» > «GlassFish» > «Ресурсы» > «JDBC» > «Ресурсы и пулы подключения JDBC». Проверьте, что теперь отображаются новый источник данных и пул подключений:

Обращение к источнику данных из приложения

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

Дескрипторы развертывания являются текстовыми файлами на основе XML, содержащими информацию о развертывании приложения в определенной среде. Например, они обычно используются для указания параметров контекста приложения и поведенческих шаблонов, настроек безопасности, а также отображений для сервлетов, фильтров и прослушивающих процессов.

Примечание. Если в качестве версии Java при создании проекта указана Java EE 6 или Java EE 7, необходимо создать файл дескриптора развертывания. Для этого выберите «Веб > Стандартный дескриптор развертывания» в мастере создания файлов.

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

  1. В окне «Проекты» разверните структуру папки «Файлы конфигурации» и дважды щелкните web.xml, чтобы открыть файл в редакторе.
  2. Откройте вкладку «Ссылки» в верхней области экрана редактора.
  3. Разверните заголовок «Ссылки на ресурсы» и нажмите кнопку «Добавить», чтобы открыть диалог «Добавление ссылки на ресурс».
  4. В поле «Имя ресурса» введите имя ресурса, указанное выше при настройке источника данных для сервера (jdbc/IFPWAFCAD).
  5. Укажите javax.sql.ConnectionPoolDataSource в поле «Тип ресурса». Нажмите кнопку «ОК».

    Поле «Описание» является необязательным, но можно добавить удобочитаемое описание ресурса, например, База данных для приложения "IFPWAFCAD".

    Новый ресурс теперь перечислен в списке под заголовком ‘Ссылки на ресурсы’.

  6. Чтобы убедиться, что ресурс добавлен в файл web.xml, перейдите на вкладку «Исходный код» в верхней части экрана редактора. Заметим, что теперь в код включены следующие теги <resource-ref>.
    <resource-ref>
        <description>Database for IFPWAFCAD application</description>
        <res-ref-name>jdbc/IFPWAFCAD</res-ref-name>
        <res-type>javax.sql.ConnectionPoolDataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>

Добавление файла JAR драйвера базы данных к серверу

Добавление файла JAR драйвера базы данных является следующим шагом, необходимым для обеспечения взаимодействия сервера с базой данных. Необходимо поместить каталог установки драйвера базы данных и скопировать файл mysql-connector-java-5.1.6.x-bin.jar из корневого каталога драйвера в папку библиотеки на используемом сервере. Управление сервером в среде IDE при развертывании может обнаружить, добавлен ли файл JAR, и если нет, выполняет это автоматически.

Чтобы продемонстрировать это, откройте Диспетчер серверов (выберите «Сервис > Серверы»). В среде IDE предоставляется параметр «Развертывание драйвера JDBC». Если параметр включен, он запускает проверку для определения, требуются ли драйверы для развернутых на сервере приложений. В случае MySQL, если драйвер требуется, но он отсутствует, включенный драйвер среды IDE развертывается в соответствующем месте на сервере.

  1. Выберите «Сервис > Серверы», чтобы открыть Диспетчер серверов. На левой панели выберите «GlassFish».
  2. В главном окне выберите параметр «Включить развертывание драйвера JDBC».
  3. Прежде чем закрыть Диспетчер серверов, запишите путь, указанный в текстовом поле «Папка доменов». При подключении к серверу GlassFish в среде IDE фактически подключение выполняется к экземпляру сервера приложений. Каждый экземпляр запускает приложения в уникальном домене, а в поле «Имя домена» указано имя используемого сервером домена. Как видно на рисунке выше, файл JAR драйвера должен находиться в domain1. Это домен по умолчанию, созданный при установке сервера GlassFish.
  4. Нажмите кнопку «Закрыть», чтобы выйти из Диспетчера серверов.
  5. На компьютере перейдите к каталогу установки GlassFish и войдите в подпапку domains > domain1 > lib. Поскольку проект IFPWAFCAD уже должен быть развернут на сервере, должен отображаться файл mysql-connector-java-5.1.6-bin.jar. Если файл JAR драйвера не отображается, выполните следующий шаг.
  6. Разверните проект на сервере. В окне ‘Проекты’ среды IDE выберите ‘Развернуть’ в контекстном меню узла проекта. Ход выполнения можно видеть в окне «Вывод» среды IDE (CTRL+4; &#8984+4 для Mac). В окне «Вывод» указывается, что драйвер MySQL развернут в местоположении на сервере GlassFish.

    При возврате в подпапку domain1/lib на компьютере видно, что файл mysql-connector-java-5. 1.6.x-bin.jar добавлен автоматически.

Добавление динамической логики

Вернемся к местозаполнителям index.jsp и response.jsp, созданным выше при работе с учебным курсом. Теперь можно реализовать код JSTL для динамического (т. е. на основе пользовательского ввода) создания содержимого на страницах. Для этого выполните следующие три задания.

  1. Добавление библиотеки JSTL к пути к классам проекта
  2. Реализация кода JSTL

Добавление библиотеки JSTL к пути к классам проекта

Для доступа к данным из базы данных и их просмотра используйте Библиотеку стандартных тегов JavaServer Pages (JSTL). Сервер GlassFish по умолчанию содержит библиотеку JSTL. Для проверки разверните узел сервера GlassFish под узлом «Библиотеки» в окне «Проекты» и найдите библиотеку javax.servlet.jsp.jstl.jar. (В более ранних версиях сервера GlassFish используется библиотека jstl-impl. jar.) Поскольку библиотеки сервера GlassFish по умолчанию добавляются в путь классов проекта, на данном этапе никаких действий не требуется.

JSTL имеет четыре основных раздела функциональности.

  • core: базовые, структурные задачи, такие как итерации и условные выражения для контроля потока операций
  • fmt: форматирование сообщений интернационализации и локализации
  • sql: простой доступ к базе данных
  • xml: обработка содержимого XML

Основное внимание в данном учебном курсе уделяется библиотекам тегов core и sql.

Реализация кода JSTL

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

В среде IDE предоставляется несколько специфичных для базы данных фрагментов JSTL, доступных для выбора в окне «Палитра» (CTRL+SHIFT+8; &#8984+SHIFT+8 для Mac).

index.jsp

Для динамического отображения содержимого формы на странице index.jsp необходимо получить доступ ко всем именам из таблицы базы данных «Subject»:

  1. Наведите курсор мыши на элемент «Отчет БД» в окне «Палитра».

    Для элемента «Отчет БД» при создании запроса SQL используется тег <sql:query>, после чего с помощью тега <c:forEach> обрабатывается resultset запроса, а затем выполняется вывод извлеченных данных.

  2. Установите курсор над объявлением <%@page ... %> (строка 7) и дважды щелкните элемент «Отчет БД» в окне «Палитра». В открывшемся диалоговом окне введите следующие подробные сведения:
    • Имя переменной: subjects
    • Контекст: страница
    • Источник данных: jdbc/IFPWAFCAD
    • Оператор запроса: SELECT subject_id, name FROM Subject
  3. Нажмите кнопку «ОК». В файле index.jsp создается следующее содержимое. Новое содержимое выделено полужирным шрифтом.
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
    <%--
        Document   : index
        Author     : nbuser
    --%>
    
    <sql:query var="subjects" dataSource="jdbc/IFPWAFCAD">
        SELECT subject_id, name FROM Subject
    </sql:query>
    
    <table border="1">
        <!-- column headers -->
        <tr>
        <c:forEach var="columnName" items="${subjects.columnNames}">
            <th><c:out value="${columnName}"/></th>
        </c:forEach>
    </tr>
    <!-- column data -->
    <c:forEach var="row" items="${subjects.rowsByIndex}">
        <tr>
        <c:forEach var="column" items="${row}">
            <td><c:out value="${column}"/></td>
        </c:forEach>
        </tr>
    </c:forEach>
    </table>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. 01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    Обратите внимание на то, что в среде IDE автоматически добавлены директивы taglib, необходимые для тегов JSTL, используемых в созданном содержимом, (<sql:query> и <c:forEach>). Директива taglib объявляет, что на странице JSP используются пользовательские теги (JSTL), указывает библиотеку тегов, которая их определяет, а также префикс тега.
  4. Запустите проект, чтобы проверить его отображение в браузере. Щелкните правой кнопкой мыши узел проекта в окне «Проекты» и выберите «Выполнить».

    При выборе «Выполнить», IDE развертывает проект на сервере GlassFish, страница индексов компилируется в сервлет, а страница приветствия открывается в браузере по умолчанию. Код, созданный на основе элемента «Отчет БД», определяет следующую таблицу на странице приветствия.

    Как видно, с помощью элемента «Отчет БД» можно быстро протестировать подключение к базе данных и просмотреть табличные данные из базы данных в браузере. Это особенно рекомендуется при создании прототипов.

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

  5. Проверьте данные столбцов в созданном коде. Используется два тега <c:forEach>, причем один из них вставляется в другой. В результате контейнер JSP (сервер GlassFish) выполняет цикл по всем строкам таблицы с циклическим прохождением всех столбцов. Аналогично отображаются данные для всей таблицы.
  6. Интегрируйте теги <c:forEach> в форму HTML следующим образом. Значение каждого элемента изменяется на subject_id, а текст вывода — на name, как записано в базе данных. (Изменения выделяются полужирным шрифтом).
    <form action="response.jsp">
        <strong>Select a subject:</strong>
        <select name="subject_id">
            <c:forEach var="row" items="${subjects. rowsByIndex}">
                <c:forEach var="column" items="${row}">
                    <option value="<c:out value="${column}"/>"><c:out value="${column}"/></option>
                </c:forEach>
            </c:forEach>
        </select>
        <input type="submit" value="submit" name="submit" />
    </form>
    Ниже показан более простой способ интеграции тегов <c:forEach> в форму HTML.
    <form action="response.jsp">
        <strong>Select a subject:</strong>
        <select name="subject_id">
            <c:forEach var="row" items="${subjects.rows}">
                <option value="${row.subject_id}">${row.name}</option>
            </c:forEach>
        </select>
        <input type="submit" value="submit" name="submit" />
    </form>

    Во всех случаях теги <c:forEach> циклически обрабатывает значения subject_id и name из запроса SQL со вставкой каждой пары в теги HTML <option>. Таким образом раскрывающийся список формы заполняется данными.

  7. Удалите таблицу, созданную из элемента «Отчет БД». (Удаление показано ниже перечеркнутым текстом.)
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
    <%--
        Document   : index
        Created on : Dec 22, 2009, 7:39:49 PM
        Author     : nbuser
    --%>
    
    <sql:query var="subjects" dataSource="jdbc/IFPWAFCAD">
        SELECT subject_id, name FROM Subject
    </sql:query>
    
    <table border="1">
        <!-- column headers -->
        <tr>
        <c:forEach var="columnName" items="${subjects.columnNames}">
            <th><c:out value="${columnName}"/></th>
        </c:forEach>
    </tr>
    <!-- column data -->
    <c:forEach var="row" items="${subjects.rowsByIndex}">
        <tr>
        <c:forEach var="column" items="${row}">
            <td><c:out value="${column}"/></td>
        </c:forEach>
        </tr>
    </c:forEach>
    </table>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. 01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
  8. Сохраните изменения (CTRK+S; &#8984+S в Mac OS).
  9. Обновите страницу приветствия проекта в браузере.

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

    Повторно развертывать проект не нужно, так как функция «Компилировать при сохранении» (compile-on-save) включена для вашего проекта по умолчанию. Это означает, что при изменении и сохранении файла он автоматически компилируется и развёртывается, и нет необходимости перекомпилировать весь проект. Функцию компиляции при сохранении можно отключать в категории «Компиляция» в окне проекта «Свойства».

response.jsp

На странице ответов предоставляются подробные сведения о консультанте по теме, выбранной на странице приветствия. Созданный запрос должен содержать запись консультанта, идентификатор которого counselor_id соответствует значению counselor_idfk из выбранной записи темы.

  1. Наведите указатель мыши на объявление <%@page ... %> (строка 7) и дважды щелкните «Запрос к БД» в палитре, чтобы открыть диалоговое окно «Вставить запрос к БД».
  2. В диалоговом окне «Вставить запрос к БД» введите следующие данные.
    • Имя переменной: counselorQuery
    • Контекст: страница
    • Источник данных: jdbc/IFPWAFCAD
    • Оператор запроса: SELECT * FROM Subject, Counselor WHERE Counselor.counselor_id = Subject.counselor_idfk AND Subject.subject_id = ? <sql:param value="${param.subject_id}"/>
  3. Нажмите кнопку «ОК». В файле response.jsp создается следующее содержимое. Новое содержимое выделено полужирным шрифтом.
    <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
    <%--
        Document   : response
        Created on : Dec 22, 2009, 8:52:57 PM
        Author     : nbuser
    --%>
    
    <sql:query var="counselorQuery" dataSource="jdbc/IFPWAFCAD">
        SELECT * FROM Subject, Counselor
        WHERE Counselor.counselor_id = Subject.counselor_idfk
        AND Subject.subject_id = ? <sql:param value="${param.subject_id}"/>
    </sql:query>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    Обратите внимание на то, что в среде IDE автоматически добавлена директива taglib для тега <sql:query>. Также отметьте, что непосредственно в запросе использовался тег <sql:param>. Поскольку для этого запроса используется значение subject_id, отправленное с index.jsp, извлечь это значение можно с помощью оператора EL (язык выражений) в форме ${param.subject_id}, а затем передать его для тега <sql:param>. В этом случае его можно использовать вместо вопросительного знака SQL (?) во время выполнения.
  4. Используйте тег <c:set> для установки переменной, соответствующей первой записи (строке) resultset, возвращенного из запроса. Новое содержимое выделено полужирным шрифтом.
    <sql:query var="counselorQuery" dataSource="jdbc/IFPWAFCAD">
        SELECT * FROM Subject, Counselor
        WHERE Counselor.counselor_id = Subject.counselor_idfk
        AND Subject.subject_id = ? <sql:param value="${param.subject_id}"/>
    </sql:query>
    
    <c:set var="counselorDetails" value="${counselorQuery.rows[0]}"/>
    Несмотря на то, что возвращенный из запроса resultset должен содержать только одну запись, этот шаг является обязательным, поскольку для страницы необходимо обеспечить доступ к значениям в записи с помощью операторов EL (язык выражений). Вспомните, что на странице index.jsp можно было получить доступ к значениям из resultset просто посредством тега <c:forEach>. Однако тег <c:forEach> функционирует путем настройки переменной для строк из запроса, что позволяет извлекать значения путем включения переменной строки в операторы EL.
  5. Добавьте директиву taglib для базовой библиотеки JSTL файла. Это обеспечит распознавание тега <c:set>. Новое содержимое выделено полужирным шрифтом.
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
  6. В разметке HTML замените все местозаполнители кодом операторов EL с отображением данных из переменной counselorDetails. (Изменения выделены ниже полужирным шрифтом):
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <link rel="stylesheet" type="text/css" href="style. css">
            <title>${counselorDetails.name}</title>
        </head>
    
        <body>
            <table>
                <tr>
                    <th colspan="2">${counselorDetails.name}</th>
                </tr>
                <tr>
                    <td><strong>Description: </strong></td>
                    <td><span>${counselorDetails.description}</span></td>
                </tr>
                <tr>
                    <td><strong>Counselor: </strong></td>
                    <td><strong>${counselorDetails.first_name} ${counselorDetails.nick_name} ${counselorDetails.last_name}</strong>
                        <br><span>
                        <em>member since: ${counselorDetails.member_since}</em></span></td>
                </tr>
                <tr>
                    <td><strong>Contact Details: </strong></td>
                    <td><strong>email: </strong>
                        <a href="mailto:${counselorDetails. email}">${counselorDetails.email}</a>
                        <br><strong>phone: </strong>${counselorDetails.telephone}</td>
                </tr>
            </table>
        </body>
    </html>

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

Процесс создания приложения завершен. Попробуйте снова запустить его для просмотра результата в браузере. Обратите внимание на то, что благодаря функции NetBeans «Компиляция при сохранении» специально выполнять компиляцию или повторное развертывание приложения не требуется. При выполнении проекта развертывание гарантированно содержит самые последние изменения.

Нажмите кнопку ‘Запустить проект’ () на главной панели инструментов. В браузере по умолчанию среды IDE открывается страница index.jsp..

Когда в браузере отображена страница index.jsp, выберите тему из раскрывающегося списка и нажмите кнопку submit. Выполняется переадресация на страницу response.jsp, отображающую подробные сведения в соответствии с выбором.

Это заключительный раздел учебного курса «Создание простого веб-приложения, использующего базу данных MySQL» В этом документе описана процедура создания простого веб-приложения с подключением к базе данных MySQL. Здесь также рассматривается процесс создания приложения с помощью базовой двухуровневой архитектуры при использовании технологий JSTL и JSP для доступа к данным с динамическим просмотром.


Устранение проблем

Большинство проблем в приложении из учебного курса возникают по причине сложностей процесса обмена данными между сервером GlassFish Server Open Source Edition и сервером базы данных MySQL. В случае некорректного отображения приложения или генерации ошибки сервера рекомендуется выполнить следующие проверки.

Существуют ли ресурсы базы данных?

В среде IDE в окне «Службы» (CTRL+5; &#8984+5 для Mac) проверьте функционирование сервера MySQL, а также доступность MyNewDatabase и наличие в ней соответствующих табличных данных.

Существуют ли на сервере пул подключений и источник данных?

После развертывания приложения на сервере GlassFish файл проекта glassfish-resources.xml должен содержать инструкции для сервера по созданию ресурсов и пула подключения JDBC. Их наличие можно проверить в узле «Серверы» в окне «Службы».

  • Разверните узел «Серверы» > «Сервер GlassFish» > «Ресурсы». Разверните узел «JDBC Resources» (Ресурсы JDBC), чтобы увидеть источник данных jdbc/IFPWAFCAD, созданный из файла glassfish-resources.xml. Разверните узел «Пул подключения», чтобы увидеть пул подключения IfpwafcadPool, созданный из файла glassfish-resources.xml. Подробное описание приведено выше.

Доступен ли MySQL Connector/драйвер J для сервера GlassFish?

Проверьте, что на сервере GlassFish выполнено развертывание драйвера MySQL Connector/J. Соответствующее описание приведено в разделе Добавление файла JAR драйвера базы данных на сервер.

  • Найдите на компьютере папку установки сервера GlassFish и откройте подпапку GlassFish domains/domain1/lib. В ней должен находиться файл mysql-connector-java-5.1.6-bin.jar.

Защищена ли база данных паролем?

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

Корректно ли установлены значения свойств пула подключений?

Проверьте правильность работы пула подключений для сервера.

  1. Откройте окно «Службы» (CTRL+5; &#8984+5 для Mac) и разверните узел «Серверы.
  2. В контекстном меню узла «Сервер GlassFish» выберите «Просмотр консоли администратора».
  3. При отображении соответствующего запроса введите имя пользователя и пароль. Имя пользователя и пароль можно посмотреть в Диспетчере серверов.
  4. В дереве в левой части консоли разверните узел «Ресурсы > JDBC > Пулы подключений > IfpwafcadPool«. В главном окне отображаются подробные сведения о пуле подключений IfpwafcadPool.
  5. Нажмите кнопку «Ping». Если пул подключений настроен правильно, отображается сообщение Ping Succeeded.
  6. Если выполнение ping-тестирования завершается неуспешно, откройте вкладку «Дополнительные свойства» для проверки правильности настройки указанных значений свойств.


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

Дополнительные сведения о развертывании веб-приложений Java приведены в следующих материалах.

  • Статьи и руководства по NetBeans
  • Связь с базами данных Java (JDBC)
  • Библиотека стандартных тегов JavaServer Pages (JSTL)
  • Имена Java и интерфейс каталогов (JNDI)

More

Contribute Documentation! Docs for Earlier Releases

Строковые функции PostgreSQL | Пример строковых функций в PostgreSQL

Строковые функции PostgreSQL

PostgreSQL — очень мощная объектно-реляционная система управления базами данных. Он предоставляет большое количество функций и операторов для встроенных типов данных, тем самым освобождая разработчиков от более простых задач и сосредотачиваясь на решении более масштабной проблемы. Одной из таких категорий встроенных функций являются строковые функции PostgreSQL. Форматирование строк, такое как конкатенация, отображение в определенном формате, вставка / удаление подстрок и т. Д., Иногда может быть утомительной задачей. Об этом позаботятся строковые функции PostgreSQL.

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

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

Примеры строковых функций в PostgreSQL

Строковая функция проста в использовании. Здесь мы обсудим, как использовать строковую функцию в PostgreSQL

программирование с помощью примеров

1.
ASCII (ул.)

Возвращает значение ASCII крайнего левого символа строки str.

SELECT FirstName, ASCII(FirstName) from Person

2. BIT_LENGTH (ул.)

Возвращает длину строки str в битах.

SELECT FirstName, BIT_LENGTH(FirstName) from Person

3. CHAR_LENGTH (str) / CHARACTER_LENGTH (str)

Возвращает длину строки str в символах.

SELECT FirstName, CHAR_LENGTH(FirstName) from Person

4. КОНКАТ (str1, str2, …., Strn)

Возвращает строку, образованную присоединением str1 к strn. Пустые аргументы игнорируются.

SELECT FirstName, LastName, CONCAT(FirstName, LastName) as DisplayName from Person

5. str1 || str2 ||… || non-str ||… || STRN

Объединяет str1, str2 в strn и даже не строковые аргументы.

SELECT Id || FirstName || LastName || phone || address as Concat_All from Person

6. INITCAP (ул.)

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

Select INITCAP('This is a PostgreSQL example.')

7. НИЖНЯЯ () и ВЕРХНЯЯ ()

Преобразует строку в нижний и верхний регистр.

SELECT FirstName, LOWER(FirstName) as Lower, UPPER(FirstName) as Upper from Person

8. ВЛЕВО (ул., Лен) / ПРАВО (ул., Лен)

Возвращает самый левый и самый правый символы len из строки str. Когда len отрицательно, оно возвращает строку str за исключением крайних левых или правых символов len.

SELECT FirstName, LastName, CONCAT(LEFT(LastName, 3), RIGHT(FirstName, 2)) as LoginID from Person

9. ДЛИНА (str) / ДЛИНА (str, кодировка)

Возвращает длину строки str в символах. Это в отличие от операции функции длины в SQL, хотя. Если указано, кодировка обеспечивает длину в конкретной кодировке.

SELECT FirstName, LENGTH(FirstName), CHAR_LENGTH(FirstName) from Person

10.
OCTET_LENGTH (str)

Вычисляет длину строки str в байтах.

SELECT FirstName, LENGTH(FirstName), CHAR_LENGTH(FirstName), OCTET_LENGTH(FirstName) from Person

Это очень похоже на функции LENGTH и CHAR_LENGTH. Разница возникает, когда задействованы многобайтовые символы.

SELECT '€' as multibyte_char, LENGTH('€'), CHAR_LENGTH('€'), OCTET_LENGTH('€')

Это происходит потому, что знак евро (€) занимает 3 байта в памяти.

11. LPAD (ул, лен, падстр) / RPAD (ул, лен, падстр)

Вставляет подстроку с позиции 0 строки padstr в начале и конце строки str до тех пор, пока результирующая строка не будет содержать символы len.

SELECT FirstName, LastName, LPAD(CONCAT_WS(' ', FirstName, LastName), CHAR_LENGTH(CONCAT_WS(' ', FirstName, LastName))+CHAR_LENGTH('Mr. '), 'Mr. ') as DisplayName from Person

12. LTRIM (str, символы) / RTRIM (str, символы) / TRIM (str, символы)

Возвращает строку str после обрезки всех вхождений char (s) слева, справа или с обоих концов. Если символы не указаны в аргументах, пробелы обрезаются.

SELECT LTRIM(' abc ') as L1, RTRIM(' abc ') as R1, TRIM(' abc ') as T1, LTRIM('xxxyyabcxyz', 'xyz') as L2, RTRIM('xxxyyabcxyz', 'xyz') as R2, TRIM('xxxyyabcxyz', 'xyz') as T2

13. ПОЗИЦИЯ (субстрат в стр.) / STRPOS (стр., Субстрат)

Находит позицию подстроки substr в строке str. Помните, индекс начинается с 1 в PostgreSQL. Возвращает 0, если совпадений не найдено.

SELECT Address, POSITION('Avenue' in Address) from Person

14. QUOTE_IDENT (str) / QUOTE_LITERAL (str)

Этот запрос заключает в кавычки и отменяет кавычки строку str. Большинство специальных символов удваиваются.

SELECT Address, QUOTE_IDENT(Address), QUOTE_LITERAL(Address) from Person

15. ЗАМЕНА (str, from_str, to_str)

Заменяет все вхождения подстроки from_str на подстроку to_str в строке str. Это с учетом регистра.

SELECT Address, REPLACE(Address, 's', 'SS') from Person

16.
ОБРАТНАЯ (ул.)

Обращает строку ул.

SELECT FirstName, REVERSE(FirstName) from Person

17. REGEXP_MATCHES (str, pattern)

Возвращает все подстроки, которые соответствуют шаблону POSIX Regex.

SELECT Address, REGEXP_MATCHES(Address, '.(sN)i.') from Perso

18. REGEXP_REPLACE (str, pattern, newstr)

Заменяет все подстроки, которые соответствуют шаблону POSIX Regex, на newstr.

SELECT Address, REGEXP_MATCHES(Address, '..(e)(n)..'), REGEXP_REPLACE(Address, '..(e)(n)..', 'Street') from Person

19. REGEXP_SPLIT_TO_ARRAY (str, pattern)

Разбивает строку str на массив подстрок, разделенных шаблоном POSIX Regex. Шаблон E ‘\\ s +’ означает один или несколько пробелов.

SELECT Address, REGEXP_SPLIT_TO_ARRAY(Address, E'\\s+') from Person

20. REGEXP_SPLIT_TO_TABLE (str, pattern)

Разбивает строку str на таблицу подстрок, разделенных шаблоном POSIX Regex.

SELECT Address, REGEXP_SPLIT_TO_TABLE(Address, E'\\s+') from Person

21. SUBSTRING (ул. От pos для len)

Возвращает подстроку из строки str, начиная с позиции pos длины len.

SELECT FirstName, SUBSTRING(FirstName from 2 for 4) as a sub from Person

22. SUBSTRING (строка из posix_pattern) / SUBSTRING (строка из sql_pattern для выхода)

Возвращает подстроку из строки str, которая соответствует регулярному выражению POSIX или регулярному выражению SQL. Regex — большая, замечательная и чрезвычайно полезная тема в компьютерах. Рекомендуется овладеть шаблонами Regex до того, как они будут беспорядочно реализованы.

SELECT FirstName, SUBSTRING(FirstName from '...$') as sub1, substring(FirstName from '%#"o_a#"_%' for '#') as sub2 from Person

Вывод — строковые функции PostgreSQL

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

Рекомендуемые статьи

Это было руководство по функциям PostgreSQL String. Здесь мы обсудили, как использовать строковые функции в программировании на PostgreSQL с помощью примеров. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше —

  1. Строковые функции в Java с примерами
  2. Как установить PostgreSQL?
  3. PostgreSQL Интервью Вопросы
  4. Функции регулярных выражений в Python (пример)

Spark 1.3 Пример работы с базой(postgresql) с помощью sparkSQL

Ниже приведён код инициализации соединения и выбора данных с базы данных. После инициализации мы получаем dataFrame:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
val jdbcDF = sqlContext.load("jdbc", Map("url" -> "jdbc:postgresql://127. 0.0.1:5432/yourdb?user=dbuser&password=userpassword", "dbtable" -> "public_chema.table_name"))

val data_by_channel_id = jdbcDF.filter(jdbcDF("channel_id") === 265)
data_by_channel_id.show()

Также возможен альтернативный способ работы с базой через DriveManager:
import java.util.Properties
import org.apache.spark._
import org.apache.spark.sql.SQLContext
import java.sql.Connection
import java.sql.DriverManager

val url = "jdbc:postgresql://127.0.0.1:5432/dbname"
var conn: java.sql.Connection = null
val properties = new Properties()
properties.setProperty("user", "username")
properties.setProperty("password", "userpassword")
properties.setProperty("rowId", "false")
conn = DriverManager.getConnection(url, properties)
val statement = conn.createStatement()

val resultSet = statement.executeQuery("SELECT * FROM public_chema.table_name WHERE channel_id=265")

resultSet.next()

println("data from subchannle_id: 265: " + resultSet.getString(1))

statement.executeQuery("UPDATE public_chema. users_registered_agg SET count = count +1 WHERE channel_id=265")

")

При необходимости обращаться с Spark приложений к базе данных postgresql может возникнуть следующая ошибка: «…java.sql.SQLException: No suitable driver found for jdbc:postgresql …»

Проблема тут в том, что собранный jar spark приложения не знает где находиться jar файл для обработки соединений с базой данный postgresql. Вроде эту проблему исправили в Spark 1.5, но владельцами Spark 1.3 необходимо добавить следующие строки к команде spark-shell или spark-submit: «spark-shell —master «local[2]» —driver-class-path /home/cloudera/parcels/CDH-5.4.8-1.cdh5.4.8.p0.4/jars/postgresql-9.1-901.jdbc4.jar«. Путь к файлу jar может отличаться.

Полезные ссылки:

Spring boot + postgresql + docker-compose

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

  1. Собственно создал приложение Spring Boot с подключил Postgresql
  2. Проверил работоспособность
  3. создал Dockerfile
  4. создал docker-compose.jml файл.
  5. выполнил команду mvn clean package
  6. выполнил команду docker-compose up

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-boot-data-jpa</artifactId>
    <packaging>jar</packaging>
    <name>Spring Boot Spring Data JPA</name>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework. boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <downloadSources>true</downloadSources>
        <downloadJavadocs>true</downloadJavadocs>
    </properties>

    <dependencies>

        <!-- jpa, crud repository -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- PostgreSQL -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1. 18.6</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <build>
        <finalName>demo</finalName>
        <plugins>

            <plugin>
                <groupId>org. springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.0</version>
            </plugin>

        </plugins>

    </build>
</project>

application.properties

## PostgreSQL
spring.datasource.url=jdbc:postgresql://dbpostgres:5432/filesystem
spring.datasource.username=postgres
spring.datasource.password=password

spring.jpa.generate-ddl=true

upload.path=/home/admin/Documents/forTest/

Dockerfile

FROM openjdk:8-jdk-alpine
MAINTAINER demo.example.com
VOLUME /tmp
EXPOSE 8080
ADD target/demo.jar demo.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/.urandom","-Dspring.profiles.active=container", "-jar", "/demo. jar"]

Docker-compose.yml

services:
  app:
    container_name: testcont
    image: application
    build: ./
    ports:
      - "8080:8080"
    depends_on:
      - dbpostgres
  dbpostgres:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=filesystem

В начале делаю mvn clean package После этого выполняю команду docker-compose up Реакции никакой от слова совсем

Структура проекта

Источник: https://ru.stackoverflow.com/questions/1097862/spring-boot-postgresql-docker-compose

JDBC to PostgreSQL — Как обновить запись в PostgreSQL с помощью драйвера Java JDBC

Введение

Когда у вас есть данные, хранящиеся в базе данных PostgreSQL, будут моменты, когда вы захотите изменить определенные данные в таблице. Команда UPDATE используется для внесения этих изменений в PostgreSQL; С помощью драйвера PostgreSQL JDBC вы можете легко выполнять операции UPDATE из приложения Java. В этой статье мы покажем вам, как создать приложение Java, которое соединяет JDBC с PostgreSQL, а затем выполняет операцию UPDATE для таблицы базы данных.

Предварительные требования

Прежде чем мы обратим внимание на Java, давайте рассмотрим предварительные условия, необходимые для этого руководства:

  • Во-первых, вам необходимо убедиться, что сервер PostgreSQL установлен и настроен на вашем компьютере. Служба должна работать в фоновом режиме. Если вы используете Linux или Windows, вы можете скачать PostgreSQL здесь.

  • Вам также необходимо убедиться, что Eclipse IDE установлена ​​и настроена в вашей системе.Пользователи Windows и Linux могут загрузить Eclipse IDE здесь.

  • Вам необходимо иметь базовые знания синтаксиса Java, чтобы следовать примерам в этой статье.

Создание образца базы данных

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

Сначала мы войдем на наш сервер PostgreSQL и создадим базу данных, используя следующую команду:

Затем мы можем подключиться к новой базе данных с помощью метакоманды PostgreSQL \ c , за которой следует имя базы данных, как показано здесь: \ c cars; .

Затем мы создадим таблицу с именем tblcars , используя следующую команду:

1
2
3
4
5

CREATE TABLE tblcars (
id SERIAL PRIMARY KEY,
carname TEXT NOT NULL,
brand TEXT NOT NULL
);

Теперь, когда у нас есть таблица, мы можем вставить в нее несколько записей:

1
2
3
4
5

INSERT INTO tblcars (carname, brand) VALUES
(‘fortuner’, ‘toyota’),
(‘wigo’, ‘toyota’),
(ertiga, suzuki),
(город, honda);

Результат этой операции будет выглядеть следующим образом:

1
2
3
4
5
6
7

id | carname | марка
—- + ———- + ———
1 | удачливый | toyota
2 | виго | toyota
3 | эртига | suzuki
4 | город | honda
(4 ряда)

Обновление записи в PostgreSQL с помощью драйвера PostgreSQL JDBC

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

Подключение к серверу PostgreSQL через приложение Java

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

  • Соединительный шнур
  • Имя пользователя
  • Пароль

Для целей этого руководства мы будем использовать суперпользователя PostgreSQL с именем «postgres» с паролем «1234».

1
2
3
4
5
6
7
8

// строка подключения
private final String conectionUrl = «jdbc: postgresql: // localhost / testdatabase»;

// имя пользователя
private final String user_name = «postgres»;

// пароль пользователя
private final String pwd = «1234»;

ПРИМЕЧАНИЕ: Эти сведения о подключении приведены только для примера; ваше соединение и данные для входа могут отличаться в зависимости от вашей настройки PostgreSQL.

Мы передадим эти данные методу getConnection () класса DriverManager при подключении к нашему серверу базы данных PostgreSQL.

Код, показанный ниже, определяет функцию dbconnect () , которая будет использовать как вышеупомянутые детали соединения, так и метод getConnection () :

Мы можем протестировать наш код, изменив функцию main () , которая действует как точка входа в наше приложение. Следующий код подробно описывает, что именно нужно поместить в функцию main () .После внесения изменений мы можем запустить программу, нажав CTRL + F11 на клавиатуре:

1
2
3
4
5

public static void main (String [] args) {

JdbcDemo app = new JdbcDemo ();
app.dbconnect ();
}

Результат будет примерно таким:

Операция Java UPDATE в базе данных PostgreSQL с использованием драйвера JDBC

Следующий код выполняет операцию UPDATE для таблицы tblcars в нашей базе данных PostgreSQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

общедоступный длинный updateCarname (Автомобиль) {
String SQLupdate = «UPDATE tblcars»
+ «SET carname =?»
+ «WHERE id =?»;

int rowsAffected = 0;

try (Connection conn = dbconnect ();

PreparedStatement prepareStatement = conn. prepareStatement (SQLupdate)) {
prepareStatement.setString (1, carname);
prepareStatement.setInt (2, идентификатор);

rowsAffected = prepareStatement.executeUpdate ();
} catch (SQLException ex) {
System.err.println (ex.getMessage ());
}
return rowsAffected;
}

Давайте подробнее рассмотрим, что происходит в каждой части этого кода:

  • Сначала мы создаем оператор SQL с именем SQLupdate , который обновит carname конкретного автомобиля в таблице tblcars .

  • Затем мы устанавливаем наше соединение с помощью функции dbconnect () после создания объекта PreparedStatement .

  • Затем мы используем наш prepareStatement для передачи нового значения carname .

  • Затем мы выполняем наш оператор UPDATE , вызывая метод executeUpdata () .

  • Наконец, объекты Connection и PreparedStatement будут закрыты с помощью блока try-catch .

Давайте протестируем наше приложение еще раз, изменив нашу функцию main () следующим кодом:

1
2
3
4

Приложение JdbcDemo = новое JdbcDemo ();
// приведенный ниже код обновит 1 запись в таблице tblcars
// с идентификатором 1 и изменит поле carname на новое значение «expander»
app.updateCarname (1, «expander»);

Мы можем запустить быстрый SELECT в нашей оболочке PostgreSQL, чтобы увидеть, успешно ли мы обновили целевую запись:

1
2
3
4
5
6
7
8
9

автомобили = # ВЫБРАТЬ * ИЗ tblcars;
id | carname | марка
—- + ———— + ————
2 | виго | toyota
3 | эртига | suzuki
4 | город | honda
5 | Приключение | Mitsubishi
1 | расширитель | Toyota
(5 РЯД)

Мы видим, что запись с идентификатором «1» была обновлена ​​с новым именем «расширитель».

Заключение

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

Код

На протяжении всего этого руководства мы исследовали наш Java-код по частям. Ниже показано приложение Java целиком:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

пакет com. pgjdbc.demo;

импорт java.sql.Connection;
импорт java.sql.DriverManager;
импорт java.sql.PreparedStatement;
импорт java.sql.ResultSet;
импорт java.sql.SQLException;
импорт java.sql.Statement;

общедоступный класс JdbcDemo {

закрытый конечный String conUrl = «jdbc: postgresql: // localhost / cars»;
закрытая конечная строка username = «postgres»;
private final String password = «1234»;

общедоступное соединение dbconnect () {
Соединение dbconnect = null;

попробуйте {
dbconnect = DriverManager.getConnection (conUrl, имя пользователя, пароль);
System.out.println («Теперь вы подключены к серверу»);
} catch (SQLException e) {
System.err.println (e.getMessage ());
}

возврат dbconnect;
}

public static void main (String [] args) {

JdbcDemo app = new JdbcDemo ();
app.updateCarname (1, «расширитель»);
}

public int updateCarname (int id, String carname) {
String SQLupdate = «UPDATE tblcars»
+ «SET carname =?»
+ «WHERE id =?»;

int rowsAffected = 0;

try (Connection conn = dbconnect ();

PreparedStatement prepareStatement = conn. prepareStatement (SQLupdate)) {
prepareStatement.setString (1, carname);
prepareStatement.setInt (2, идентификатор);

rowsAffected = prepareStatement.executeUpdate ();
} catch (SQLException ex) {
System.err.println (ex.getMessage ());
}
return rowsAffected;
}
}

Написание функций PostgreSQL с помощью Java с использованием PL / Java

Написание функций PostgreSQL с помощью Java с использованием PL / Java | rieckpil Закрыть диалог

Срок действия сеанса истек

Пожалуйста, войдите снова.Страница входа откроется в новой вкладке. После авторизации вы можете закрыть его и вернуться на эту страницу.

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

Принять все

Сохранять

Индивидуальные настройки конфиденциальности

Детали куки Политика конфиденциальности Отпечаток

Предпочтение конфиденциальности

Здесь вы найдете обзор всех используемых файлов cookie. Вы можете дать свое согласие на использование целых категорий или отобразить дополнительную информацию и выбрать определенные файлы cookie.

Имя Borlabs Cookie
Провайдер Владелец сайта
Назначение Сохраняет предпочтения посетителей, выбранные в поле cookie файла cookie Borlabs.
Имя файла cookie borlabs-cookie
Срок действия cookie 1 год
Принять
Имя Пиксель Facebook
Провайдер Facebook Ireland Limited
Назначение Cookie от Facebook, используемый для аналитики веб-сайтов, таргетинга и измерения рекламы.
Политика конфиденциальности https://www.facebook.com/policies/cookies
Имя файла cookie _fbp, act, c_user, datr, fr, m_pixel_ration, pl, присутствие, sb, spin, wd, xs
Срок действия cookie сессия / 1 год

PostgreSQL JDBC для Windows — MATLAB и Simulink

  • Откройте приложение Database Explorer, щелкнув вкладку Apps на панели инструментов MATLAB ® . Затем справа от раздела Приложения щелкните стрелку Показать еще , чтобы открыть галерею приложений. В разделе Подключение к базе данных и отчеты щелкните Обозреватель баз данных . Или введите в командной строке databaseExplorer .

  • В разделе Источник данных выберите Настроить источник данных > Настроить источник данных JDBC .

    Откроется диалоговое окно Конфигурация источника данных JDBC.

  • В поле Имя введите имя для ваших данных источник. (В этом примере используется источник данных с именем PostgreSQL .) Вы используете это имя для создания подключение к вашей базе данных.

  • В списке Поставщик выберите PostgreSQL .

  • В поле Driver Location введите полный путь в файл драйвера JDBC.

  • В поле База данных введите имя вашего база данных. В поле Server введите имя вашего сервер базы данных. Проконсультируйтесь с администратором базы данных по поводу имени ваш сервер базы данных. В поле Номер порта введите номер порта.

  • В разделе Параметры подключения в столбце Имя , введите название дополнительной опции для конкретного драйвера.Затем в Значение столбца введите значение параметра для конкретного драйвера. Нажмите знак «плюс» + для указания дополнительных параметров драйвера.

  • Нажмите Тест . Диалоговое окно Test Connection открывается. Введите имя пользователя и пароль для своей базы данных или оставьте эти поля пусты, если ваша база данных не требует их. Нажмите Тест .

    Если соединение установлено успешно, откроется диалоговое окно Database Explorer. сообщение об успешном подключении. В противном случае это отображает сообщение об ошибке.

  • Нажмите Сохранить . Конфигурация источника данных JDBC диалоговое окно отображает сообщение о том, что источник данных сохранен успешно. Закройте это диалоговое окно.

  • Проект документации Linux


    Информация о LDP
    FAQ
    Манифест / лицензия
    История
    Волонтеры / сотрудники
    Должностные инструкции
    Списки рассылки
    IRC
    Обратная связь

    Автор / внести вклад
    Руководство для авторов LDP
    Помогите / помогите
    Ресурсы
    Как отправить
    Репозиторий GIT
    Загрузок
    Контакты

    Спонсор сайта LDP
    Мастерская

    LDP Wiki : LDP Wiki — это отправная точка для любой незавершенной работы
    Члены | Авторы | Посетители
    Документы

    HOWTO : тематическая справка
    последние обновления | основной индекс | просматривать по категориям
    Руководства : длинные, подробные книги
    последние обновления / основной индекс
    Часто задаваемые вопросы : Часто задаваемые вопросы
    последние обновления / основной индекс
    страницы руководства : справка по отдельным командам (20060810)
    Бюллетень Linux : Интернет-журнал
    Поиск / Ресурсы

    Ссылки
    Поиск OMF
    Объявления / Разное


    Обновления документов
    Ссылка на HOWTO, которые были недавно обновлены.

    Обработка древовидных моделей данных с помощью PostgreSQL и Java | Луис Тригейрос

    Как консультант / разработчик, одна из вещей, которые мне больше всего нравятся, — это наводить мосты между текущим миром и будущим, между нынешней системой и будущей системой. В этом посте я расскажу о подобном мосте. Строительное упражнение в области SQL / Java / Docker.

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

    Вы когда-нибудь сталкивались с необходимостью хранить в SQL что-то, что это древовидная структура данных?

    Примеры этого требования повторяются, и я видел это несколько раз, например:

    • Каталог продукции
    • Система управления документами
    • Система управления сотрудниками / компанией

    Несколько месяцев назад я наткнулся на очень элегантное решение этой проблемы, и оно основано на расширении PostgreSQL LTREE и потрясающем наборе статей Пэт Шонесси по этой теме, так что это не универсальное решение для какой-либо RBMS, но оно использует пользовательские типы данных PostgreSQL и если вы используете PostgreSQL, прочитав эту статью, вы сможете воспроизвести это решение.

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

    • Перенос схемы с использованием Flyway
    • Автоматизация тестирования с использованием Testcontainers
    • Как получить доступ к настраиваемому типу данных PostgresSQL из Java с помощью Micronaut Data JDBC.
    • Подготовьте базу данных и контейнер приложения с помощью Docker Compose и Terraform.

    Если вы похожи на меня, вы, вероятно, будете думать в своей голове: « Покажите мне код », а полное решение доступно в моей учетной записи GitHub at:

    Весь примерный код прекрасно объединен платформой Micronaut Framework, примерная схема, которую я использую для тестирования, представляет собой древовидную структуру, представленную ниже:

    Для ее создания используется следующий оператор SQL DDL:

    Оператор по адресу строка 1 включает настраиваемый тип данных LTREE в целевой схеме, таким образом, убедившись, что он доступен для использования, чтобы использовать его. Строка 5 как часть создания таблицы, как вы можете видеть, в этой таблице есть столбец с именем path типа LTREE, и есть подробнее о содержании этой колонки в ближайшее время.

    Кроме того, в строке 8 нам нужно сообщить PostgreSQL, что нам нужен индекс GIST для столбца пути.

    На изображении выше вы можете видеть, что в строках с 1 по 7 каждый из узлов дерева был создан в коде SQL, и важной частью является столбец пути, где в каждой определяемой нами записи находится местоположение в дереве с предшествующим родительским узлом каждого узла через «.» .

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

    В примере кода вы найдете стандартный хлеб с маслом Micronaut JDBC Data код доступа к данным в пакетах домена и репозитория.

    В пакете уровня домена я создал классы Record , LTree и LTreeConverters .

    Класс Record — это прямое сопоставление одной с одной из записей в ранее созданной таблице SQL « tree », что особенно интересно в пакете домена, это класс LTree .

    На изображении выше видно содержимое класса LTree, и это способ Micronaut для поддержки пользовательских типов данных SQL в коде JDBC, что позволяет отображать пользовательский тип данных LTREE PostgreSQL в эквивалентный тип Java, который у нас не поддерживается. прямо из коробки в стандартном JDBC.

    Micronaut использует аннотацию TypeDef , чтобы при создании записи из базы данных знать, что он должен использовать преобразователь типов для настраиваемого типа данных SQL столбца пути.

    Изображение над ним представляет собой содержимое кода преобразователя типа LTree, позволяющее нам читать и записывать в столбец LTREE в базе данных. На стороне Java мы обрабатываем содержимое как строку, и Micronaut может использовать инъекцию зависимостей для обнаружите необходимые преобразователи типов, и самое прекрасное то, что он может делать все это с помощью Java Reflection, поскольку он использует предварительную обработку аннотаций во время компиляции, так что сгенерированный код эффективно использует память.

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

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

    В строке 17 мы используем аннотацию JdbcRepository , которая сообщает Micronaut, что это объект доступа к данным JDBC и что мы говорим с использованием диалекта PostgreSQL.

    В строке 18 мы реализуем интерфейс CrudRepository , и это намекнет Micronaut на ссылку для использования всего базового кода доступа к базе данных CRUD. Причина, по которой это абстрактный класс, заключается в том, что мы не создаем экземпляры этого класса, но объект этого класса будет предоставлен нам Micronaut во время выполнения.

    В методе childrenOf проявляется магия типа LTREE, как вы можете видеть в строке 28, мы выполняем SQL-запрос select с использованием специального оператора « @> », что означает передачу всего узла, имеющего меня как родитель.

    Кроме того, в строке 38 очень важно использование Types.OTHER, поскольку это сообщает драйверу JDBC, что этот параметр является настраиваемым типом данных SQL.

    Наконец, в строке 32 мы считываем результат запроса в базу данных и сопоставляем его со списком экземпляров объекта Record , и это возможно, потому что мы определили LTree и LTreeConverters на уровне домена.

    В пакете контроллера есть более интересный код, в котором я создаю представление дерева в виде объекта JSON, возвращаемого как часть ответа API.

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

    Изображение выше — результат выполнения простого теста с использованием подключаемого модуля VSCode REST Client.

    JDBC To Other Databases — Spark 3.0.2 Documentation

    Spark SQL также включает источник данных, который может считывать данные из других баз данных с помощью JDBC. Этот функциональность должна быть предпочтительнее использования JdbcRDD.Это потому, что результаты возвращаются как DataFrame, и их можно легко обрабатывать в Spark SQL или объединять с другими источниками данных. Источник данных JDBC также проще использовать из Java или Python, поскольку он не требует от пользователя предоставить ClassTag. (Обратите внимание, что это отличается от сервера JDBC Spark SQL, который позволяет другим приложениям выполнять запросы с использованием Spark SQL).

    Для начала вам нужно будет включить драйвер JDBC для вашей конкретной базы данных в путь к классам искры.Например, чтобы подключиться к postgres из Spark Shell, вы должны запустить следующая команда:

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

    Имя свойства Значение
    url URL-адрес JDBC для подключения.Свойства соединения, зависящие от источника, могут быть указаны в URL-адресе. например, jdbc: postgresql: // localhost / test? user = fred & password = secret
    таблица Таблица JDBC, из которой следует читать или записывать. Обратите внимание, что при использовании его в чтении path можно использовать все, что допустимо в предложении FROM запроса SQL. Например, вместо полной таблицы вы также можете использовать подзапрос в круглых скобках.Это не так позволяет одновременно указывать параметры dbtable и query .
    запрос Запрос, который будет использоваться для чтения данных в Spark. Указанный запрос будет заключен в скобки и использован как подзапрос в предложении FROM . Spark также назначит псевдоним предложению подзапроса. Например, Spark отправит запрос следующей формы к источнику JDBC.

    SELECT FROM () spark_gen_alias

    Ниже приведены некоторые ограничения при использовании этой опции.

    1. Нельзя одновременно указывать параметры dbtable и query .
    2. Нельзя одновременно указывать параметры query и partitionColumn . При указании partitionColumn опция обязательна, подзапрос можно указать с помощью опции dbtable и столбцы разделов могут быть квалифицированы с помощью псевдонима подзапроса, предоставленного как часть dbtable .
      Пример:
      spark.read.format ("jdbc")
      .option ("url", jdbcUrl)
      .option ("query", "select c1, c2 from t1")
      .load ()
    водитель Имя класса драйвера JDBC, используемого для подключения к этому URL-адресу.
    перегородка Столбец, нижняя граница, верхняя граница Все эти параметры должны быть указаны, если указан какой-либо из них.Кроме того, numPartitions необходимо указать. Они описывают, как разбить таблицу, когда параллельное чтение от нескольких воркеров. partitionColumn должен быть числовым столбцом, столбцом даты или времени из рассматриваемой таблицы. Обратите внимание, что lowerBound и upperBound используются только для определения шаг раздела, а не для фильтрации строк в таблице. Таким образом, все строки в таблице будут разделили и вернули. Эта опция применима только к чтению.
    число Разделы Максимальное количество разделов, которые можно использовать для параллелизма при чтении таблиц и письмо. Это также определяет максимальное количество одновременных подключений JDBC. Если количество разделов для записи превышает этот предел, мы уменьшаем его до этого предела на вызов coalesce (numPartitions) перед записью.
    queryTimeout Количество секунд, в течение которых драйвер будет ждать выполнения объекта Statement в заданном количество секунд.Ноль означает, что ограничения нет. В пути записи этот параметр зависит от как драйверы JDBC реализуют API setQueryTimeout , например, драйвер JDBC h3 проверяет тайм-аут каждого запроса вместо всего пакета JDBC. По умолчанию это 0 .
    размер выборки Размер выборки JDBC, который определяет, сколько строк нужно извлекать за один проход в оба конца. Это может улучшить производительность драйверов JDBC, которые по умолчанию имеют низкий размер выборки (например,Оракул с 10 строками). Эта опция применима только к чтению.
    размер партии Размер пакета JDBC, который определяет, сколько строк вставлять за один проход туда и обратно. Это может улучшить производительность драйверов JDBC. Эта опция применима только к письму. По умолчанию это 1000 .
    Уровень изоляции Уровень изоляции транзакции, применяемый к текущему соединению. Это может быть один из NONE , READ_COMMITTED , READ_UNCOMMITTED , REPEATABLE_READ или SERIALIZABLE , что соответствует стандартным уровням изоляции транзакции, определенным объектом Connection JDBC, по умолчанию READ_UNCOMMITTED . Эта опция применима только к письму. См. Документацию в java.sql.Connection .
    sessionInitStatement После открытия каждого сеанса базы данных для удаленной БД и перед началом чтения данных эта опция выполняет пользовательский оператор SQL (или блок PL / SQL). Используйте это для реализации кода инициализации сеанса. Пример: option ("sessionInitStatement", "" "BEGIN выполнить немедленно 'alter session set" _serial_direct_read "= true'; END;" "")
    усечь Это опция, связанная с записью JDBC.Когда SaveMode.Overwrite включен, этот параметр заставляет Spark усекать существующую таблицу вместо ее удаления и повторного создания. Это может быть более эффективным и предотвращает удаление метаданных таблицы (например, индексов). Однако в некоторых случаях это не сработает, например, когда новые данные имеют другую схему. По умолчанию это false . Эта опция применима только к письму.
    каскад Усечение Это опция, связанная с записью JDBC.Если эта опция включена и поддерживается базой данных JDBC (на данный момент PostgreSQL и Oracle), эта опция позволяет выполнить TRUNCATE TABLE t CASCADE (в случае PostgreSQL только TRUNCATE TABLE t CASCADE выполняется для предотвращения случайного усечения потомка). таблицы). Это повлияет на другие таблицы, поэтому использовать его следует с осторожностью. Эта опция применима только к письму. По умолчанию используется поведение каскадного усечения по умолчанию для рассматриваемой базы данных JDBC, указанное в isCascadeTruncate в каждом JDBCDialect.
    createTableOptions Это опция, связанная с записью JDBC. Если указан, этот параметр позволяет установить параметры таблицы и раздела для конкретной базы данных при создании таблицы (например, CREATE TABLE t (строка имени) ENGINE = InnoDB. ). Эта опция применима только к письму.
    createTableColumnTypes Типы данных столбца базы данных, которые следует использовать вместо значений по умолчанию при создании таблицы.Информация о типе данных должна быть указана в том же формате, что и синтаксис столбцов CREATE TABLE (например: «имя CHAR (64), комментарии VARCHAR (1024)») . Указанные типы должны быть допустимыми типами данных Spark sql. Эта опция применима только к письму.
    индивидуальная схема Настраиваемая схема, используемая для чтения данных из соединителей JDBC. Например, "id DECIMAL (38, 0), name STRING" . Вы также можете указать частичные поля, а остальные использовать сопоставление типов по умолчанию.Например, "id DECIMAL (38, 0)" . Имена столбцов должны совпадать с именами соответствующих столбцов таблицы JDBC. Пользователи могут указать соответствующие типы данных Spark SQL вместо использования значений по умолчанию. Эта опция применима только к чтению.
    pushDownPredicate Возможность включить или отключить передачу предикатов в источник данных JDBC. Значение по умолчанию — истина, и в этом случае Spark будет максимально распространять фильтры на источник данных JDBC.В противном случае, если установлено значение false, никакой фильтр не будет передан в источник данных JDBC, и, таким образом, все фильтры будут обрабатываться Spark. Выталкивание предикатов обычно отключается, если фильтрация предикатов выполняется Spark быстрее, чем источником данных JDBC.

    Как настроить источник данных PostgreSql с помощью Wildfly?

    Вариант № 1 Использование консоли управления WildFly

    Откройте консольное приложение (http://127.0.0.1:9990/ — это URL-адрес по умолчанию, если Wildfly запущен на вашем компьютере)

    Развернуть драйвер JDBC
    • Перейти на вкладки «Развертывания» (в верхней строке меню)
    • Нажмите кнопку «Добавить»
    • Выберите «Загрузить новое развертывание» и нажмите «Далее».
    • Нажмите «Выбрать файл» и выберите загруженный вами драйвер JDBC (для меня это postgresql-42.2.1.jar) и нажмите «Далее»
    • Проверьте имя и имя среды выполнения. Имя — это уникальный идентификатор развертывания, который должен быть уникальным для всех развертываний. Имя среды выполнения — это имя, под которым развертывание должно быть известно в среде выполнения сервера. В большинстве случаев это будет то же самое, что и имя, но иногда пользователи могут пожелать иметь два развертывания с одним и тем же «runtime-name» (например, две версии «module.war»). Оба доступны в репозитории содержимого развертывания, и в этом случае развертываниям необходимо иметь разные значения «name», но одно и то же «runtime-name».Не забудьте поставить галочку «Включить» и нажать «Готово»

    Драйвер JDBC теперь развернут и доступен.

    Создайте источник данных
    • Зайдите в «Конфигурация» (в верхней строке меню)
    • Выберите «Подсистемы», затем «Источники данных», затем «Не-xa» и нажмите кнопку «Добавить».
    • Выберите «Источник данных PostgreSQL» и нажмите «Далее».
    • Теперь вы можете написать имя и имя JNDI. Оба имени должны быть уникальными. Имя — это уникальный идентификатор источника данных, а имя JNDI — это то, как приложение найдет источник данных (в JPA имя JNDI — это имя в постоянном хранилище.xml для конфигурации) (для меня имя — «StenusysDemoDS», а имя JNDI — «java: jboss / datasources / StenusysDemoDS») и нажмите «Далее»
    • Чтобы выбрать драйвер, нажмите «Обнаруженный драйвер», выберите тот, который был установлен ранее, и нажмите «Далее».
    • Измените «URL подключения» (я поставлю jdbc: postgresql: // localhost: 5432 / StenusysDemo). Имя пользователя и пароль — это учетные данные PostgreSQL.
    • Щелкните «Проверить соединение». Появится всплывающее окно с сообщением об успешном выполнении, но в случае неудачи будет доступна кнопка «Подробности», чтобы получить дополнительную информацию о проблеме.
    • Щелкните «Готово».

    Вариант № 2 Редакция файла конфигурации

    Standalone. xml — это файл конфигурации для сервера. Консоль управления — это просто удобный интерфейс для редактирования этого файла.

    Развернуть драйвер JDBC
    • Откройте проводник и перейдите в каталог / modules / в каталоге установки Wildfly.
    • Создайте папки / org / postgresql / main /. Эти папки должны соответствовать пакету иерархии драйвера JDBC.
    • Скопируйте драйвер JDBC в созданный вами «главный» каталог.
    • В этом каталоге создайте файл «module.xml» с этим
     
    
    <ресурсы>
    
    
    
    <зависимости>
    <имя модуля = "javax.api "/>
    
    
     
    Создайте источник данных
    • Перейдите в каталог / standalone / configuration в каталоге установки Wildfly.
    • Откройте standalone.xml (это файл конфигурации по умолчанию, используемый автономным сервером)
    • Найдите «источник данных», чтобы перейти к правой части.
    • В элементе вам нужно добавить как для PostgreSQL, так и
     <драйверы>
        <имя драйвера = "postgresql" module = "org.postgresql ">
            
             org.postgresql.xa.PGXADataSource 
            
             org.postgresql.Driver 
        
    
    <источники данных>
        
             jdbc: postgresql: // localhost: 5432 / StenusysDemo 
             postgresql 
            <безопасность>
                 postgres 
                 админ 
            
        
    
     

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

    Вариант № 3 с использованием Wildfly CLI

    Последний способ добавить источник данных — использовать интерфейс консоли (CLI). Опять же, процесс разделен на два этапа.

    Развернуть драйвер JDBC
    • Перейдите в каталог / bin в каталоге установки Wildfly.
    • Откройте терминал в этом каталоге и запустите
     ./jboss-cli.sh --connect controller = 127.0.0.1 

    (или jboss-cli.bat, если вы используете Windows)

    • Для установки модуля запустите эту команду
     модуль добавить --name = org.postgresql --resources = / tmp / postgresql-42.2.1.jar --dependencies = javax.api, javax.transaction.api 
    Создайте источник данных
    • Создание драйвера выполняется с помощью этой команды
     /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver) 
    • И затем последняя команда для добавления источника данных
     добавление источника данных --jndi-name = java: jboss / datasources / StenusysDemoDS --name = StenusysDemoDS --connection-url = jdbc: postgresql: // localhost: 5432 / StenusysDemo --driver-name = postgres - имя пользователя = postgres --password = админ 

    Вы можете проверить свое изменение, проверив соединение в консоли управления.

    Заключение

    Поехали!

    Мы рассмотрели 3 способа настройки связи между Wildfly и PostgreSQL. Если вы хотите использовать другую базу данных (Oracle, MySQL, …), просто выполните ту же процедуру с соответствующим драйвером.

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

    Редакция файлов конфигурации — очень распространенное и хорошее решение. Вы можете добавить необходимые файлы в поставку вашего приложения и развернуть его на своем сервере. Он работает только в том случае, если на сервере запущено одно приложение (вы переопределите файлы) и требует перезапуска, что не подходит для служб высокой доступности.

    У метода CLI есть несколько преимуществ: вы можете легко добавлять необходимые элементы в свои сценарии развертывания и выполнять обновления без простоев.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Theme: Overlay by Kaira Extra Text
    Cape Town, South Africa