Я нашел решение. Я недавно обновил свою машину до 64-разрядного Windows 2008 Server. SqlServer. Пространство имен репликации было записано для 32-разрядных платформ. Все, что я должен был сделать для получения его работающий снова, должно было установить Целевую платформу в Свойствах Сборки Проекта к X86.
Значение обычно управляется DB. Вы не можете контролировать это с помощью кода. Это зависит от используемого сервера БД. Обычно это от 30 минут до часа.
С другой стороны, постоянно держать Соединение
открытым - очень плохая идея. Лучше всего получить и закрыть Connection
, Statement
и ResultSet
в кратчайшей возможной области, чтобы избежать ресурса утечки и потенциальные сбои приложений, вызванные утечками и тайм-аутами.
Действительно, подключение БД - дорогостоящая задача. Если ваше приложение должно работать относительно долго и довольно часто подключать БД, рассмотрите возможность использования пула подключений для повышения производительности подключения. Если ваше приложение является веб-приложением, затем загляните в документацию к серверу приложений, она обычно предоставляет средство объединения соединений в виде источника данных
. Если это клиентское приложение, поищите сторонние библиотеки пула соединений, которые доказали свою надежность годами, такие как Apache Commons DBCP (обычно используется, используется в серверах приложений), C3P0 (известно из Hibernate) и Proxool (если вам нужны XA-соединения).
Имейте в виду, что при использовании пула соединений вам все равно придется писать правильный код JDBC, iow получить и закрыть все ресурсы в кратчайшие возможные сроки. Пул соединений, в свою очередь, будет беспокоиться о фактическом закрытии соединения или просто освобождении его обратно в пул для дальнейшего использования.
Вы можете установить тайм-аут в DriverManager следующим образом:
DriverManager.setLoginTimeout(10);
Connection c = DriverManager.getConnection(url, username, password);
Это будет означать, что если соединение не может быть открыто в течение заданного времени, оно истекает.
С точки зрения сохранения соединение открыто навсегда, это возможно, если вы не закроете соединение, но это может быть не очень хорошей идеей. Соединения должны быть закрыты, как только вы закончите с ними.
Если вы хотите оптимизировать открытие и закрытие соединений, вы можете использовать пул соединений.