@@ -216,6 +216,10 @@ public <T> QueryRowsResult<T> query(Query query, Class<T> typeClass) {
216216 */
217217 @ Override
218218 public QueryRowsResult <Row > query (Query query ) {
219+ return doQuery (query , false );
220+ }
221+
222+ private QueryRowsResult <Row > doQuery (Query query , boolean isRetry ) {
219223 Objects .requireNonNull (query );
220224
221225 if (!handleAutoReconnect ()) {
@@ -241,6 +245,11 @@ public QueryRowsResult<Row> query(Query query) {
241245
242246 return result ;
243247 } catch (SQLException e ) {
248+ if (!isRetry && e .getMessage ().contains ("database connection closed" )) {
249+ reconnect ();
250+ return doQuery (query , true );
251+ }
252+
244253 logSqlError (e );
245254 return new QueryRowsResult <>(false , e .getMessage ());
246255 }
@@ -257,13 +266,22 @@ public QueryRowsResult<Row> query(Query query) {
257266 * about success state of the request.
258267 */
259268 public QueryResult exec (Query query ) {
269+ return doExec (query , false );
270+ }
271+
272+ private QueryResult doExec (Query query , boolean isRetry ) {
260273 if (!handleAutoReconnect ()) {
261274 return new QueryResultImpl (false , "Cannot connect to database!" );
262275 }
263276 try (PreparedStatement stmt = buildStatement (query )) {
264277 stmt .execute ();
265278 return new QueryResultImpl (true );
266279 } catch (SQLException e ) {
280+ if (!isRetry && e .getMessage ().contains ("database connection closed" )) {
281+ reconnect ();
282+ return doExec (query , true );
283+ }
284+
267285 logSqlError (e );
268286 return new QueryResultImpl (false , e .getMessage ());
269287 }
@@ -349,11 +367,16 @@ protected Pair<String[], UnknownValueWrapper[]> buildDefsVals(Object obj) {
349367 @ SuppressWarnings ("all" )
350368 private boolean handleAutoReconnect () {
351369 if (options .isAutoReconnect () && !isConnected ()) {
352- debug ("Trying to make a new connection with the database!" );
353- if (!connect ()) {
354- debug ("Cannot make new connection!" );
355- return false ;
356- }
370+ return reconnect ();
371+ }
372+ return true ;
373+ }
374+
375+ private boolean reconnect () {
376+ debug ("Trying to make a new connection with the database!" );
377+ if (!connect ()) {
378+ debug ("Cannot make new connection!" );
379+ return false ;
357380 }
358381 return true ;
359382 }
0 commit comments