Spring Framework. Урок 25: JDBC API. Базы данных.
Вставка
- Опубліковано 2 гру 2020
- Скачать PVS-Studio бесплатно:
www.viva64.com/spring_pvs
ПОЛНЫЙ КУРС ПО SPRING (Hibernate, REST, Boot, Security): swiftbook.org/courses/438
Продвинутая Java - swiftbook.org/courses/415
Мои уроки по Java EE - • Java EE для начинающих
Репозиторий стартового проекта - github.com/NeilAlishev/Spring...
Репозиторий урока - github.com/NeilAlishev/Spring...
Telegram: t.me/alishev_g
Реклама и сотрудничество: alishev.neil@gmail.com
ПОЛНЫЙ КУРС ПО SPRING (Hibernate, REST, Boot): swiftbook.org/courses/438
Telegram: t.me/alishev_g
Плейлист этого курса: ua-cam.com/play/PLAma_mKffTOR5o0WNHnY0mTjKxnCgSXrZ.html
Оказалось, что я уже в сообществе 👍
@@AndreyDeveloper хаха) все записываю. Как только будет готово выпущу :)
Ох и повезет же когда-нибудь человеку, который придет на все готовенькое, и просмотрит разом все ПОНЯТНЫЕ видосы про spring. Продолжай снимать эти ролики, ты сделал мое обучение короче в разы! Спасибо огромнейшее
Я - этот человек. Спасибо огромное за уроки!
С другой стороны когда он только придёт постигать науку, вы уже возможно будете работающими спецами)
Я тоже тот самый человек, который очень благодарен автору))
Да, самый понятный курс, который ответил на многие вопросы)
Дай Бог здоровья тебе и всех благ за труды твои, добрый человек!
можешьподсказать, что за пороль он вводит на 17:04? когда запустил установщик
@@alexandrkomar4741 вероятно postgres
@@damirmv1993затупил
Спасибо огромное за такие понятные и нужные уроки!! Вы - мой спаситель))
Кто делает используя СУБД MySQL:
1) зависимость называется - MySQL Connector/J
2) нужно прописать строку Class.forName("com.mysql.cj.jdbc.Driver"); вместо той что в уроке
Спасибо, добрый человек
@@rikki2338 рад был помочь :)
указал такой путь com.mysql.jdbc.Driver и заработало с вашим не пошло.
со строкой Class.forName("com.mysql.cj.jdbc.Driver") вместо 500 ошибки начало выдавать 404, а вот с Class.forName("com.mysql.jdbc.Driver") все запустилось. Всем спасибо
Спасибо добрый, умный человек )
Спасибо большое за видео!!!Вы не представляете как вы своими видео помогаете,если до этого я ни разу не писал комментарий,всегда говорил себе очень хорошо учит но не так уж сложно было.Но этот видос все таки пробудил поделится комментарием!Единственное и самое лучшее видео по обьяснению этой темы.Вы очень хорошо преподаете,так просто и гениально как говорится)).Спасибо,продолжайте нас радовать своими видеороликами!Огромная благодарность за вашу работу!
Спасибо)
Просмотрел весь курс, спасибо за то что уделяете на это время. Поставил колокольчик в ожидании следующих выпусков 🤗
Огромная Вам благодарность за такие качественные уроки по спрингу!!!
P.S. ResultSet и Connection в конце надо закрывать :)
Спасибо огромное за ваши труды! Лучшее, что есть в рунете по этой теме.
40 минут урок, и никакой воды - это космос. Лучший преподаватель рунета!
Долгожданное видео про БД) Ещё хотелось бы про сервисы в вашем исполнение послушать
Большое человеческое спасибо за серию по Spring. Ты просто супер!
Скоро уже близится новый год, и в связи с этим хотелось бы попросить Дедушку Мороза(alishev) сделать всем взрослым детишкам подарок от которого они будут радоваться как малые дети. А потом с веселым настроем счастливо лопать мандарины и кидая шкурки в монитор говорить "А че так можно было" :) смотреть новые выпуски сериала Spring Framework.
постараюсь)
Хочу сказать вам огромное спасибо за ваши видео, по сути благодаря им я устроился джуном, дали тестовое задание, и как раз удачно попал на ваши видео, жаль что про бд на тот момент не было видоса и пришлось искать инфу самому, в тот момент я еще больше убедился в том что ваши видосы очень крутые, вот просто огромное спасибо!
Поздравляю!
Чувствую, что совсем обленилась😅 слишком легко и просто с вами, все разжевано так как надо)
Ура, новое видео по спрингу. Спасибо большое, как раз сейчас активно изучаю Spring Data и ваше видео как нельза к стати! =)
Вау!!! Как раз эта тема на курсах!!! Спасибище!
Ура! Новое видео и так в тему. Большое спасибо! Четко и понятно👍
спасибо, всегда жду видео из этой тематики
Как долго я ждал этот видос, урааааа
Красавчик. Круто очень. Пожалуйста делай видосики. Очень жду!!!!
Ауф ауф ауф. Круто, классно, легко доходчиво. Спасибо за ваш труд!
Еще не смотрел, но уверен что все супер!!!
Да! Еще одно видео! Отлично!
Спасибо, мы ждали)
Превосходные уроки
Эх, жаль нельзя несколько лайков сразу бахнуть, спасибо за уроки, чувак!!))
Ты сделаешь из меня хорошего Java разработчика, если не прекратишь снимать уроки! 😁
Благодарю!
Спасибо большое! Как всегда на высоте!)
Когда планируется следующий урок ?
Спасибо за твой труд)
Наиль, огромное спасибо тебе! У тебя талант преподавать. С первой зарплаты выкуплю все твои курсы на юдеми.
А насчет PostgreSQL хочу поделиться своим опытом запуска. После установки не хотел запускаться pgadmin. Долго грузился, потом выдавал Fatal Error "The pgadmin 4 server could not be contacted". Перелопатил много форумов, испробовал много вариантов (установка других версий, чистка фолдеров и т.д.). Как оказалось проблема была в том, что имя компьютера содержало русские буквы. Достаточно изменить имя компьютера, перезагрузить комп и все заработает.
у меня не сработало)
не запускает pgAdmin долго очень грузит
@@user-wp6qz3le2v решили проблему?
@@suleimen да) скачал другую версию
@@user-wp6qz3le2v а я качал и 13 и 9 ничего не помогло. Скачал mysql )
Вот спасибо тебе!!!)
Круто! Спасибо
Если возникнет проблема, что программа видит базу данных, но при этом не видит ни одной таблицы внутри неё (при условии правильного написания названия таблицы) - можно сделать следующее: File -> Settings -> Languages & Frameworks -> SQL Dialects, в появившемся окне, в первой строке выбираем PostgreSql, вторую можно оставить none, далее жмём на плюсик и выбираем папку с проектом (её по сути не надо искать, сразу должна появиться при нажатии на +) - мне помогло.
P.S Наилю большое спасибо за уроки, ничего лучше на UA-cam на настоящий момент нету)
Это как оказалось вызывает ошибку http erorr 500, выкидывая nullpointerexception, как мне кажется программа всё ещё не могла использовать таблицы с базы данных, хотя красным цветом "person" не выделяла..
Способ 2: Скачиваете MySql и запускаете тот же код, всё сразу начинает работать без никаких проблем, а как наберетесь сил можно снова бросаться в бой с PostgreSql и пытаться его приручить, ибо во многих вакансиях требуют именно его..
Спасибо за видео
Крутоооо!
Очередное Спасиибо за материал :)
пара комментов
1. У постгреса есть отличный serial для автоинкрементных полей.
2. После подключения постгреса в моей конфигурации видимо что-то скрутило, и сервер стал как будто игнорировать контроллеры, на всё подряд кидая 404. Битый час провозился, создал тестовый контроллер с простейшей хелло, с перезагрузкой IDE и всего ПК, пока в итоге не остановил веб-сервер и не сделал clean/build. Ошибка была в WebModule[/...] ServletContext.log():No Spring WebApplicationInitializer types detected on classpath
Вдруг кому тоже пригодится.
Благодарю за курс. Как я понял, тут не учитываются, что необходимо использовать интерфейсы, для реализации GRASP паттернов (low coupling...). Будет ли Вами поднята тема GOF -GRASP patterns?
Я так предполагаю, дальше будет Hibernate, Spring Data JPA?)
копирование строки Ctrl + D гораздо удобнее, чем выделять строку)
ты лучший
Кто делает в бесплатной Идее:
1) чтобы работать с БД - установите плагин Database Navigator (интерфейс очень похож)
2) этот плагин предполагает осуществление периодических коммитов, поэтому перед тем, как стартануть Томкат - обязательно коммитимся
после создания таблички или добавления данных через консоль ide нужно делать коммит, зеленая кнопочка там же, без этого данные не добавятся в базу
Интересно было, особенно завис на теме инжекций...Подскажите, почему когда апдейтим (в т.ч. в этом видео) ранее добавленные люди опускаются в конец списка ? просто хочется понять, id'шник же тот же самый остаётся
Меня на учебном проекте сразу кинули на hibernate, spring Boot и swagger. Теперь понимаю, насколько это удобнее оказалось
в конце списка ожидал "и на деньги"
Чтобы увидеть схему надо нажать на квадратик рядом с названием БД, на нем циферки, указывающие на то, сколько галочек там можно поставить, чтобы выбрать чего-то. Вот туда заглядываем и ставим галочку на дефолтной схеме, после чего на квадратике будет написано 1 из 3, например как у меня. И тогда можно дальше видео смотреть.
Круто!!!!
Вообще, довольно наглядно можно было бы продемонстрировать мощь абстракции
создать interface DatabaseService, который будут реализовывать три класса -
FakeDbService (static list);
PureJdbcService (текущий пример),
и JdbcTemplateService (Spring JDBC).
В класс PersonDAO внедрить DatabaseService c аннотацией @Qualifier.
Для замены статичного листа на jdbc достаточно заменить value у Qualifiera-a c "fakeDbService" на "pureJdbcService"
Таким образом, замена сервиса-источника данных прошла бы "более безболезненно" и без масштабного рефакторинга.
получилось) внимательно проверяйте имя и пароль)
Тот самый момент, когда пришлось разобраться досконально в теории, научиться пользоваться дебаггером в Спринге методом тыка и наконец отловить ошибку, вместо age ade, одна буква.
Спасибо
Добрый день, в базе данных много таблиц и для работы с ними нужно для каждой создавать свой PersonDAO (Tabl1DAO, Tabl2DAO,..)
и также как и Person (Tabl1, Tabl2,..) ?
1. Разве надо обрабатывать исключения в DAO? Не лучше ли пробросить их в модель и там формировать соответствующий view если, например, отвалилась БД?
2. Метод executeUpdate() таки возвращает значение - кол-во добавленных строк и это тоже можно передавать в модель.
когда создаю таблицу в консоли, нельзя надо после varchar(100) писать количество символов, иначе кидает ошибку.
Урок, конечно, хороший. Но стоит сказать, что вкладка database в IDE доступна только в платной UltimateEdition. Для начинающего пользователя лучше показать вариант как всё работает без этой вкладки, т.к. без неё джуны не понимают, как прикрутить PostgreSQL к проекту в IDE.
Ну так ультимейт версией можнопользоватся месяц бесплатно
@@Tsukinosutsu а можно просто плагин из магазина установить в Идее
👍👍👍
Наиль, а есть в планах создать платный курс по спрингу. На данный момент мал мала системно на русском курс сделал только трегулов, ниша вроде свободна.
да, есть такой план
ЛАЙК НЕ ГЛЯДЯ
Есть ли разница в методах подключения драйвера jdbc? Например если не писать в pom.xml connector, а скачать файл .jar?
нет. без разницы как подключать зависимость, но с maven удобней.
Очень хорошо разбита информация на уроки. В каждый урок вложено не слишком много нового, но достаточно чтобы сделать следующий шаг по улучшению приложения.
красаучек
Строка
ResultSet resultSet = statement.executeQuery(SQL);
при обновлении страницы выдаёт ошибку:
org.postgresql.util.PSQLException: ОШИБКА: отношение "person" не существует
Подключение к базе данных есть, отношение создано, вручную командой select * from person выдаёт полный список внесённых значений. Работаю в комьюнити версии через плагин Database Navigator.
РЕШЕНИЕ ПРОБЛЕМЫ: в консоли базы данных нужно нажать "commit changes" и всё заработает. Надеюсь кому-нибудь поможет.
Спасибо что не поленился расписать ! помогло
Спасибо! Крутые видео, когда будет цикл видео по hibernate?
через месяц-два примерно. следите за каналом)
@@alishevN слежу, хотелось бы чаще видеть новый материал на канале. По security планируете, что-то готовить?
@@user-rp7ue4se1t да, будет конечно
НА удивление что все запустилось!
у меня PostgreSQL JDBC Driver » 42.3.1 (актуальный на данный момент) не заработал с кодом, когда вставил версию с репозитория автора - заработало.
после 13 постгрис поставил 9, и всё заработало, так что имейте ввиду кто будете ставить, идея 2018 с последними postgres не работает
а почему бы не подключиться к базе данных через application.properties ?
Привет. Кто-нибудь сталкивался с проблемой запуска postgresql: Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432?
На этом порту никто не висит, делал команду netstat -aon | find "5432" ничего не выдаёт. Но сейчас у меня запущен сервер Tomcat локальный - localhost с портом 8080. Правильно ли я понимаю, что несмотря на один адрес у БД и веб сервера (localhost) они не должны мешать друг другу так как используют разные порты 5432 и 8080 соответственно? Или я ошибаюсь?
Подскажите пожалуйста, как решить проблему?
Незнаю что это было, но мне помогло следующее:
набрал в командной строке services.msc
нашёл в сервисах свой постгрес "postgresql-x64-13 - PostgreSQL Server 13"
нажал start
Всё заработало, и БД и томкат, никаких конфликтов.
Жалко нет кнопки авто-лайк для выбранных людей!
awwww nice brain practice
Была у кого-то такая ошибка Error during artifact deployment. See server log for details ? Не работает , томкат 9 весь код скопировал , не работает , уже 4 дня сижу
А разве связь с базой в Spring не должен работать через services layer?
Я видел что создаётся DAO интерфейсы потом реализация. Потом создают services. Services расширяют реализацию дао и создают Connection и работают с базой непосредственно.
Service -> DAO -> DataBase
Спасибо за отличный контент!
да, должен. Просто я не хочу все сразу давать в одном уроке. Дойдем и до сервисов.
@@alishevN Спасибо за инормажию. Очень жду твоих уроков.
Здравствуйте, огромное спасибо вашим урокам, очень сильно помогают в изучении Spring. Я хотел бы задать следующий вопрос:
При попытке выполнить SQL запрос из кода, как показано в видео, возникает ошибка "Отношения не существует". Посмотрев в сети возможные варианты данной ошибки, наткнулся только на те, которые связаны с заглавными буквами в названии таблицы, к которой происходит обращении, но название моей таблицы корректное (current_load). При этом в консоли данный запрос срабатывает и выдаёт правильный результат. Можете ли вы что-то подсказать на этот счёт?
не видит таблицу. проверьте название
@@alishevN Спасибо за оперативный ответ, смог найти проблему. С нетерпением жду следующих уроков.
@@maxn3249 Случаем не помните, в чём проблема была? Тоже застрял на ней.. Базу данных видит, но ни одну таблицу внутри неё не видит
Может, у кого-то была такая же проблема - при открытии html страницы через Tomcat у меня вместо кириллицы появляются знаки вопроса, а в заголовке HTTP Content-Type указан charset=ISO-8859-1. Добавление атрибута в файле server.xml не приносит результата. Как же можно изменить кодировку на utf-8?
ответы были где ранее под видосами
Оооо да)
В 2022 не работает.
Прилетает - HTTP Status 500 - Internal Server Error
Request processing failed; nested exception is java.lang.NullPointerException: Cannot invoke "java.sql.Connection.createStatement()" because "ru.alishev.springcourse.dao.PersonDAO.connection" is null
Как лечить пока не понял.
UPD: работает но только с зависимостями указанной в видео версии.
ну как получилось? у меня такая же проблема(
аааааа.... это у меня было имя пользователя postgres, а я в idea написал postgresql)
Не вылечили?
Выскакивала такая же ошибка, причина была в URL = "jdbc:postgresql://localhost:5432//testdb", перед названием базы убрал один слеш и заработало, "jdbc:postgresql://localhost:5432/testdb"
CTRL + D для дублирования строки в Intellij idea, чтобы не использовать CTRL C, CTRL+V
А почему в дао не использовали интерфейс? с самого начала?
чтобы не усложнять повествование
intellij idea не коннектится к постргис никак вообще
Здравствуйте, хочу оставить несколько замечаний:
- Используйте try-with-resorse блок, автор забыл упомянуть что connection нужно закрывать
- Логики оборачивания в try можно вынести в отдельный метод;
он AutoCloseable
@@kandidat8134 да, поэтому НЕ нужен блок FINALLY, но это не означает что try не нужен ...
ctrl + D автоматом дублирует строку на которой стоит курсор в этой IDE в виндоус , чтобы не делать ctrl+C ctrl+V
HTTP Status 500 - Internal Server Error zdrastvuyte u menya dayot error chto delac chtob rabotal?
Если делаете через MySql, то замените на Class.forName("com.mysql.jdbc.Driver")
@@CyxapbBLR Почему-то нынче не помогает. Может, есть мысли, что делать.
нашли ответ
@@rcet это был вопрос или утверждение?
@@francet777это был вопрос, но я уже нашел решение.
Спасибо
У меня например Intelij Idea, захотела подключиться только через SSH, вторая вкладка, может кому то поможет.
Как ты это сделал? Я не могу через ssh тоже
Я смотрю кто-то использует DAO-абревиатуры, кто-то DTO для описания и использования классов. В чём же разница между этими классами и в каких случаях используют DAO-классы, а в каких DTO?
DTO - Data Transfer Object. Он нужен совсем для другого. Для отправки сущностей по сети.
DTO - это паттерн, также используют для обработки данных в шаблонах, например, я использовал для валидации полей password и passwordConfirmation, а через DAO (точнее через сервис с repo) сохраняю значение поля password в БД.
@@vitalijuskolinko9011 тоже верно
Давайка через Hibernate лучше) А лучшее вообще JPA юзать
Начало 5:05
String SQL = "INSERT INTO Person VALUES(" + 1 + ",'" + person.getName() +
"'," + person.getAge() + ",'" + person.getEmail() + "')";
ОШИБКА! В базе данных уже есть запись с id=1
Попробовал в качестве ДЗ переписать остальные методы самостоятельно, и наткнулся на выдачу двух записей по методу show где id=1
```
CREATE TABLE person(
id BIGINT,
name VARCHAR(256),
age INT,
email VARCHAR(256)
);
```
А зачем ставить postgre? Сейчас все через докер подключат
подключайте как вам удобно. это не важно
No suitable driver found for jdbc:postgresql
У кого то было такое же?
Решил данную проблему, нужно положить jar файл postgresql в папку lib в папке самого apache tomcat
В итоге я смог запустить все на apache tomcat 10
java ставил 17 версию при создании проекта
build tools: Gradle Groovy
spring6
springboot 3.0.1(вроде такая версия)
А почему все игнорируют такую вещь как JDO? Как будто её вообще не существует.
Подскажите пожалуйста, как остановить работу БД? Пробовал делать Disconnect from server через pgAdmin и закрывать сам pgAdmin, но БД продолжала работать (можно запустить приложение и менять данные, смотреть содержимое БД в консоли PostgreSQL в IntelliJIDEA).
Потом узнал что pgAdmin - это просто утилита для администрирования БД. Через неё вроде как нельзя остановить её сервер.
Пробовал кучу команд для терминала, все они возвращали command not found. Пришёл к выводу, при установке через EDB, работать с БД через терминал нельзя (пробовал добавить PATH по инструкции с офф сайта PostgreSQL - не помогло).
Через встроенный SQL Shell (psql) (появляющийся после установки в меню приложений macOS) тоже ничего из найденных команд не работает.
Перепробовал уже вроде всё, но сервер продолжает крутиться, знатно поджирая заряд аккумулятора мака. Пожалуйста, помогите 🙏🏽
Не знаю как там с PostgreSQL и маком, но в MySql БД работает как сервис (В фоновом режиме). Поэтому можете попробовать найти сервис и отключить его в диспетчере задач (Имя Сервиса по идее содержит sql например "postgresql").
Для тех кто смотрит в 2023.
Если возникает ошибка 500 "Отношения не существует"(relation does not exist):
Уточняйте название таблицы, а именно вместо просто его названия дайте полный путь "имя_базы_данных.имя_таблицы".
Например в данном случае запрос должен выглядеть как не просто "select * from person", a "select * from first_db.person".
P.S. Заглавные буквы или нет SQL и Spring плевать, проверено.
DriverManager малец устарел уже )
이건 또 어느나라냐? 중동쪽인가 ㅋㅋㅋ
이것은 러시아입니다
푸틴 군주와 함께하는 군주제
смотрите какая лажа происходит с postgres, если intelij idea 2018 того, она уже не будет корректно работать с новым 13 постгрисом, постгрис всегда был ужасным, пусть он и быстрый, у него чудовищная обратная совместимость. И главное об этих вещах просто так не понять, что там не работает то. день запросто мождет уйти, лучше мускул юзать.
для начала и правда лучше MySQL, порог вхождения меньше, но потом лучше на PostgreSQL переходить, т.к. в России в основном на нём сидят (что, кстати противоречит мировой статистике, где у последнего всего 5% рынка, а у Оракл (очень похоже на мускул) почти 50%)
Для тех кому лень:
String SQL = "INSERT INTO Person VALUES(" + 1 + ",'" + person.getName() +
"'," + person.getAge() + ",'" + person.getEmail() + "')";
С mysql выдает ошибку 500. Cannot invoke "java.sql.Connection.createStatement()" because "ru.alishev.springcourse.dao.PersonDAO.connection" is null
Почему-то не устанавливается соединение.
Class.forName("com.mysql.jdbc.Driver"); написано так
Переподключил dependency. Спасло ситуацию.
Я такой коммент не нашел по этому вот подарок будущим программистам.
String SQL = "INSERT INTO Person VALUES(" + 1 + ",'" + person.getName() + "',"
+ person.getAge() + ",'" + person.getEmail() + "')";
блин на этом месте про*ебался много раз,спасибо!))