powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java запись в две связанные таблицы
26 сообщений из 26, показаны все 2 страниц
Java запись в две связанные таблицы
    #38052493
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добрый день !

такой вопрос - как из java записать данные в две таблицы table A - table B связь один ко многим по ключу.

в первой таблице лежит id и текст - во второй лежит id этой записи из первой таблице и то куда эта запись отправится .


т.е нормальная форма .


что надо сделать просто по шагам ?

не очень понимаю как написать такой запрос ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    connection = database.getConnection();
    connection.setAutoCommit(false);
    statement = connection.prepareStatement(SQL_INSERT);

      statement.addBatch();
      statement.executeBatch(); 

connection.commit();
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38052513
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начать транзакцию
вставить в одну таблицу, получить сгенеренный ПК getGeneratedKeys()
вставить в другую таблицу используя значение ПК
закомитить транзакцию
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38052524
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

команду connection.setAutoCommit(false); надо выставлять ?

1. insert into table a (id ,name) values ( ? ,?)

2.prepareStatment (sql)
3.set id set name

4.execute() ?

5. получение id новой записи -

6. fori -
insert into table b (id ,id_a, id_t) values ( ? ,? ,?)

так ?

что-то в конце?
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38052739
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторчто-то в конце?

transactions
смотри пример.
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38052816
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JavaDoc по JDBC вообще пробовали читать? ИЛи туториал?
Atum1команду connection.setAutoCommit(false); надо выставлять ?

Зависит от требований. Если нужно чтобы обязательно было или 0 или две записи. То нужно.
Если не страшно, что первая вставится, а вторая приведет к ошибке, то можно и оставить автокомит.

Atum11. insert into table a (id ,name) values ( ? ,?)
2.prepareStatment (sql)
3.set id set name

PK обычно генерятся на сторон базы. У вас как?

Atum14.execute() ?

executeUpdate() ?

Atum15. получение id новой записи -
6. fori -
insert into table b (id ,id_a, id_t) values ( ? ,? ,?)
так ?

fori ? Да.

Atum1что-то в конце?
connection.commit()
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38052869
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
соре, а чо такое fori?
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38052882
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netBlazkowicz,
соре, а чо такое fori?
Самому интересно. "Да" относилось к цитате.
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38052884
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczgrasoff.netBlazkowicz,
соре, а чо такое fori?
Самому интересно. "Да" относилось к цитате.ммм, ок )
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38053105
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net,

цикл по всем id - на которые надо отправить сообщение!
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38053130
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netBlazkowiczпропущено...

Самому интересно. "Да" относилось к цитате.ммм, ок )

Как я понимаю должен получиться такой код!

и что в конце :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
// вставка в первую таблицу
connection = database.getConnection();
connection.setAutoCommit(false);

PreparedStatement stmt = null;
ResultSet rs = null;
//таблица с автоинкрементом по id
 stmt = con.prepareStatement("INSERT INTO tableA (message_text) VALUES (?)");
 stmt.setString(1, msg);
 stmt.execute();
            
int autoIncKeyFromFunc = -1;
rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
//  получили id вставленной записи 
            if (rs.next()) {
                autoIncKeyFromFunc = rs.getInt(1);
}


// вставка во ворую таблицу 
//таблица с автоинкрементом по id

List<Integer> usersId = new ArrayList<Ineger>();
usersId.add(1); 
usersId.add(2); 
usersId.add(3); 


 PreparedStatement  updateTotal = connection.prepareStatement("insert into B (id_a, id_t) values (? ,?) ");

for(List  userId :usersId  ){
updateTotal .setInt(1, autoIncKeyFromFunc);
updateTotal .setInt(2, usersId.get(i));
//stmt.execute();
 updateTotal .addBatch();
 updateTotal .executeBatch(); 
}
updateTotal.execute(); 
con.commit();
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38053240
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто еще один вопрос- если записей которые нужно вставить в таблицу B

1000 или больше - как организовать их вставку - отдельными командами insert -

после каждой делать
statement.addBatch();
после каждой 100 делать
statement.executeBatch();

или как то иначе?
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38053326
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1или как то иначе?
нужно знать всю задачу.
Т.к. глупо вставлять 1000 записей из таблицы А в таблицу Б через клиента.
А если скорость не важна, то и вопрос надуман - вставляй пачкой за раз.
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38053686
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Просто еще один вопрос- если записей которые нужно вставить в таблицу B

1000 или больше - как организовать их вставку - отдельными командами insert -

после каждой делать
statement.addBatch();
после каждой 100 делать
statement.executeBatch();

или как то иначе?

