diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2012-10-23 10:31:29 +1300 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2012-10-23 10:31:29 +1300 |
commit | f151afb7046c79184bbb9dcf1215a99731728599 (patch) | |
tree | ae5ee7fad2a3d23de6d94b6f0a0a4d699376117a /src/org/traccar/helper | |
parent | 0af1cebf1e2f3f719edf5391252fcd4004a75157 (diff) | |
download | trackermap-server-f151afb7046c79184bbb9dcf1215a99731728599.tar.gz trackermap-server-f151afb7046c79184bbb9dcf1215a99731728599.tar.bz2 trackermap-server-f151afb7046c79184bbb9dcf1215a99731728599.zip |
Reset connection on error (fix #52)
Diffstat (limited to 'src/org/traccar/helper')
-rw-r--r-- | src/org/traccar/helper/AdvancedConnection.java | 4 | ||||
-rw-r--r-- | src/org/traccar/helper/NamedParameterStatement.java | 23 |
2 files changed, 24 insertions, 3 deletions
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); } } |