Что такое Соединение в JDBC?

Да. Вы должны правильно настроить LRECL и RECFM, но вы можете получить их из исходного кода в программу, которую вы выполняете. Большинство стандартных отчетов - 133 и FB или 132 и FBA. Кажется, я помню, что IDCAMS был 121 и VBA.

//WNMPRAD5 EXEC PGM=WNMPRAD5,COND=(4,LT)                     
//SYSPRINT DD SYSOUT=1                                       
//SYSDBOUT DD SYSOUT=1                                       
//ENTRADA  DD DSN=WNMT.SCADUC.WGPT022.ZXDALMA.UNLDBI,DISP=OLD
//SORTIDA  DD DSN=WNMT.SCADUC.WGPT022.ZXDALMA.OUTPUT.V02,    
//            DISP=(NEW,CATLG,DELETE),UNIT=DISK,             
//            DCB=(RECFM=FB,LRECL=278),                      
//            SPACE=(27998,(2500,2500),RLSE) 
//SYSOUT   DD  DISP=(NEW,CATLG,DELETE),
//             DSN=&SYSUID..STEPNAME.SYSOUT,
//             AVGREC=K,
//             LRECL=133,
//             RECFM=FB,
//             SPACE=(500,(10,10))
//SYSIN    DD *                                              
N0100                                                        
/*
7
задан ROMANIA_engineer 27 August 2017 в 16:08
поделиться

4 ответа

Эти соединения являются соединениями TCP / IP. Чтобы не приходилось тратить время на создание каждого нового соединения, существуют пулы соединений, которые динамически расширяются и сжимаются. Вы можете использовать одно соединение для нескольких запросов. Я думаю, вы имеете в виду, что вы выпустили его в бассейн. Если вы сделаете это, вы можете получить то же соединение из пула. В этом случае не имеет значения, выполняете ли вы один или несколько запросов

. Стоимость подключения - подключение, которое занимает некоторое время. И база данных готовит некоторые вещи, такие как сессии и т. Д. Для каждого соединения. Это должно быть сделано каждый раз. Связи становятся устаревшими по нескольким причинам. Самый выдающийся - это межсетевой экран. Проблемы с соединением могут привести к сбросу соединения или могут быть простые тайм-ауты

7
ответ дан 7 December 2019 в 03:20
поделиться

Чтобы добавить к другим ответам:

Да, вы можете повторно использовать одно и то же соединение для нескольких запросов. Это даже целесообразно, поскольку создание нового соединения довольно дорого.

Вы даже можете выполнять несколько запросов одновременно. Вам просто нужно использовать новый экземпляр java.sql.Statement / PreparedStatement для каждого запроса. Операторы - это то, что JDBC использует для отслеживания текущих запросов, поэтому для каждого параллельного запроса требуется свой собственный оператор. Вы можете и должны повторно использовать операторы для последовательных запросов.

2
ответ дан 7 December 2019 в 03:20
поделиться

Ответы на ваши вопросы состоят в том, что они определены реализацией. Соединение JDBC - это интерфейс, который предоставляет методы. То, что происходит за кулисами, может быть чем угодно, что обеспечивает интерфейс. Например, рассмотрим внутренний драйвер JDBC Oracle, используемый для поддержки хранимых процедур Java. Одновременные запросы не только возможны, они более или менее неизбежны, поскольку каждый запрос нового соединения возвращает один-единственный объект соединения. Я не знаю наверняка, использует ли он TCP / IP внутри, но я сомневаюсь в этом.

Поэтому вы не должны предполагать детали реализации, не зная точно, какую реализацию JDBC вы используете.

0
ответ дан 7 December 2019 в 03:20
поделиться

, поскольку я пока не могу комментировать, отправлю ответ только для того, чтобы прокомментировать ответ Vinegar, ситуация с возвращением setAutoCommit () в состояние по умолчанию при возврате соединения в пул не является обязательным поведением и не должна приниматься для предоставляется также как закрытие операторов и наборов результатов; Вы можете прочитать, что он должен быть закрыт, но если вы не закроете их, они будут автоматически закрыты при закрытии соединения. Не принимайте это как должное, так как это займет ваши ресурсы в некоторых версиях драйверов jdbc.

У нас была серьезная проблема с базой данных DB2 на AS400, ребята, которым требовалась изоляция транзакций, вызывали connection.setAutoCommit (false), и после завершения работы они возвращали такое соединение с пулом (JNDI) без connection.setAutoCommit (old_state), поэтому, когда другой поток получил это соединение из пула,

0
ответ дан 7 December 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: