Я использую ORMLite в решении, созданном сервером и клиентами.
На стороне сервера я использую PostgreSQL, на стороне клиента я использую SQLite. В коде я использую те же методы ORMLite, не заботясь об управляемой БД (Postgres или SQLite). Я также использовал объединенное соединение.
У меня не открыто соединение, когда мне нужен запрос Sql, ORMLite позаботится об открытии и закрытии соединения.
Иногда я использую следующий код для выполнения длительной операции в фоновом режиме на стороне сервера, например, в DB PostgreSql.
final ConnectionSource OGGETTO_ConnectionSource = ...... ;
final DatabaseConnection OGGETTO_DatabaseConnection =
OGGETTO_ConnectionSource.getReadOnlyConnection( "tablename" ) ;
OGGETTO_DAO.setAutoCommit(OGGETTO_DatabaseConnection, false);
// do long operation with Sql Queries ;
OGGETTO_DAO.commit(OGGETTO_DatabaseConnection);
OGGETTO_DAO.setAutoCommit(OGGETTO_DatabaseConnection, true);
Я заметил, что количество открытых подключений увеличилось, поэтому через какое-то время их количество настолько велико, что сервер останавливается (SqlException слишком много клиентов, подключенных к БД). Я обнаружил, что это из-за фрагмента кода выше, кажется, что после этого фрагмента соединение не закрывается и остается открытым. Конечно, я не могу добавить в конце OGGETTO_ConnectionSource.close (), потому что он закрывает объединенный источник соединения. Если я добавлю в конце OGGETTO_DatabaseConnection.close ();, это не сработает, количество открытых соединений продолжит увеличиваться.
Как это решить?