Java postgresql пример: Работа с PostgreSQL в Java
Spring Boot — пример с Postgres и JPA
В данной статье речь пойдет о фреймворке Spring, а точнее о Spring Boot. Я покажу, как быстро в считанные минуты запустить простое приложение и подключить к нему базу данных postgresql. Мы сделаем пару примеров на простые операции с базой данных.
Для того, чтобы не терять времени и говорить на одном языке я предполагаю, что читатель уже знаком с таким понятием как Spring, знает, что такое JPA, Hibernate и что такое Maven. Если все это для Вас ново — предлагаю для ознакомления статьи в порядке важности: Spring MVC первое веб приложение — о спринг фреймворке и архитектурах веб приложения; Spring Boot простое приложение — о спринг бут кратко, но понятно; Что такое hibernate — о работе с базами данных.
Для создания приложения и подключения всех необходимых зависимостей воспользуемся инструментом SPRING INITIALIZR — это просто сайт, где Вы можете выбрать все необходимые зависимости для приложения и система выдаст готовое приложение доступное для скачивания.
Для начала нужно перейти на сайт https://start.spring.io/ ввести group и artifact своего приложения. Идентично тому, как мы вводим groupId и artifactId когда создаем Maven приложение. Далее в строке Search for dependencies нужно ввести зависимости, которые нужно добавить в приложение. После этого нажимаем большую кнопку Generate project и должна начаться загрузка архива с приложением:
Для тех, кому привычнее создавать приложения в обычной манере — можно не пользоваться этим инструментом. Главное создать простое Spring Boot приложение и подключить к нему зависимости для Postgresql, JPA, WEB. Скачанный архив нужно распаковать в удобную папку и открыть приложение с помощью любимой идее. На этот раз я буду пользоваться intellij idea. Как я неоднократно упоминал — выбор инструмента программирования не имеет значения. Главное, чтобы Вам было удобно.
И так, приложение создано и открыто.
На рисунке выше — структура моего приложения. В нем создан только один класс, который является точкой входа в приложение. Его код ни чем не примечательный и таковым и останется.
package com.javamaster.springjpapostgres;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringjpapostgresApplication {
- public static void main(String[] args) {
SpringApplication.run(SpringjpapostgresApplication.class, args);
}
}
Файл 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>
<groupId>com.javamaster</groupId>
<artifactId>springjpapostgres</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springjpapostgres</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!— lookup parent from repository —>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1206-jdbc42</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Теперь пришло время настроить нашу Postgresql базу данных. Я создам простую базу данных, которую назову usersmanagement. В ней будет две таблицы: users и address. У нас будет очень таки стандартная предметная область: управление пользователями. Пользователи будут иметь некоторые атрибуты и адрес.
create database usersmanagement;
CREATE TABLE public.address
(
- id SERIAL PRIMARY KEY NOT NULL,
city TEXT,
street TEXT,
home_number VARCHAR(5)
);
CREATE UNIQUE INDEX address_id_uindex ON public.address (id);
CREATE TABLE public.users
(
id SERIAL NOT NULL,
name TEXT,
email VARCHAR(20),
- address_id INT PRIMARY KEY,
- CONSTRAINT users_address_id_fk FOREIGN KEY (address_id) REFERENCES address (id)
);
CREATE UNIQUE INDEX users_id_uindex ON public.users (id);
Теперь нужно создать в нашем приложении файл настроек доступа к базе данных. В Spring Boot это делается очень просто: нужно в папке проекта найти директорию resources. В ней должен быть файл application.properties. Если его нет — нужно создать:
Теперь, в данном файле нужно указать путь к базе, имя пользователя и пароль:
spring.datasource.url=jdbc:postgresql://localhost:5432/usersmanagement
spring.datasource.username=postgres
spring.datasource.password=postgres
Далее пропишем классы сущностей базы данных. Для этого создадим пакет entity и поместим в него два класса: Address иUsers.
package com.javamaster.springjpapostgres.entity;
import javax.persistence.*;
@Table(name = «address»)
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
@Column
@Column(name = «home_number»)
- private String homeNumber;
//getters and setters
}
package com.javamaster.springjpapostgres.entity;
import javax.persistence.*;
@Table(name = «users»)
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
@Column
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = «address_id»)
private Address address;
}
//getters and setters
Теперь пришло время воспользоваться Spring JPA и написать методы доступа к базе данных. Для того, чтобы воспользоваться нужно создать свой интерфейс и унаследовать его от готового интерфейса JpaRepository <T, ID> где T — это сущность для доступа к которой будут использоваться методы, а ID — тип первичного ключа. На примере станет яснее.
Создадим сперва пакет и дадим ему имя repository. В нем будем создавать наши интерфейсы для доступа к сущностям в базе данных. В него поместим интерфейс UsersRepository и AddressRepository. Далее проделаем над интерфейсами процедуру описанную выше и получаем код который ниже.
package com.javamaster.springjpapostgres.repository;
import com.javamaster.springjpapostgres.entity.Address;
import org.springframework.data.jpa.repository.JpaRepository;
postgresql — Подключение к PostgreSQL с Java
Вступление
API для использования реляционной базы данных с Java — это JDBC.
Этот API реализован драйвером JDBC.
Чтобы использовать его, поместите JAR-файл с драйвером в путь класса JAVA.
В этой документации приведены примеры использования драйвера JDBC для подключения к базе данных.
замечания
URL JDBC
URL JDBC может принимать одну из следующих форм:
jdbc:postgresql:// host [: port ]/[ database ][ parameters ]
host
умолчанию —localhost
,port
— 5432.
Еслиhost
является адресом IPv6, он должен быть заключен в квадратные скобки.
Имя базы данных по умолчанию совпадает с именем подключаемого пользователя.Чтобы реализовать переход на другой ресурс, возможно наличие нескольких записей
host [: port ]
разделенных запятой.
Они стараются в свою очередь, пока соединение не удастся.jdbc:postgresql: database [ parameters ]
jdbc:postgresql:/[ parameters ]
Эти формы предназначены для соединений с
localhost
.
parameters
— это список key [= value ]
пар key [= value ]
, возглавляемых ?
и разделяются символом &
. Если value
отсутствует, оно считается true
.
Пример:
jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidatingFactory
Рекомендации
Подключение к PostgreSQL с Java Связанные примеры
Простой пример JDBC для начинающих / Хабр
Здравствуйте! В этой статье я напишу простой пример соединения с базами данных на Java.Эта статья предназначена новичкам.Здесь я опишу каждую строчку объясню что зачем.
Но для начала немного теории.
JDBC (Java DataBase Connectivity — соединение с базами данных на Java) предназначен для взаимодействия Java-приложения с различными системами управления базами данных (СУБД). Всё движение в JDBC основано на драйверах которые указываются специально описанным URL.
А теперь практика.
Для начала создаём maven проект и в pom.xml помещаем зависимость для соединения с СУБД (В моём случае СУБД будет выступать MySQL):
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
Должно получится так:
Дальше подключаемся к базе данных нужной вам(я пользуюсь IDEA Ultimate по этому я подключаюсь именно так).
Дальше заполняем Database, User и Password.Обязательно проверяем соединение.
Дальше мы создаём сам класс.
А теперь разберём его построчно:
В начале мы создаём три переменные url,username и password. Образец указания url:
Username по умолчанию root.Password вы должны знать сами.
После с помощью строчки Class.forName(«com.mysql.jdbc.Driver») регестрируем драйвера. Дальше устанавливаем соединение с помощью DriverManager.getConnection (ваш url, username, password).
После с помощью connection (соединения) создаём простой запрос Statement методом createStatement().
Дальше создаём экземпляр класса ResultSet и формируем запрос через statement методом executeQuery (запрос).
Дальше мы заставляем пробежаться resultSet по всей базе данных и вывести то что нам нужно. Так с помощью объекта resultSet и его методов (getString,getInt и т.д. в зависимости от типа переменных в колонке) мы выводим.Так как мой запрос был для того что бы вывести всё, мы можем вывести любую колонку.
После закрываем resultSet,statement и connection (именно в такой последовательности). В процессе он будет показывать ошибки так как будет запрашивать обработку исключений в catch.Так что пишите catch заранее.
Теперь когда практика есть на неё можно наложить более глубокую теорию.Тема правда очень большая, желаю удачи в её изучении.
Этот проект на github тут.
JPA/Hibernate и PostgreSQL: примеры настройки
Перед тем, как соединяться из Hibernate с PostgreSQL, не забудьте создать пользователя, базу данных и предоставить пользователю права на неё:
CREATE ROLE test WITH PASSWORD ‘test’;
ALTER ROLE test WITH LOGIN;
CREATE DATABASE test OWNER test;
CREATE ROLE test WITH PASSWORD ‘test’; ALTER ROLE test WITH LOGIN; CREATE DATABASE test OWNER test; |
Команды выше создают пользователя test с паролем test, создают базу данных test и назначают пользователя владельцем базы. В условиях реального приложения, разумеется, следует выбрать пароль посложнее.
Перед тем, как использовать PostgreSQL, необходимо добавить его JDBC драйвер в зависимости maven:
<properties>
<postgresql.version>9.4.1212.jre7</postgresql.version>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
</dependencies>
<properties> <postgresql.version>9.4.1212.jre7</postgresql.version> </properties>
<dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${postgresql.version}</version> </dependency> </dependencies> |
С драйвером PostgreSQL в classpath можно настраивать Hibernate как JPA провайдер. Напоминаю, что все настройки JPA находятся в файле META-INF/persistence.xml
<persistence xmlns=»http://java.sun.com/xml/ns/persistence»
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd»
version=»2.0″>
<persistence-unit name=»ru.easyjava.data.jpa.hibernate»>
<properties>
<property name=»hibernate.hbm2ddl.auto» value=»update»/>
<property name=»hibernate.connection.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/>
<property name=»hibernate.connection.username» value=»test»/>
<property name=»hibernate.connection.password» value=»test»/>
<property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/>
</properties>
</persistence-unit>
</persistence>
<persistence xmlns=»http://java.sun.com/xml/ns/persistence» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd» version=»2.0″> <persistence-unit name=»ru.easyjava.data.jpa.hibernate»> <properties> <property name=»hibernate.hbm2ddl.auto» value=»update»/> <property name=»hibernate.connection.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/> <property name=»hibernate.connection.username» value=»test»/> <property name=»hibernate.connection.password» value=»test»/> <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/> </properties> </persistence-unit> </persistence> |
JDBC url у PostgreSQL имеет следующий формат: jdbc:postgresql://хост:порт/имябазы, например jdbc:postgresql://127.0.0.1:5432/test. Имя пользователя и пароль передаются отдельными параметрами. Наконец, надо не забыть переключить диалект Hibernate на PostgreSQL, что делается в последней строке.
Однако, как мы знаем, одно соединение не очень удобно использовать в реальном приложении. Поэтомунастроим пул c3p0 для совместного использования сJPA/Hibernate и PostgreSQL.
Для этого, кроме PostgreSQL JDBC драйвера, надо добавить непосредственно c3p0 и библиотеку hibernate-cp30 к зависимостям maven:
<properties>
<hibernate.version>5.2.1.Final</hibernate.version>
<c3p0.version>0.9.5.2</c3p0.version>
</properties>
<dependencies>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencies>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <properties> <hibernate.version>5.2.1.Final</hibernate.version> <c3p0.version>0.9.5.2</c3p0.version> </properties>
<dependencies> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>${c3p0.version}</version> </dependency>
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${hibernate.version}</version> </dependency> </dependencies> |
Для включения c3p0 достаточно добавить по меньшей мере один параметр c3p0 к настройкам Hibernate:
<persistence xmlns=»http://java.sun.com/xml/ns/persistence»
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd»
version=»2.0″>
<persistence-unit name=»ru.easyjava.data.jpa.hibernate»>
<properties>
<property name=»hibernate.hbm2ddl.auto» value=»update»/>
<property name=»hibernate.connection.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/>
<property name=»hibernate.connection.username» value=»test»/>
<property name=»hibernate.connection.password» value=»test»/>
<property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/>
<property name=»hibernate.c3p0.min_size» value=»5″/>
</properties>
</persistence-unit>
</persistence>
<persistence xmlns=»http://java.sun.com/xml/ns/persistence» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd» version=»2.0″> <persistence-unit name=»ru.easyjava.data.jpa.hibernate»> <properties> <property name=»hibernate.hbm2ddl.auto» value=»update»/> <property name=»hibernate.connection.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/> <property name=»hibernate.connection.username» value=»test»/> <property name=»hibernate.connection.password» value=»test»/> <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/> <property name=»hibernate.c3p0.min_size» value=»5″/> </properties> </persistence-unit> </persistence> |
Остальные параметры остаются такими же, как и для PostgreSQL без c3p0.
К сожалению, в Hibernate нет настолько высококачественной поддержки HikariCP, аналогичной c3p0. Поэтому настройка HikariCP требует чуть чуть больше работы.
В первую очередь, конечно же, надо добавить ещё и артефакт HikariCP в зависимости (не забываем про PostgeSQL JDBC драйвер):
<properties>
<hikaricp.version>2.4.3</hikaricp.version>
</properties>
<dependencies>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>${hikaricp.version}</version>
</dependency>
</dependencies>
<properties> <hikaricp.version>2.4.3</hikaricp.version> </properties>
<dependencies> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>${hikaricp.version}</version> </dependency> </dependencies> |
Потом необходимо изменить конфигурацию JPA/Hibernate для работы с HikariCP:
<persistence xmlns=»http://java.sun.com/xml/ns/persistence»
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd»
version=»2.0″>
<persistence-unit name=»ru.easyjava.data.jpa.hibernate»>
<properties>
<property name=»hibernate.hbm2ddl.auto» value=»update»/>
<property name=»hibernate.connection.provider_class» value=»com.zaxxer.hikari.hibernate.HikariConnectionProvider»/>
<property name=»hibernate.hikari.dataSourceClassName» value=»org.postgresql.ds.PGSimpleDataSource»/>
<property name=»hibernate.hikari.dataSource.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/>
<property name=»hibernate.hikari.username» value=»test»/>
<property name=»hibernate.hikari.password» value=»test»/>
<property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/>
</properties>
</persistence-unit>
</persistence>
<persistence xmlns=»http://java.sun.com/xml/ns/persistence» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd» version=»2.0″> <persistence-unit name=»ru.easyjava.data.jpa.hibernate»> <properties> <property name=»hibernate.hbm2ddl.auto» value=»update»/> <property name=»hibernate.connection.provider_class» value=»com.zaxxer.hikari.hibernate.HikariConnectionProvider»/> <property name=»hibernate.hikari.dataSourceClassName» value=»org.postgresql.ds.PGSimpleDataSource»/> <property name=»hibernate.hikari.dataSource.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/> <property name=»hibernate.hikari.username» value=»test»/> <property name=»hibernate.hikari.password» value=»test»/> <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/> </properties> </persistence-unit> </persistence> |
Все настройки соединения с PostgreSQL переименовываются и к ним добавляется два дополнительных параметра. Вначале в Hibernate настраивается использование HikariCP, затем указывается какой класс использовать для соединения с PostgreSQL.
Как распечатать любой результат запроса PostgreSQL в консоли с помощью Java?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
Подключение Java к базе данных postgresql
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.
java — Вставка значений в postgresql с использованием JDBC
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.
postgresql — вызов сохраненной функции на postgres из java
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.