Java / MySQL - Как получить доступ к соединению из другого класса? - PullRequest
1 голос
/ 22 мая 2010

Я просто разбираюсь с Java (и ООП в этом отношении), единственное, с чем я знаком, это MySQL. Мне нужно, чтобы соединение БД было открыто в течение всего времени работы приложения, а также сокета сервера.

Я даже не уверен, что им обоим нужны отдельные классы, но вот что у меня есть:

http://pastebin.com/qzMFFTrY (не все будет идти в кодовом теге)

Мне нужна переменная con для строки 86.

Ответы [ 2 ]

3 голосов
/ 22 мая 2010

Мне нужно, чтобы соединение с БД было открыто в течение всего срока действия приложения

Ты не должен этого делать. Соединение имеет ограниченный срок службы, длина которого не контролируется вашим приложением. Когда БД решит, что соединение открыто слишком долго, оно закроет соединение, и вы получите connection reset или connection timed out исключения. Обычно это около 30 минут, но может быть и меньше.

Обычной практикой JDBC является получение и закрытие Connection, Statement и ResultSet в кратчайшей возможной области, т. Е. В том же блоке методов, в котором вы выполняете запрос.

Если причина того, что соединение долго остается открытым, связана с производительностью, вам следует рассмотреть пул соединений, например c3p0 ( руководство по использованию здесь ).

0 голосов
/ 22 мая 2010

Почему бы не создать экземпляр DoComms с ранее установленным соединением?

например. строка 44 будет:

DoComms conn_c = new DoComms(server, con);

и DoComms будут содержать ссылку на это соединение, а затем использовать его в строке 86.

Обратите внимание, что вы получаете соединение, а затем закрываете его в finally блоке до того, как создадите ваши DoComms объекты (строка 28). Поэтому вы должны закрыть соединение, как только закончите обрабатывать все. Кратко:

try {
  // get connection

  // do stuff in threads
}
catch {
  // handle
}
finally {
  con.close();
}

Если ваше приложение является долговечным, я бы использовал пул соединений (например, C3P0 или Apache DBCP) и открывал / закрывал соединения по мере необходимости. Однако ваш подход вполне может соответствовать вашим требованиям, и на данный момент я бы не беспокоился об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...