diff options
Diffstat (limited to 'src/org/traccar/helper')
-rw-r--r-- | src/org/traccar/helper/AdvancedConnection.java | 57 | ||||
-rw-r--r-- | src/org/traccar/helper/NamedParameterStatement.java | 55 |
2 files changed, 104 insertions, 8 deletions
diff --git a/src/org/traccar/helper/AdvancedConnection.java b/src/org/traccar/helper/AdvancedConnection.java new file mode 100644 index 000000000..4b91ee1f5 --- /dev/null +++ b/src/org/traccar/helper/AdvancedConnection.java @@ -0,0 +1,57 @@ +/* + * Copyright 2010 Anton Tananaev (anton@tananaev.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.helper; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class AdvancedConnection { + + /** + * Database connection + */ + private Connection connection; + + /** + * Connection attributes + */ + private String url; + private String user; + private String password; + + public AdvancedConnection(String url, String user, String password) { + this.url = url; + this.user = user; + this.password = password; + } + + public final void reset() throws SQLException { + if (user != null && password != null) { + connection = DriverManager.getConnection(url, user, password); + } else { + connection = DriverManager.getConnection(url); + } + } + + public Connection getInstance() throws SQLException { + if (connection == null) { + reset(); + } + return connection; + } + +} diff --git a/src/org/traccar/helper/NamedParameterStatement.java b/src/org/traccar/helper/NamedParameterStatement.java index 9464d86a8..bbb2bcdf3 100644 --- a/src/org/traccar/helper/NamedParameterStatement.java +++ b/src/org/traccar/helper/NamedParameterStatement.java @@ -1,6 +1,20 @@ +/* + * Copyright 2010 Anton Tananaev (anton@tananaev.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.traccar.helper; -import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -18,31 +32,40 @@ public class NamedParameterStatement { /** * Native statement */ - private final PreparedStatement statement; + private PreparedStatement statement; /** * Index mapping */ private final Map indexMap; + + /** + * Query string + */ + private final String parsedQuery; + + /** + * Database connection + */ + private AdvancedConnection connection; /** * Initialize statement */ - public NamedParameterStatement(Connection connection, String query) - throws SQLException { + public NamedParameterStatement(AdvancedConnection connection, String query) { indexMap = new HashMap(); - String parsedQuery = parse(query, indexMap); - statement = connection.prepareStatement(parsedQuery); + parsedQuery = parse(query, indexMap); + this.connection = connection; } /** * Parse query */ - static final String parse(String query, Map paramMap) { + static String parse(String query, Map paramMap) { int length = query.length(); - StringBuffer parsedQuery = new StringBuffer(length); + StringBuilder parsedQuery = new StringBuilder(length); boolean inSingleQuote = false; boolean inDoubleQuote = false; int index = 1; @@ -96,6 +119,14 @@ public class NamedParameterStatement { * Execute query with result */ public ResultSet executeQuery() throws SQLException { + try { + if (statement == null) { + statement = connection.getInstance().prepareStatement(parsedQuery); + } + } catch (SQLException error) { + connection.reset(); + statement = connection.getInstance().prepareStatement(parsedQuery); + } return statement.executeQuery(); } @@ -104,6 +135,14 @@ public class NamedParameterStatement { * Executes query without result */ public int executeUpdate() throws SQLException { + try { + if (statement == null) { + statement = connection.getInstance().prepareStatement(parsedQuery); + } + } catch (SQLException error) { + connection.reset(); + statement = connection.getInstance().prepareStatement(parsedQuery); + } return statement.executeUpdate(); } |