Первые попытки решить задачу не увенчались успехом| Java backend

avatar Ectx

264

12

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img

Сейчас 6 утра, начинал учить в 12 ночиJava MVC, курс от Алишева. Курс понял с кайфом, там трогал тут настраивал и свои прикольчики добавлял, ну короче игрался чтобы закрепить материал. Под конец курса он говорит, всё мужики спасибо за просмотр дальше гоу в Юдеми покупать курс 100$. И чё делать?
И с этой мыслью решил я допилить то, что он не допилил а именно auto increment id(27 урок).
Сперва я наивно пологал что простая переменная ++ID_Counter передавая в ? перед VALUES решит вопросFeelsWowMan.png?1592046354

мой код)

. После того как я это сделал сразу фейспалмом пробил себе череп, после каждого запуска всё откатывалось и ничего в дб не записывалось а только в оперативку. Почему то я этого не учёлpekaReally.png?1619501122

Попробовал погуглить, нашелся индус который после нажатие включился на 2,0х и начал какие-то заклинания читатьroflanLico.png?1616515069 Ну думаю не беда, поставил на 1,0х и просмотрел код, понял что он пишет на чистом jdbc без template, вообщем не тот случаи.
Все гугления приводили не к тому результату и я решил прийти к вопросу оригинально и получать нынешний ID через SQL запрос, с такими значениями

sql exequte

И полученный INT нужно было передавать уже в VALUES через ? и отсчет начинать не с нуля а с полученного значение

мой вариант, всё тоже самое как в первом только название другое и начинает отсчет с последнего поля id в дб

Ну короче вот
Не судите строго я новечок, и сильно не бейте. Сейчас я вроде понимаю что нужно было еще метод создать который этот запрос и делает, но уже влом чё то разбираться голова не варит. Вернусь уже отоспавшись и мб чё то попробую. Еще есть ощущение что после изучение Hibernate всё что я делал окажется говном мамонтаPepeCry.png


        

Armagedonby_ZERGS

Пользователь

Регистрация: 23.03.2015

Сообщения: 11361

Рейтинг: 4428

Armagedonby_ZERGS

Регистрация: 23.03.2015

Сообщения: 11361

Рейтинг: 4428

Ectx сказал(а):

изучение Hibernate всё что я делал окажется говном мамонта

Нажмите, чтобы раскрыть...

Ага, так и будет. В JPA это делает одна аннотация

haHAA

Пользователь

Регистрация: 25.03.2017

Сообщения: 1205

Рейтинг: 777

haHAA

Регистрация: 25.03.2017

Сообщения: 1205

Рейтинг: 777

img

AmigosCode на ютубе в помощь

Graph_Asi

Пользователь

Регистрация: 24.10.2017

Сообщения: 4634

Рейтинг: 4969

Graph_Asi

Регистрация: 24.10.2017

Сообщения: 4634

Рейтинг: 4969

img

Главное помни, что всё, что ты хочешь сделать, уже сделал какой-то индус, так что гугли.

Noonecan

Пользователь

Регистрация: 14.03.2014

Сообщения: 1248

Рейтинг: 344

Noonecan

Регистрация: 14.03.2014

Сообщения: 1248

Рейтинг: 344

Ectx сказал(а):

мой код)
Нажмите, чтобы раскрыть...

Разберем с самого начала

1. Ты пользуешься генерируемым id для таблицы person, но генерируешь их на стороне java - сам подход неверный, на стороне бд (какая бы СУБД ни была) есть sequence-генераторы. Правильным решением было бы навесить на поле с id последовательность и инсертить в эту таблицу не заполняя это поле, чтобы бд сама в него нужный айдишник подставила.

2. По какойто причине ты начал использовать jdbctemplate, не могу сказать, что эта штука не имеет права на жизнь, но раз у тебя уже и так есть объект Person, чего бы его не использовать в ORM (spring data jpa)? Работать с объектами в java приятнее, чем с jdbc-стейтментами.



astanavitesb

Пользователь

Регистрация: 03.06.2022

Сообщения: 1309

Рейтинг: 648

Нарушения: 1000

astanavitesb

Регистрация: 03.06.2022

Сообщения: 1309

Рейтинг: 648

Нарушения: 1000

На чистых сервлетах(спринг, etc не учил но там думаю для этого есть чуть удобнее способы) разве не проще пробегать селектом по айдишникам чтобы найти например свободный айдишник после удаленияhmmclueless.png?1635877967) ну и после добавить новую запись,если удаленых/пропущеных записей нет max_id_value+1Okayg.png?1639663029


Noonecan сказал(а):

Разберем с самого начала

1. Ты пользуешься генерируемым id для таблицы person, но генерируешь их на стороне java - сам подход неверный, на стороне бд (какая бы СУБД ни была) есть sequence-генераторы. Правильным решением было бы навесить на поле с id последовательность и инсертить в эту таблицу не заполняя это поле, чтобы бд сама в него нужный айдишник подставила.

