Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java запись в две связанные таблицы / 25 сообщений из 26, страница 1 из 2
25.11.2012, 23:48:01
    #38052493
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
добрый день !

такой вопрос - как из 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
26.11.2012, 00:06:00
    #38052513
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
начать транзакцию
вставить в одну таблицу, получить сгенеренный ПК getGeneratedKeys()
вставить в другую таблицу используя значение ПК
закомитить транзакцию
...
Рейтинг: 0 / 0
26.11.2012, 00:26:35
    #38052524
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
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
26.11.2012, 10:14:08
    #38052739
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
авторчто-то в конце?

transactions
смотри пример.
...
Рейтинг: 0 / 0
26.11.2012, 11:03:54
    #38052816
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
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
26.11.2012, 11:32:39
    #38052869
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
Blazkowicz,
соре, а чо такое fori?
...
Рейтинг: 0 / 0
26.11.2012, 11:38:17
    #38052882
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
grasoff.netBlazkowicz,
соре, а чо такое fori?
Самому интересно. "Да" относилось к цитате.
...
Рейтинг: 0 / 0
26.11.2012, 11:39:05
    #38052884
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
Blazkowiczgrasoff.netBlazkowicz,
соре, а чо такое fori?
Самому интересно. "Да" относилось к цитате.ммм, ок )
...
Рейтинг: 0 / 0
26.11.2012, 13:14:15
    #38053105
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
grasoff.net,

цикл по всем id - на которые надо отправить сообщение!
...
Рейтинг: 0 / 0
26.11.2012, 13:26:53
    #38053130
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
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
26.11.2012, 14:15:41
    #38053240
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
Просто еще один вопрос- если записей которые нужно вставить в таблицу B

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

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

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

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

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

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

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

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

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

теперь переведи и приведи хотя бы 3 сообщения
автору меня есть 1000 пользователей которым надо отправить одно и тоже сообщениея лично ничего не понял
...
Рейтинг: 0 / 0
26.11.2012, 22:04:56
    #38053996
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
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
26.11.2012, 23:18:46
    #38054039
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
Atum1,
тогда в 1 таблице будет
345 "ребята сегодня идем играть в футбол!"
346 "Ребята сегодня идем играть в футбол!
347 "ребятКИ сегодня идем играть в футбол!"

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

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

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

вопрос был как организовать запись в две связанные таблицы - со всеми преустановками и откатами если возникнет ошибка.
...
Рейтинг: 0 / 0
27.11.2012, 12:01:13
    #38054492
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
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
27.11.2012, 12:12:27
    #38054526
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
silvan, походу ты ничего не написал, кроме надцать строк try
...
Рейтинг: 0 / 0
27.11.2012, 12:22:49
    #38054543
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
Petro123silvan, походу ты ничего не написал, кроме надцать строк try?!
...
Рейтинг: 0 / 0
27.11.2012, 12:29:06
    #38054555
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
silvan,
я имею ввиду, что это вопрос уже обсосали со всех сторон. Хочет чел делать 1000 _и более_ инсертов -
пусть вставляет. Ему никто не мешает. И даже СУБД от этого не поперхнётся)
Если ты сервер, не суетись под клиентом (с) ))
Удачи аффтару!
...
Рейтинг: 0 / 0
27.11.2012, 16:12:03
    #38055062
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java запись в две связанные таблицы
silvan

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

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

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

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

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


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