diff options
Diffstat (limited to 'src/org/traccar/helper/NamedParameterStatement.java')
-rw-r--r-- | src/org/traccar/helper/NamedParameterStatement.java | 55 |
1 files changed, 47 insertions, 8 deletions
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(); } |