2. По какойто причине ты начал использовать jdbctemplate, не могу сказать, что эта штука не имеет права на жизнь, но раз у тебя уже и так есть объект Person, чего бы его не использовать в ORM (spring data jpa)? Работать с объектами в java приятнее, чем с jdbc-стейтментами.



Нажмите, чтобы раскрыть...

После удаления записи у меня чёт автоинкрементит без учёта освободившихся айдишек, как я понял это так и должно быть и надо в ручную на место освободившейся айдишки добавлять?PepeCoolWhat.gif?1592102751

Noonecan

Пользователь

Регистрация: 14.03.2014

Сообщения: 1248

Рейтинг: 344

Noonecan

Регистрация: 14.03.2014

Сообщения: 1248

Рейтинг: 344

astanavitesb сказал(а):

На чистых сервлетах(спринг, etc не учил но там думаю для этого есть чуть удобнее способы) разве не проще пробегать селектом по айдишникам чтобы найти например свободный айдишник после удаленияhmmclueless.png?1635877967) ну и после добавить новую запись,если удаленых/пропущеных записей нет max_id_value+1Okayg.png?1639663029


После удаления записи у меня чёт автоинкрементит без учёта освободившихся айдишек, как я понял это так и должно быть и надо в ручную на место освободившейся айдишки добавлять?PepeCoolWhat.gif?1592102751

Нажмите, чтобы раскрыть...

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

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

У тебя был валера на 16 позиции, ты его удалил, добавил игоря.

Другая система не проверяет, валера был это или игорь, берет просто 16й элемент.

Если ты не будешь переиспользовать айдюки - закономерно на стороне второй системы будет ошибка, потому что 16го элемента нет и они как-то это разрулят

Если переиспользуешь - то игорю навесят алиментов и долгов по микрофинансированию, и игорь придет твою трубу шатать =)

astanavitesb

Пользователь

Регистрация: 03.06.2022

Сообщения: 1309

Рейтинг: 648

Нарушения: 1000

astanavitesb

Регистрация: 03.06.2022

Сообщения: 1309

Рейтинг: 648

Нарушения: 1000

Noonecan сказал(а):

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

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

У тебя был валера на 16 позиции, ты его удалил, добавил игоря.

Другая система не проверяет, валера был это или игорь, берет просто 16й элемент.

Если ты не будешь переиспользовать айдюки - закономерно на стороне второй системы будет ошибка, потому что 16го элемента нет и они как-то это разрулят

Если переиспользуешь - то игорю навесят алиментов и долгов по микрофинансированию, и игорь придет твою трубу шатать =)

Нажмите, чтобы раскрыть...

Кекнул с игоря, ну я не переиспользую айдишники просто когда учил работу с бд запомнился этот моментpepecool.png?1592046811

Mobsman

Пользователь

Регистрация: 06.09.2016

Сообщения: 24122

Рейтинг: 22390

Mobsman

Регистрация: 06.09.2016

Сообщения: 24122

Рейтинг: 22390

@Тень228 дай молодому пару советов , уничтожь его просто , что бы он не хотел больше брать клавиатуру в руки

Тень228

Пользователь

Регистрация: 24.09.2019

Сообщения: 4077

Рейтинг: -748

Нарушения: 10

Тень228

Регистрация: 24.09.2019

Сообщения: 4077

Рейтинг: -748

Нарушения: 10

Mobsman сказал(а):

@Тень228 дай молодому пару советов , уничтожь его просто , что бы он не хотел больше брать клавиатуру в руки

Нажмите, чтобы раскрыть...

В смысле уничтожить, если я всегда говорю, что программирование - очень просто и при желании его может освоить любой даун.

Хотя конкретно насчет тса есть сомнения, его манера письма это просто треш какой-то, как и тот факт, что он предлагает мне пойти найти задачку по номеру урока у какого-то там говноеда вместо того, чтобы просто ее здесь кратко привести.

Хотя мб я не прав и вы тут все вкатываетесь по урокам этого жамшута или как там и все в курсе.


Ectx сказал(а):

Hibernate всё что я делал окажется говном мамонта

Нажмите, чтобы раскрыть...

Как и вся Java.


Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img
Тень228 сказал(а):

В смысле уничтожить, если я всегда говорю, что программирование - очень просто и при желании его может освоить любой даун.

Хотя конкретно насчет тса есть сомнения, его манера письма это просто треш какой-то, как и тот факт, что он предлагает мне пойти найти задачку по номеру урока у какого-то там говноеда вместо того, чтобы просто ее здесь кратко привести.

Хотя мб я не прав и вы тут все вкатываетесь по урокам этого жамшута или как там и все в курсе.


Как и вся Java.


Нажмите, чтобы раскрыть...

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

YoshkinKot

Пользователь

Регистрация: 20.06.2016

Сообщения: 16243

Рейтинг: 6391

YoshkinKot

Регистрация: 20.06.2016

Сообщения: 16243

Рейтинг: 6391

Ectx сказал(а):

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

Нажмите, чтобы раскрыть...

И всё же:

http://www.catb.org/~esr/faqs/smart-questions.html