From c19ff6a907c389ae539ab2dc721c048f29c99171 Mon Sep 17 00:00:00 2001 From: "\"zhonqqing.lin@zkteco.com\"" <"zhonqqing.lin@zkteco.com"@notebook-lzq> Date: Mon, 7 Sep 2015 09:58:32 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9jdbcClient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- external/storm-jdbc/pom.xml | 264 ++++++++++-------- .../apache/storm/jdbc/common/JdbcClient.java | 71 ++++- 2 files changed, 201 insertions(+), 134 deletions(-) diff --git a/external/storm-jdbc/pom.xml b/external/storm-jdbc/pom.xml index 4e7c884b5f..00f45d5474 100644 --- a/external/storm-jdbc/pom.xml +++ b/external/storm-jdbc/pom.xml @@ -1,129 +1,149 @@ - + + 4.0.0 - http://www.apache.org/licenses/LICENSE-2.0 + + storm + org.apache.storm + 0.10.0-beta1 + + - 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. ---> - - 4.0.0 + storm-jdbc - - storm - org.apache.storm - 0.11.0-SNAPSHOT - ../../pom.xml - + + + Parth-Brahmbhatt + Parth Brahmbhatt + brahmbhatt.parth@gmail.com + + - storm-jdbc + + 2.2.5 + + + + + central + http://192.168.0.230:8080/artifactory/repo + + + third-party + third-party-releases + http://192.168.0.230:8080/artifactory/third-party + + + zkteco-internal-repository + zkteco-internal-repository-releases + http://192.168.0.230:8080/artifactory/zkteco-internal-repository + + true + + + true + always + warn + + + + + + central + http://192.168.0.230:8080/artifactory/repo + + + zkteco-internal-repository + zkteco-internal-repository-releases + http://192.168.0.230:8080/artifactory/zkteco-internal-repository + + + + + zkteco-internal-repository + zkteco-internal-repository-releases + http://192.168.0.230:8080/artifactory/zkteco-internal-repository + + + zkteco-internal-repository + zkteco-internal-repository-snapshots + http://192.168.0.230:8080/artifactory/zkteco-internal-repository + + - - - Parth-Brahmbhatt - Parth Brahmbhatt - brahmbhatt.parth@gmail.com - - - - - 2.2.5 - - - - - org.apache.storm - storm-core - ${project.version} - provided - - - org.apache.commons - commons-lang3 - 3.3 - - - com.google.guava - guava - 17.0 - - - com.zaxxer - HikariCP-java6 - ${hikari.version} - compile - - - junit - junit - 4.11 - test - - - org.hsqldb - hsqldb - 2.3.1 - test - - - commons-lang - commons-lang - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.5 - - - - test-jar - - - - - - org.codehaus.mojo - sql-maven-plugin - 1.5 - - - org.hsqldb - hsqldb - 2.3.2 - - - - - create-db - process-test-resources - - execute - - - org.hsqldb.jdbcDriver - jdbc:hsqldb:mem:test;shutdown=false - SA - - true - - src/test/sql/test.sql - - - - - - - + + + org.apache.storm + storm-core + ${project.version} + provided + + + org.apache.commons + commons-lang3 + 3.3 + + + com.google.guava + guava + 17.0 + + + com.zaxxer + HikariCP-java6 + ${hikari.version} + compile + + + junit + junit + 4.11 + test + + + org.hsqldb + hsqldb + 2.3.1 + test + + + commons-lang + commons-lang + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.5 + + + + test-jar + + + + + + + diff --git a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/JdbcClient.java b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/JdbcClient.java index 228babea1a..5d3caebcd6 100644 --- a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/JdbcClient.java +++ b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/JdbcClient.java @@ -17,23 +17,35 @@ */ package org.apache.storm.jdbc.common; -import com.google.common.base.Function; -import com.google.common.base.Joiner; -import com.google.common.collect.Collections2; -import com.google.common.collect.Lists; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.Date; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Time; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.sql.*; -import java.sql.Date; -import java.util.*; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; public class JdbcClient { private static final Logger LOG = LoggerFactory.getLogger(JdbcClient.class); - private ConnectionProvider connectionProvider; - private int queryTimeoutSecs; + protected ConnectionProvider connectionProvider; + protected int queryTimeoutSecs; public JdbcClient(ConnectionProvider connectionProvider, int queryTimeoutSecs) { this.connectionProvider = connectionProvider; @@ -187,8 +199,43 @@ public void executeSql(String sql) { closeConnection(connection); } } - - private void setPreparedStatementParams(PreparedStatement preparedStatement, List columnList) throws SQLException { + + public void executeBatchSql(List sqlList) { + Connection connection = null; + try { + connection = connectionProvider.getConnection(); + Statement statement = connection.createStatement(); + connection.setAutoCommit(false); + for(String sql : sqlList){ + statement.addBatch(sql); + } + int[] results = statement.executeBatch(); + if(Arrays.asList(results).contains(Statement.EXECUTE_FAILED)) { + connection.rollback(); + throw new RuntimeException("failed at least one sql statement in the batch, operation rolled back."); + } else { + try { + connection.commit(); + } catch (SQLException e) { + throw new RuntimeException("Failed to commit insert query ", e); + } + } + } catch (SQLException e) { + try + { + connection.rollback(); + } + catch (SQLException e1) + { + throw new RuntimeException("Failed to rollback jdbc connection ", e); + } + throw new RuntimeException("Failed to execute SQL", e); + } finally { + closeConnection(connection); + } + } + + protected void setPreparedStatementParams(PreparedStatement preparedStatement, List columnList) throws SQLException { int index = 1; for (Column column : columnList) { Class columnJavaType = Util.getJavaType(column.getSqlType()); @@ -223,7 +270,7 @@ private void setPreparedStatementParams(PreparedStatement preparedStatement, Lis } } - private void closeConnection(Connection connection) { + protected void closeConnection(Connection connection) { if (connection != null) { try { connection.close(); From dd9800cceee0d0b9f757a3dc38f13b420e9beed9 Mon Sep 17 00:00:00 2001 From: "zhongqing.lin" Date: Mon, 12 Oct 2015 17:04:53 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3getLong()=E6=97=B6?= =?UTF-8?q?=E5=BA=94=E8=AF=A5=E8=BF=94=E5=9B=9Enull=E5=8D=B4=E8=BF=94?= =?UTF-8?q?=E5=9B=9E0=E9=94=99=E8=AF=AF=20http://www.onecowstanding.com/bl?= =?UTF-8?q?og/2011/1/21/handling-nullable-database-columns-with-jdbc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- external/storm-jdbc/pom.xml | 299 ++++---- .../storm/jdbc/bolt/AbstractJdbcBolt.java | 124 ++-- .../common/HikariCPConnectionProvider.java | 127 ++-- .../apache/storm/jdbc/common/JdbcClient.java | 701 +++++++++++------- 4 files changed, 695 insertions(+), 556 deletions(-) diff --git a/external/storm-jdbc/pom.xml b/external/storm-jdbc/pom.xml index 00f45d5474..ef775527e0 100644 --- a/external/storm-jdbc/pom.xml +++ b/external/storm-jdbc/pom.xml @@ -1,149 +1,150 @@ - - - - 4.0.0 - - - storm - org.apache.storm - 0.10.0-beta1 - - - - storm-jdbc - - - - Parth-Brahmbhatt - Parth Brahmbhatt - brahmbhatt.parth@gmail.com - - - - - 2.2.5 - - - - - central - http://192.168.0.230:8080/artifactory/repo - - - third-party - third-party-releases - http://192.168.0.230:8080/artifactory/third-party - - - zkteco-internal-repository - zkteco-internal-repository-releases - http://192.168.0.230:8080/artifactory/zkteco-internal-repository - - true - - - true - always - warn - - - - - - central - http://192.168.0.230:8080/artifactory/repo - - - zkteco-internal-repository - zkteco-internal-repository-releases - http://192.168.0.230:8080/artifactory/zkteco-internal-repository - - - - - zkteco-internal-repository - zkteco-internal-repository-releases - http://192.168.0.230:8080/artifactory/zkteco-internal-repository - - - zkteco-internal-repository - zkteco-internal-repository-snapshots - http://192.168.0.230:8080/artifactory/zkteco-internal-repository - - - - - - org.apache.storm - storm-core - ${project.version} - provided - - - org.apache.commons - commons-lang3 - 3.3 - - - com.google.guava - guava - 17.0 - - - com.zaxxer - HikariCP-java6 - ${hikari.version} - compile - - - junit - junit - 4.11 - test - - - org.hsqldb - hsqldb - 2.3.1 - test - - - commons-lang - commons-lang - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.5 - - - - test-jar - - - - - - - - + + + + 4.0.0 + + + org.apache.storm + storm-jdbc + 0.10.0-beta1 + + + Parth-Brahmbhatt + Parth Brahmbhatt + brahmbhatt.parth@gmail.com + + + + + 2.2.5 + + + + + central + http://192.168.0.230:8080/artifactory/repo + + + third-party + third-party-releases + http://192.168.0.230:8080/artifactory/third-party + + + zkteco-internal-repository + zkteco-internal-repository-releases + http://192.168.0.230:8080/artifactory/zkteco-internal-repository + + true + + + true + always + warn + + + + + + central + http://192.168.0.230:8080/artifactory/repo + + + zkteco-internal-repository + zkteco-internal-repository-releases + http://192.168.0.230:8080/artifactory/zkteco-internal-repository + + + + + zkteco-internal-repository + zkteco-internal-repository-releases + http://192.168.0.230:8080/artifactory/zkteco-internal-repository + + + zkteco-internal-repository + zkteco-internal-repository-snapshots + http://192.168.0.230:8080/artifactory/zkteco-internal-repository + + + + + + org.apache.storm + storm-core + 0.9.3 + provided + + + org.apache.commons + commons-lang3 + 3.3 + + + com.google.guava + guava + 17.0 + + + com.zaxxer + HikariCP-java6 + 2.2.5 + compile + + + junit + junit + 4.11 + test + + + org.hsqldb + hsqldb + 2.3.1 + test + + + commons-lang + commons-lang + 2.5 + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.5 + + + + test-jar + + + + + + + + diff --git a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/bolt/AbstractJdbcBolt.java b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/bolt/AbstractJdbcBolt.java index 15a2345296..0fbd49a405 100644 --- a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/bolt/AbstractJdbcBolt.java +++ b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/bolt/AbstractJdbcBolt.java @@ -1,62 +1,62 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.storm.jdbc.bolt; - -import backtype.storm.Config; -import backtype.storm.task.OutputCollector; -import backtype.storm.task.TopologyContext; -import backtype.storm.topology.base.BaseRichBolt; -import org.apache.storm.jdbc.common.ConnectionProvider; -import org.apache.storm.jdbc.common.JdbcClient; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Map; - -public abstract class AbstractJdbcBolt extends BaseRichBolt { - private static final Logger LOG = LoggerFactory.getLogger(AbstractJdbcBolt.class); - - protected OutputCollector collector; - - protected transient JdbcClient jdbcClient; - protected String configKey; - protected Integer queryTimeoutSecs; - protected ConnectionProvider connectionProvider; - - @Override - public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) { - this.collector = collector; - - connectionProvider.prepare(); - - if(queryTimeoutSecs == null) { - queryTimeoutSecs = Integer.parseInt(map.get(Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS).toString()); - } - - this.jdbcClient = new JdbcClient(connectionProvider, queryTimeoutSecs); - } - - public AbstractJdbcBolt(ConnectionProvider connectionProvider) { - this.connectionProvider = connectionProvider; - } - - @Override - public void cleanup() { - connectionProvider.cleanup(); - } -} +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.storm.jdbc.bolt; + +import backtype.storm.Config; +import backtype.storm.task.OutputCollector; +import backtype.storm.task.TopologyContext; +import backtype.storm.topology.base.BaseRichBolt; +import org.apache.storm.jdbc.common.ConnectionProvider; +import org.apache.storm.jdbc.common.JdbcClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +public abstract class AbstractJdbcBolt extends BaseRichBolt { + private static final Logger LOG = LoggerFactory.getLogger(AbstractJdbcBolt.class); + + protected OutputCollector collector; + + protected transient JdbcClient jdbcClient; + protected String configKey; + protected Integer queryTimeoutSecs; + protected ConnectionProvider connectionProvider; + + @Override + public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) { + this.collector = collector; + + connectionProvider.prepare(); + + if(queryTimeoutSecs == null) { + queryTimeoutSecs = Integer.parseInt(map.get(Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS).toString()); + } + + this.jdbcClient = new JdbcClient(connectionProvider, queryTimeoutSecs); + } + + public AbstractJdbcBolt(ConnectionProvider connectionProvider) { + this.connectionProvider = connectionProvider; + } + + @Override + public void cleanup() { + connectionProvider.cleanup(); + } +} diff --git a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/HikariCPConnectionProvider.java b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/HikariCPConnectionProvider.java index f11d14cde7..48a9f5bbbf 100644 --- a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/HikariCPConnectionProvider.java +++ b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/HikariCPConnectionProvider.java @@ -1,63 +1,64 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.storm.jdbc.common; - -import com.zaxxer.hikari.HikariConfig; -import com.zaxxer.hikari.HikariDataSource; - -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Map; -import java.util.Properties; - -public class HikariCPConnectionProvider implements ConnectionProvider { - - private Map configMap; - private transient HikariDataSource dataSource; - - public HikariCPConnectionProvider(Map hikariCPConfigMap) { - this.configMap = hikariCPConfigMap; - } - - @Override - public synchronized void prepare() { - if(dataSource == null) { - Properties properties = new Properties(); - properties.putAll(configMap); - HikariConfig config = new HikariConfig(properties); - this.dataSource = new HikariDataSource(config); - this.dataSource.setAutoCommit(false); - } - } - - @Override - public Connection getConnection() { - try { - return this.dataSource.getConnection(); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public void cleanup() { - if(dataSource != null) { - dataSource.shutdown(); - } - } -} +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.storm.jdbc.common; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Map; +import java.util.Properties; + +public class HikariCPConnectionProvider implements ConnectionProvider { + + private Map configMap; + private transient HikariDataSource dataSource; + + public HikariCPConnectionProvider(Map hikariCPConfigMap) { + this.configMap = hikariCPConfigMap; + } + + @Override + public synchronized void prepare() { + if(dataSource == null) { + Properties properties = new Properties(); + properties.putAll(configMap); + HikariConfig config = new HikariConfig(properties); + config.setConnectionTestQuery("select 1"); + this.dataSource = new HikariDataSource(config); + this.dataSource.setAutoCommit(false); + } + } + + @Override + public Connection getConnection() { + try { + return this.dataSource.getConnection(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + @Override + public void cleanup() { + if(dataSource != null) { + dataSource.shutdown(); + } + } +} diff --git a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/JdbcClient.java b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/JdbcClient.java index 5d3caebcd6..ad8848fd2a 100644 --- a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/JdbcClient.java +++ b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/common/JdbcClient.java @@ -1,282 +1,419 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.storm.jdbc.common; - -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.Date; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.Time; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.base.Function; -import com.google.common.base.Joiner; -import com.google.common.collect.Collections2; -import com.google.common.collect.Lists; - -public class JdbcClient { - private static final Logger LOG = LoggerFactory.getLogger(JdbcClient.class); - - protected ConnectionProvider connectionProvider; - protected int queryTimeoutSecs; - - public JdbcClient(ConnectionProvider connectionProvider, int queryTimeoutSecs) { - this.connectionProvider = connectionProvider; - this.queryTimeoutSecs = queryTimeoutSecs; - } - - public void insert(String tableName, List> columnLists) { - String query = constructInsertQuery(tableName, columnLists); - executeInsertQuery(query, columnLists); - } - - public void executeInsertQuery(String query, List> columnLists) { - Connection connection = null; - try { - connection = connectionProvider.getConnection(); - boolean autoCommit = connection.getAutoCommit(); - if(autoCommit) { - connection.setAutoCommit(false); - } - - LOG.debug("Executing query {}", query); - - PreparedStatement preparedStatement = connection.prepareStatement(query); - if(queryTimeoutSecs > 0) { - preparedStatement.setQueryTimeout(queryTimeoutSecs); - } - - for(List columnList : columnLists) { - setPreparedStatementParams(preparedStatement, columnList); - preparedStatement.addBatch(); - } - - int[] results = preparedStatement.executeBatch(); - if(Arrays.asList(results).contains(Statement.EXECUTE_FAILED)) { - connection.rollback(); - throw new RuntimeException("failed at least one sql statement in the batch, operation rolled back."); - } else { - try { - connection.commit(); - } catch (SQLException e) { - throw new RuntimeException("Failed to commit insert query " + query, e); - } - } - } catch (SQLException e) { - throw new RuntimeException("Failed to execute insert query " + query, e); - } finally { - closeConnection(connection); - } - } - - private String constructInsertQuery(String tableName, List> columnLists) { - StringBuilder sb = new StringBuilder(); - sb.append("Insert into ").append(tableName).append(" ("); - Collection columnNames = Collections2.transform(columnLists.get(0), new Function() { - @Override - public String apply(Column input) { - return input.getColumnName(); - } - }); - String columns = Joiner.on(",").join(columnNames); - sb.append(columns).append(") values ( "); - - String placeHolders = StringUtils.chop(StringUtils.repeat("?,", columnNames.size())); - sb.append(placeHolders).append(")"); - - return sb.toString(); - } - - public List> select(String sqlQuery, List queryParams) { - Connection connection = null; - try { - connection = connectionProvider.getConnection(); - PreparedStatement preparedStatement = connection.prepareStatement(sqlQuery); - if(queryTimeoutSecs > 0) { - preparedStatement.setQueryTimeout(queryTimeoutSecs); - } - setPreparedStatementParams(preparedStatement, queryParams); - ResultSet resultSet = preparedStatement.executeQuery(); - List> rows = Lists.newArrayList(); - while(resultSet.next()){ - ResultSetMetaData metaData = resultSet.getMetaData(); - int columnCount = metaData.getColumnCount(); - List row = Lists.newArrayList(); - for(int i=1 ; i <= columnCount; i++) { - String columnLabel = metaData.getColumnLabel(i); - int columnType = metaData.getColumnType(i); - Class columnJavaType = Util.getJavaType(columnType); - if (columnJavaType.equals(String.class)) { - row.add(new Column(columnLabel, resultSet.getString(columnLabel), columnType)); - } else if (columnJavaType.equals(Integer.class)) { - row.add(new Column(columnLabel, resultSet.getInt(columnLabel), columnType)); - } else if (columnJavaType.equals(Double.class)) { - row.add(new Column(columnLabel, resultSet.getDouble(columnLabel), columnType)); - } else if (columnJavaType.equals(Float.class)) { - row.add(new Column(columnLabel, resultSet.getFloat(columnLabel), columnType)); - } else if (columnJavaType.equals(Short.class)) { - row.add(new Column(columnLabel, resultSet.getShort(columnLabel), columnType)); - } else if (columnJavaType.equals(Boolean.class)) { - row.add(new Column(columnLabel, resultSet.getBoolean(columnLabel), columnType)); - } else if (columnJavaType.equals(byte[].class)) { - row.add(new Column(columnLabel, resultSet.getBytes(columnLabel), columnType)); - } else if (columnJavaType.equals(Long.class)) { - row.add(new Column(columnLabel, resultSet.getLong(columnLabel), columnType)); - } else if (columnJavaType.equals(Date.class)) { - row.add(new Column(columnLabel, resultSet.getDate(columnLabel), columnType)); - } else if (columnJavaType.equals(Time.class)) { - row.add(new Column