Skip to content

Commit 66237d6

Browse files
committed
Fix
1 parent ecd336b commit 66237d6

1 file changed

Lines changed: 28 additions & 5 deletions

File tree

core/src/main/java/me/zort/sqllib/SQLDatabaseConnectionImpl.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)