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

КОМЕНТАРІ • 103

  • @alishevN
    @alishevN  3 роки тому +11

    ПОЛНЫЙ КУРС ПО SPRING (Hibernate, REST, Boot): swiftbook.org/courses/438
    Telegram: t.me/alishev_g
    Плейлист этого курса: ua-cam.com/play/PLAma_mKffTOR5o0WNHnY0mTjKxnCgSXrZ.html

  • @serge2432
    @serge2432 3 роки тому +9

    Самый лучший курс на ютубе. Жду каждый урок больше , чем свой день рождения, это волшебно!

  • @firstnofate
    @firstnofate 3 роки тому +42

    Отличный урок!
    Наконец-то я увидел пример реальной работы с реальной БД в Спринг. И без всякой «магии» и ОРМ.
    Давно искал хоть что-то на эту тему, где без общих громких фраз я смогу увидеть как это делается в этом фреймворке на Java.
    Спасибо!
    Очень познавательно и без воды!

    • @TheVendeetta
      @TheVendeetta Рік тому +1

      для работы с JDBC Спринг не нужен)

    • @tatyanayurchenko6840
      @tatyanayurchenko6840 Рік тому

      Это не spring jdbc, а чистый jdbc. Хотя у спринга с 2018г тоже есть фремфорк spring.jdbc. Хотелось бы найти видео про различия этих двух jdbc

  • @momo99322
    @momo99322 3 роки тому +24

    Вышел видос по Spring - хорошее настроение на весь день обеспечено))

  • @olgaevdokimova8573
    @olgaevdokimova8573 3 роки тому +12

    Спасибо за ваш канал . Смотрю все видео по JAVA с удовольствием. И платный продвинутая Java покупала , помогло в некоторых местах. И ваш Git смотрела, благодаря вашим курсам разбираюсь больше. Очень круто подробно объясняете)
    А еще спасибо за ваш голос, который приятно слушать)))))

  • @MrNil1982
    @MrNil1982 3 роки тому +7

    Хоть я эту тему уже знаю 😎, всеравно низкий тебе поклон за труды и науку! Я сегодня смог сдать зачет по MVC только благодаря твоим видео 👍

  • @varchar21
    @varchar21 3 роки тому +15

    Спасибо, Наиль, за бест практис! Как всегда информативно, понятно!

  • @ExcelStore
    @ExcelStore 3 роки тому +4

    Очень упрощаете людям жизнь. Спасибо за работу и обучение!

  • @H_Atm
    @H_Atm 3 роки тому +3

    Это просто комментарий, выражающий тебе благодарность за то, что ты делаешь ;)

  • @user-ve4ko4pi7i
    @user-ve4ko4pi7i 3 роки тому +5

    Спасибо Вам огромнейшее за ваш труд! Смотрю все ваши видео!

  • @user-cd7eh5gv1i
    @user-cd7eh5gv1i 2 роки тому

    Наиль, огромнейшее Вам спасибо. Весь курс это что-то невероятное. Каждый урок - 100% полезной информации, которая доступно изложена без всяких недоговоренностей. Здоровья Вам!

  • @user-fy6tu1xk9q
    @user-fy6tu1xk9q 2 роки тому

    Супер, спасибо за понятное и четкое изложение материала!

  • @andrei8299
    @andrei8299 3 роки тому +2

    Наиль, спасибо за урок!
    Почему-то думал, что раз нам не нужен цикл в 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"

  • @Andrzej3935
    @Andrzej3935 2 роки тому

    Спасибо огромнейшее, всё доступно, понятно и ясно!

  • @user-vx4xw5ml3e
    @user-vx4xw5ml3e 3 роки тому +1

    На твоем канале сначала лайк, потом просмотр, ещё не разу не прогадал)

  • @yuryconnect4785
    @yuryconnect4785 2 роки тому

    Спасибо, отличный материал!

  • @user-xs3tm9hu9x
    @user-xs3tm9hu9x 3 роки тому +1

    Всегда радуюсь новым урокам :)

  • @yaroslavnovichkov6736
    @yaroslavnovichkov6736 3 роки тому +1

    Спасибо за урок

  • @baxiskerimov1339
    @baxiskerimov1339 2 роки тому

    Отличный урок!

  • @viktoriakuvhinova3007
    @viktoriakuvhinova3007 3 роки тому +2

    Спасибо!!!! Урок как всегда крутой, а главное понятный!!!

  • @nurzatbekdunganov863
    @nurzatbekdunganov863 3 роки тому +3

    Вах вах вах новое видео. Наиль красабчик

  • @ruzoompartygmail4273
    @ruzoompartygmail4273 10 місяців тому

    Первоклассные видео по Спрингу! Спасибо

  • @FoxChpoks
    @FoxChpoks 3 роки тому +4

    БАТЯ В ЗДАНИИ. ТРАДИЦИОННО ЛАЙК НЕ ГЛЯДЯ

  • @silentwitness3363
    @silentwitness3363 3 роки тому +2

    Наиль, спасибо за видео!

  • @KirillMvS
    @KirillMvS 6 місяців тому

    Спасибо за видео

  • @mojodont
    @mojodont 3 роки тому +2

    Отличный урок! Спасибо!

  • @tomozi1
    @tomozi1 3 роки тому +3

    Отлинчные видео, спасибо

  • @silentadvisor
    @silentadvisor 3 роки тому +8

    Если кому лень гуглить, то для того чтобы была автоинкрементация по id нужно при создании таблицы базы данных поле id указать как "id serial,", а при добавлении новых элементов вместо числового значения id передавать "default".

    • @booba6672
      @booba6672 2 роки тому +2

      это зря,инкремент занимает оч много ресурсов ,в соотношении ко всему запросу,лучше использовать "select max(id) from person" ,чтобы получать максимальное значение id из базы и инкрементировать непосредственно его

    • @MrRomanvideo
      @MrRomanvideo 2 роки тому +2

      @@booba6672 звучит бредово, наоборот надо максимально всю ответсвтенность за целостность данных перекладывать на БД, а не руками все прописывать в коде.

    • @booba6672
      @booba6672 2 роки тому

      @@MrRomanvideo это даже в документации прописано, советую читать

    • @serebanbl4
      @serebanbl4 2 роки тому

      У меня получилось так для MySQL:
      В бд правой кнопкой по id --> Modify Column(UI) --> поставить галочки Autoincrement и Primary Key --> поменял в методе save() строку на "INSERT INTO first_db.person (name, age, email) VALUES (?, ?, ?)"
      И все заработало!
      Надеюсь кому-то поможет

    • @gagn81
      @gagn81 Рік тому

      @@booba6672 если не трудно, можете привести ссылку на документацию, где дается указание не использовать serial? Спрашиваю потому, что в документации постгреса я этого не видел.

  • @nikolay7658
    @nikolay7658 3 роки тому +1

    Предельно просто и понятно. Благодарю!

  • @mell00FOXES
    @mell00FOXES 3 роки тому +1

    Вижу новое видео - ставлю лайк, иду смотреть. Жду новые видео. ☺️

  • @olegk4589
    @olegk4589 3 роки тому +4

    топ контент подьехал!

  • @fangstraish7623
    @fangstraish7623 3 роки тому +1

    Большое спасибо, было очень интересно =)

  • @KamronBoturkhonov
    @KamronBoturkhonov 2 роки тому

    CRUD - крут! 👍

  • @bygan1byganovich454
    @bygan1byganovich454 3 роки тому +1

    Бро , желаю удачи в жизни !

  • @heyliaable
    @heyliaable 3 роки тому +1

    Не устаю говорить спасибо :))

  • @zhennik263
    @zhennik263 3 роки тому +6

    Когда начинал смотреть курс (Вчера) думал что будет и Spring Sequrity и Hibernate. Последние пара уроков были не особо полезными, давно с этим разобрался. Ну что же, буду копать другие источники)

    • @alishevN
      @alishevN  3 роки тому +15

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

    • @alishevN
      @alishevN  3 роки тому +13

      в этом и есть суть этого курса, что он полноценно охватывает Spring, а не только популярные ключевые слова.

    • @tuborg10
      @tuborg10 3 роки тому +3

      Наиль на собесе разве будут спрашивать про jdbc и прочие устаревшие технологии ? Мне сказали спрашивают в основном про базовые аннотации из спрингбута

    • @alishevN
      @alishevN  3 роки тому +11

      @@tuborg10 JDBC - не устаревшая технология)
      Не все можно сделать с помощью Hibernate, иногда надо писать запросы к БД напрямую. Вам сказали неправду)

    • @tuborg10
      @tuborg10 3 роки тому +4

      @@alishevN да, простите, уточнил этот вопрос, действительно в некоторых проектах работают с чистым jdbc. В данном курсе спринга будет реализовано Rest приложение со Spring boot ?)

  • @user-pj7yz2ez9f
    @user-pj7yz2ez9f 3 роки тому

    Классный курс. Дал большой толчок в обучении.
    Вопрос: А как все таки генерировать Id автоматически?

    • @charmink9342
      @charmink9342 2 роки тому

      Есть специальная аннотация

  • @user-jc3vv1vi2i
    @user-jc3vv1vi2i 3 роки тому +1

    Круто, спасибо, интересно

  • @MuratFatykhov
    @MuratFatykhov 10 місяців тому

    Как хорошо, что валидация у меня так и не завелась 😂 Не нужно комментировать лишний код, чтобы сделать приложение уязвимым к SQL инъекциям👍🏽
    P.S: понимаю, что не валидацией защищаются от инъекций. Но всё же осадок с неудавшейся валидацей душу не греет 😅

  • @rubiroit
    @rubiroit 2 роки тому

    А можете ответить на мои вопросы пожалуйста. 1) С помощью валидации полей на javaScript , можно же избежать такого результата ? 2)Почему Валидация Spring пропускает такое ?

  • @Vitek_23
    @Vitek_23 11 місяців тому

    Спасибо за урок!
    Да а в качестве id удобно было бы ++PEOPLE_COUNT подставить.

    • @kekw5738
      @kekw5738 5 місяців тому

      я избавился от ++PEOPLE_COUNT, поставив в таблице полю id тип serial
      ибо после перезапуска приложения могут быть неуникальные айди

  • @user-lc7gw5py9v
    @user-lc7gw5py9v 3 роки тому +1

    Просто красавец! Без всякого лишнего мусора: чётко, ясно, в тему и конкретно! Респектище огромный. П.С.: Не понял только, почему при удалении последней записи - удаляются все, кроме 2-х первых ??

    • @Gett37
      @Gett37 2 роки тому

      Удаляются все записи, у которых id такой же, как у той, на которой нажали "удалить".

  • @iorgankrat1118
    @iorgankrat1118 3 роки тому +1

    прекрасно)

  • @Nievinor
    @Nievinor 3 роки тому +2

    Спасибо)

  • @mustFLEXboi
    @mustFLEXboi 10 місяців тому +1

    Это конечно все здорово но в коде нет закрытия соединения и стейтментов... Try с ресурсами это наше все

  • @Sa1ZeRChannel
    @Sa1ZeRChannel 3 роки тому +2

    Слышал, что jdbc работает слишком медленно, если бд и приложение находятся на разных машинах. Как в таких ситуациях быть ?

    • @alishevN
      @alishevN  3 роки тому +9

      Не слышал такого.

    • @immortal-spirit-13
      @immortal-spirit-13 3 роки тому +1

      наоборот jdbc самый быстрый

  • @denisrogov7120
    @denisrogov7120 Рік тому

    А почему не закрываются коннекшены и стэйтманы?

  • @pertshgalstyan6189
    @pertshgalstyan6189 3 роки тому +2

    самый лучший

  • @laptoplaptop9216
    @laptoplaptop9216 Рік тому

    По-моему, SQL-запрос будет проще собрать через отформатированную строку, так шанс допустить ошибку падает в несколько раз)

  • @user-bs4py5ev7q
    @user-bs4py5ev7q 3 роки тому +2

    Много раз замечал, что большинство авторов которые выпускают свои видео уроки ведут разработку на Mac устройствах. Это действительно удобней чем на Windows и возникает меньше проблем или это просто как бы модно? И еще вопрос много ли возникает проблем если используешь Mac OS в качестве системы для разработки.

    • @alishevN
      @alishevN  3 роки тому +4

      Mac OS очень удобный для разработки.

    • @user-bs4py5ev7q
      @user-bs4py5ev7q 3 роки тому

      @@alishevN спасибо за ответ.

    • @FoxChpoks
      @FoxChpoks 3 роки тому +1

      как пользователь винды долгие годы и пользователь + веб дев последние 2 года на маке, однозначно говорю, что мак удобнее, как для серфа по сети, так и для разной работы. Единственное, что стоит учитывать - для работы лучше сразу рассматривать pro. Моего air не всегда хватает так, как хотелось бы, ОЗУ часто 7гб из 8 свободных))

    • @rudolfsikorsky7900
      @rudolfsikorsky7900 3 роки тому

      Просто на Маке есть ретина :) Это с лихвой перекрывает все его недостатки :)

    • @user-hj3uv5px7m
      @user-hj3uv5px7m 3 роки тому

      @@alishevN А чем именно? Использую Windows, стоит ли попробовать MacOS?

  • @bulat9056
    @bulat9056 Рік тому

    Однако можно же VALUES через запятую указать, когда делаем я INSERT, и тогда тоже окажется один запрос.

  • @blackmulthumor
    @blackmulthumor 3 роки тому +1

    Спасибо

  • @Spektar1221
    @Spektar1221 3 роки тому +2

    топ контент

  • @mkrugl
    @mkrugl 3 роки тому +3

    Ребята, подскажите пожалуйста, как Наиль целую строку кода удаляет?

    • @EdwardNorthwind
      @EdwardNorthwind 3 роки тому +2

      resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdf

    • @EdwardNorthwind
      @EdwardNorthwind 3 роки тому +1

      Ctrl+Y

    • @mkrugl
      @mkrugl 3 роки тому +1

      Edward Nordway ух ты! Благодарю 🙏 🤗. Тут даже больше)).

    • @mkrugl
      @mkrugl 3 роки тому +1

      Edward Nordway только хотел про эту команду уточнить).

    • @EdwardNorthwind
      @EdwardNorthwind 3 роки тому +2

      @@mkrugl Да нет за что)

  • @VladimirPivovar
    @VladimirPivovar 3 роки тому +2

    Лайк неглядя

  • @stanislavshilo6022
    @stanislavshilo6022 3 роки тому

    А еще видео будут?

    • @alishevN
      @alishevN  3 роки тому +3

      Да, я записываю полный курс по Spring. Следите за новостями на канале!

    • @stanislavshilo6022
      @stanislavshilo6022 3 роки тому +1

      @@alishevN спасибо, очень доходчиво объясняешь, я такого на русском в UA-cam не видел

  • @tatyanayurchenko6840
    @tatyanayurchenko6840 Рік тому

    preparedStatement индекс не с нуля а с единицы! Почему😂

  • @alishanvaliani9952
    @alishanvaliani9952 3 роки тому +3

    Вернитесь в Андроид пожалуйста)

  • @SIM31r
    @SIM31r 2 роки тому

    2021 год и кто-то учит старый Java, не понимают что-ли что учить нужно только Rust, ну в крайнем случае Dart ! ))

    • @igothigh
      @igothigh 2 роки тому

      а можно чуточку подробнее?

    • @blackobemamatters4418
      @blackobemamatters4418 Рік тому +1

      2023 год Rust энджоєр все эще не понял, что java - это лучшее, что придумало человечество.

  • @user-qt6ep9cg1j
    @user-qt6ep9cg1j 3 роки тому +1

    Конкуренты ставят дизлайки)

  • @andreiz751
    @andreiz751 3 роки тому

    ...строкУ...

  • @user-qy9fu5il8r
    @user-qy9fu5il8r 2 роки тому +1

    Проблема и решение, которые возникли у меня при запуске программы под MySQL.
    При запуске выдавалась ошибка 500, сначала ругалось на отсутствие правильного драйвера.
    Решение - заменить объявление драйвера на
    Class.forName("com.mysql.cj.jdbc.Driver");
    Однако ошибка 500 не исчезла. Результат долгого гуглинга показал: нужно в воркбенче выполнить строку:
    set global time_zone = '-3:00';
    И тогда все заработало.

  • @rustamsaydam
    @rustamsaydam Рік тому

    Кто подскажет, все работает, но ЭМЭЙЛ не показывается, но если зайти в редактор то ка каждому имени присвоен ЭМЭЙЛ, где ошибка