Spring Framework. Урок 26: SQL инъекции. PreparedStatement. JDBC API.
Вставка
- Опубліковано 10 гру 2020
- Скачать PVS-Studio бесплатно: www.viva64.com/spring_pvs
Релиз PVS-Studio 7.10: OWASP, AUTOSAR, SARIF: www.viva64.com/spring_release
ПОЛНЫЙ КУРС ПО 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
Самый лучший курс на ютубе. Жду каждый урок больше , чем свой день рождения, это волшебно!
Отличный урок!
Наконец-то я увидел пример реальной работы с реальной БД в Спринг. И без всякой «магии» и ОРМ.
Давно искал хоть что-то на эту тему, где без общих громких фраз я смогу увидеть как это делается в этом фреймворке на Java.
Спасибо!
Очень познавательно и без воды!
для работы с JDBC Спринг не нужен)
Это не spring jdbc, а чистый jdbc. Хотя у спринга с 2018г тоже есть фремфорк spring.jdbc. Хотелось бы найти видео про различия этих двух jdbc
Вышел видос по Spring - хорошее настроение на весь день обеспечено))
Спасибо за ваш канал . Смотрю все видео по JAVA с удовольствием. И платный продвинутая Java покупала , помогло в некоторых местах. И ваш Git смотрела, благодаря вашим курсам разбираюсь больше. Очень круто подробно объясняете)
А еще спасибо за ваш голос, который приятно слушать)))))
Хоть я эту тему уже знаю 😎, всеравно низкий тебе поклон за труды и науку! Я сегодня смог сдать зачет по MVC только благодаря твоим видео 👍
Спасибо, Наиль, за бест практис! Как всегда информативно, понятно!
Очень упрощаете людям жизнь. Спасибо за работу и обучение!
Это просто комментарий, выражающий тебе благодарность за то, что ты делаешь ;)
Спасибо Вам огромнейшее за ваш труд! Смотрю все ваши видео!
Наиль, огромнейшее Вам спасибо. Весь курс это что-то невероятное. Каждый урок - 100% полезной информации, которая доступно изложена без всяких недоговоренностей. Здоровья Вам!
Супер, спасибо за понятное и четкое изложение материала!
Наиль, спасибо за урок!
Почему-то думал, что раз нам не нужен цикл в show(), то не нужна строка resultSet.next();
Закомментил ее, а потом не мог понять, почему при открытии пользователя у меня все значения по умолчанию(null, 0).
Потом понял причину (более того, об этом было сказано при запуске на сервере, но я не смотрел туда сперва). Вот суть метода next() согласно докам (если не задать курсор, то он будет перед строкой и данные из БД не вытянутся):
"Moves the cursor forward one row from its current position.
* A ResultSet cursor is initially positioned
* before the first row"
Спасибо огромнейшее, всё доступно, понятно и ясно!
На твоем канале сначала лайк, потом просмотр, ещё не разу не прогадал)
Спасибо, отличный материал!
Всегда радуюсь новым урокам :)
Спасибо за урок
Отличный урок!
Спасибо!!!! Урок как всегда крутой, а главное понятный!!!
Вах вах вах новое видео. Наиль красабчик
Первоклассные видео по Спрингу! Спасибо
БАТЯ В ЗДАНИИ. ТРАДИЦИОННО ЛАЙК НЕ ГЛЯДЯ
Наиль, спасибо за видео!
Спасибо за видео
Отличный урок! Спасибо!
Отлинчные видео, спасибо
Если кому лень гуглить, то для того чтобы была автоинкрементация по id нужно при создании таблицы базы данных поле id указать как "id serial,", а при добавлении новых элементов вместо числового значения id передавать "default".
это зря,инкремент занимает оч много ресурсов ,в соотношении ко всему запросу,лучше использовать "select max(id) from person" ,чтобы получать максимальное значение id из базы и инкрементировать непосредственно его
@@booba6672 звучит бредово, наоборот надо максимально всю ответсвтенность за целостность данных перекладывать на БД, а не руками все прописывать в коде.
@@MrRomanvideo это даже в документации прописано, советую читать
У меня получилось так для MySQL:
В бд правой кнопкой по id --> Modify Column(UI) --> поставить галочки Autoincrement и Primary Key --> поменял в методе save() строку на "INSERT INTO first_db.person (name, age, email) VALUES (?, ?, ?)"
И все заработало!
Надеюсь кому-то поможет
@@booba6672 если не трудно, можете привести ссылку на документацию, где дается указание не использовать serial? Спрашиваю потому, что в документации постгреса я этого не видел.
Предельно просто и понятно. Благодарю!
Вижу новое видео - ставлю лайк, иду смотреть. Жду новые видео. ☺️
топ контент подьехал!
Большое спасибо, было очень интересно =)
CRUD - крут! 👍
Бро , желаю удачи в жизни !
Не устаю говорить спасибо :))
Когда начинал смотреть курс (Вчера) думал что будет и Spring Sequrity и Hibernate. Последние пара уроков были не особо полезными, давно с этим разобрался. Ну что же, буду копать другие источники)
это все будет, но нельзя разбираться с Hibernate не разобравшись сначала с более низкоуровневыми подходами.
в этом и есть суть этого курса, что он полноценно охватывает Spring, а не только популярные ключевые слова.
Наиль на собесе разве будут спрашивать про jdbc и прочие устаревшие технологии ? Мне сказали спрашивают в основном про базовые аннотации из спрингбута
@@tuborg10 JDBC - не устаревшая технология)
Не все можно сделать с помощью Hibernate, иногда надо писать запросы к БД напрямую. Вам сказали неправду)
@@alishevN да, простите, уточнил этот вопрос, действительно в некоторых проектах работают с чистым jdbc. В данном курсе спринга будет реализовано Rest приложение со Spring boot ?)
Классный курс. Дал большой толчок в обучении.
Вопрос: А как все таки генерировать Id автоматически?
Есть специальная аннотация
Круто, спасибо, интересно
Как хорошо, что валидация у меня так и не завелась 😂 Не нужно комментировать лишний код, чтобы сделать приложение уязвимым к SQL инъекциям👍🏽
P.S: понимаю, что не валидацией защищаются от инъекций. Но всё же осадок с неудавшейся валидацей душу не греет 😅
А можете ответить на мои вопросы пожалуйста. 1) С помощью валидации полей на javaScript , можно же избежать такого результата ? 2)Почему Валидация Spring пропускает такое ?
Спасибо за урок!
Да а в качестве id удобно было бы ++PEOPLE_COUNT подставить.
я избавился от ++PEOPLE_COUNT, поставив в таблице полю id тип serial
ибо после перезапуска приложения могут быть неуникальные айди
Просто красавец! Без всякого лишнего мусора: чётко, ясно, в тему и конкретно! Респектище огромный. П.С.: Не понял только, почему при удалении последней записи - удаляются все, кроме 2-х первых ??
Удаляются все записи, у которых id такой же, как у той, на которой нажали "удалить".
прекрасно)
Спасибо)
Это конечно все здорово но в коде нет закрытия соединения и стейтментов... Try с ресурсами это наше все
Слышал, что jdbc работает слишком медленно, если бд и приложение находятся на разных машинах. Как в таких ситуациях быть ?
Не слышал такого.
наоборот jdbc самый быстрый
А почему не закрываются коннекшены и стэйтманы?
самый лучший
По-моему, SQL-запрос будет проще собрать через отформатированную строку, так шанс допустить ошибку падает в несколько раз)
Много раз замечал, что большинство авторов которые выпускают свои видео уроки ведут разработку на Mac устройствах. Это действительно удобней чем на Windows и возникает меньше проблем или это просто как бы модно? И еще вопрос много ли возникает проблем если используешь Mac OS в качестве системы для разработки.
Mac OS очень удобный для разработки.
@@alishevN спасибо за ответ.
как пользователь винды долгие годы и пользователь + веб дев последние 2 года на маке, однозначно говорю, что мак удобнее, как для серфа по сети, так и для разной работы. Единственное, что стоит учитывать - для работы лучше сразу рассматривать pro. Моего air не всегда хватает так, как хотелось бы, ОЗУ часто 7гб из 8 свободных))
Просто на Маке есть ретина :) Это с лихвой перекрывает все его недостатки :)
@@alishevN А чем именно? Использую Windows, стоит ли попробовать MacOS?
Однако можно же VALUES через запятую указать, когда делаем я INSERT, и тогда тоже окажется один запрос.
Спасибо
топ контент
Ребята, подскажите пожалуйста, как Наиль целую строку кода удаляет?
resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdf
Ctrl+Y
Edward Nordway ух ты! Благодарю 🙏 🤗. Тут даже больше)).
Edward Nordway только хотел про эту команду уточнить).
@@mkrugl Да нет за что)
Лайк неглядя
А еще видео будут?
Да, я записываю полный курс по Spring. Следите за новостями на канале!
@@alishevN спасибо, очень доходчиво объясняешь, я такого на русском в UA-cam не видел
preparedStatement индекс не с нуля а с единицы! Почему😂
Вернитесь в Андроид пожалуйста)
2021 год и кто-то учит старый Java, не понимают что-ли что учить нужно только Rust, ну в крайнем случае Dart ! ))
а можно чуточку подробнее?
2023 год Rust энджоєр все эще не понял, что java - это лучшее, что придумало человечество.
Конкуренты ставят дизлайки)
...строкУ...
Проблема и решение, которые возникли у меня при запуске программы под MySQL.
При запуске выдавалась ошибка 500, сначала ругалось на отсутствие правильного драйвера.
Решение - заменить объявление драйвера на
Class.forName("com.mysql.cj.jdbc.Driver");
Однако ошибка 500 не исчезла. Результат долгого гуглинга показал: нужно в воркбенче выполнить строку:
set global time_zone = '-3:00';
И тогда все заработало.
Кто подскажет, все работает, но ЭМЭЙЛ не показывается, но если зайти в редактор то ка каждому имени присвоен ЭМЭЙЛ, где ошибка