From f151afb7046c79184bbb9dcf1215a99731728599 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 23 Oct 2012 10:31:29 +1300 Subject: Reset connection on error (fix #52) --- src/org/traccar/TrackerEventHandler.java | 1 + src/org/traccar/helper/AdvancedConnection.java | 4 ++++ .../traccar/helper/NamedParameterStatement.java | 23 +++++++++++++++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) (limited to 'src/org/traccar') diff --git a/src/org/traccar/TrackerEventHandler.java b/src/org/traccar/TrackerEventHandler.java index 9e46372ca..bd3e90160 100644 --- a/src/org/traccar/TrackerEventHandler.java +++ b/src/org/traccar/TrackerEventHandler.java @@ -63,6 +63,7 @@ public class TrackerEventHandler extends SimpleChannelHandler { try { dataManager.addPosition(position); } catch (Exception error) { + Log.info("Exception during query execution"); Log.warning(error.getMessage()); } } diff --git a/src/org/traccar/helper/AdvancedConnection.java b/src/org/traccar/helper/AdvancedConnection.java index 30be4dba8..c0126974b 100644 --- a/src/org/traccar/helper/AdvancedConnection.java +++ b/src/org/traccar/helper/AdvancedConnection.java @@ -40,6 +40,10 @@ public class AdvancedConnection { } public final void reset() throws SQLException { + if (connection != null) { + connection.close(); + connection = null; + } if (user != null && password != null) { connection = DriverManager.getConnection(url, user, password); } else { diff --git a/src/org/traccar/helper/NamedParameterStatement.java b/src/org/traccar/helper/NamedParameterStatement.java index 0dfbb9551..cbbc187da 100644 --- a/src/org/traccar/helper/NamedParameterStatement.java +++ b/src/org/traccar/helper/NamedParameterStatement.java @@ -40,6 +40,8 @@ public class NamedParameterStatement { * Database connection */ private AdvancedConnection connection; + + private int autoGeneratedKeys; /** * Initialize statement @@ -106,15 +108,30 @@ public class NamedParameterStatement { return parsedQuery.toString(); } + + public void reset(boolean resetConnection) throws SQLException { + if (statement != null) { + statement.close(); + statement = null; + } + if (resetConnection) { + connection.reset(); + } + statement = connection.getInstance().prepareStatement(parsedQuery, autoGeneratedKeys); + } public void prepare(int autoGeneratedKeys) throws SQLException { + this.autoGeneratedKeys = autoGeneratedKeys; try { if (statement == null) { - statement = connection.getInstance().prepareStatement(parsedQuery, autoGeneratedKeys); + reset(false); + } else if (statement.getWarnings() != null) { + reset(true); } } catch (SQLException error) { - connection.reset(); - statement = connection.getInstance().prepareStatement(parsedQuery, autoGeneratedKeys); + Log.info("Exception during query preparation"); + Log.warning(error.getMessage()); + reset(true); } } -- cgit v1.2.3