Задачу я описал - есть нормальная форма - две таблицы связаны между собой по ключам -

у меня есть 1000 пользователей которым надо отправить одно и тоже сообщение

в первой таблице у меня id сообщения и текст сообщения
во второй -id сообщения из первой таблицы и id_user которому это сообщение должно упасть .
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38053776
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
тебе лень привести пример?
Первая табла - это справочник ВСЕХ НЕПОВТОРЯЕМЫХ УНИКАЛЬНЫХ сообщений.
А вторая - кому они отправляются.

теперь переведи и приведи хотя бы 3 сообщения
автору меня есть 1000 пользователей которым надо отправить одно и тоже сообщениея лично ничего не понял
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38053996
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

ну вроде достаточно описал систему- точнее упростил чтобы донести саму суть что надо сделать ...

у вас есть таблица с пользователями - они же подписчики ...

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

к примеру : в браузере ввозите - "ребята сегодня идем играть в футбол!"

и указываете кому вы это отправляете - id = 2 , id = 34 , id =56

в первую таблицу попадает сообщение = >id = 345 , message = "ребята сегодня идем играть в футбол!"

во вторую -
id = 100; id_m = 345 , id_u = 2
id = 101; d_m = 345 , id_u = 34
id = 102; id_m = 345 , id_u = 56
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38054039
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
тогда в 1 таблице будет
345 "ребята сегодня идем играть в футбол!"
346 "Ребята сегодня идем играть в футбол!
347 "ребятКИ сегодня идем играть в футбол!"

если поиск дубликатов и Ид оставлен за скобками, тогда всё понятно
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38054045
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
ну а по сабжу - СУБД с 1000 инсертами справится, не переживай. А вот пользователь в ГУИ - нет.
Тестируй нагрузочным вместе с юзверями и ищи Тонкое место. Все так пишут.
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38054306
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
тогда в 1 таблице будет
345 "ребята сегодня идем играть в футбол!"
346 "Ребята сегодня идем играть в футбол!
347 "ребятКИ сегодня идем играть в футбол!"

если поиск дубликатов и Ид оставлен за скобками, тогда всё понятно

Да - оставлен.

вопрос был как организовать запись в две связанные таблицы - со всеми преустановками и откатами если возникнет ошибка.
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38054492
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Atum1.
вопрос был как организовать запись в две связанные таблицы - со всеми преустановками и откатами если возникнет ошибка.
ЕЩЕ РАЗ
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
...
try {
        con.setAutoCommit(false);
        PreparedStatement stmt= null;
...
// вставка в первую таблицу
...
//  получили id вставленной записи
...
// вставка во ворую таблицу 
//таблица с автоинкрементом по id
...
} catch (SQLException e ) {

        if (con != null) {
                System.err.print("Transaction is being rolled back");
                con.rollback();
        }
 } finally {
        if (stmt!= null) {
            stmt.close();
        }
        con.setAutoCommit(true);
    }
...


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

1000 или больше - как организовать их вставку - отдельными командами insert -

после каждой делать
statement.addBatch();
после каждой 100 делать
statement.executeBatch();
типо того, циклом добавляем инсерты в batch на необходимой итерации и в конце цикла делаем executeBatch


Petro123Atum1,
автору меня есть 1000 пользователей которым надо отправить одно и тоже сообщениея лично ничего не понял
спамер походу
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38054526
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
silvan, походу ты ничего не написал, кроме надцать строк try
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38054543
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123silvan, походу ты ничего не написал, кроме надцать строк try?!
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38054555
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
silvan,
я имею ввиду, что это вопрос уже обсосали со всех сторон. Хочет чел делать 1000 _и более_ инсертов -
пусть вставляет. Ему никто не мешает. И даже СУБД от этого не поперхнётся)
Если ты сервер, не суетись под клиентом (с) ))
Удачи аффтару!
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38055062
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
silvan

Спасибо! то что надо :)

p.s. - это не спаммашина.
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38055333
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а хранимки под запретом?
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38055965
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяа хранимки под запретом?

не селен в sql (Mysql)

Как такую процедуру написать со всеми exeption ?

и вызвать ?
Код: java
1.
CallableStatement cstmt = ???
...
Рейтинг: 0 / 0
Java запись в две связанные таблицы
    #38056312
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяа хранимки под запретом?
триггеры?

Atum1вадяа хранимки под запретом?

не селен в sql (Mysql)

Как такую процедуру написать со всеми exeption ?

Написание процедуры к Java отношения не имеет.Ну только если Mysql позволяет писать их на Java


Atum1 и вызвать ?

Using Stored Procedures
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Java запись в две связанные таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]