You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/09/29 08:32:53 UTC
camel git commit: CAMEL-9063: Add useGetBytesForBlob option in
camel-jdbc. Thanks to Joao Antonio for the patch.
Repository: camel
Updated Branches:
refs/heads/master 1af80c07b -> 036abcc2f
CAMEL-9063: Add useGetBytesForBlob option in camel-jdbc. Thanks to Joao Antonio for the patch.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/036abcc2
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/036abcc2
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/036abcc2
Branch: refs/heads/master
Commit: 036abcc2f71e7223e356fc0b00458c8493306ce8
Parents: 1af80c0
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 29 08:34:32 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 29 08:34:32 2015 +0200
----------------------------------------------------------------------
.../apache/camel/component/jdbc/JdbcEndpoint.java | 18 +++++++++++++++++-
.../apache/camel/component/jdbc/JdbcProducer.java | 4 ++--
.../camel/component/jdbc/ResultSetIterator.java | 14 ++++++++++++--
3 files changed, 31 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/036abcc2/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
index d1f037e..aedd920 100755
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
@@ -37,7 +37,8 @@ public class JdbcEndpoint extends DefaultEndpoint {
private DataSource dataSource;
- @UriPath @Metadata(required = "true")
+ @UriPath
+ @Metadata(required = "true")
private String dataSourceName;
@UriParam
private int readSize;
@@ -49,6 +50,8 @@ public class JdbcEndpoint extends DefaultEndpoint {
@UriParam(defaultValue = "true")
private boolean useJDBC4ColumnNameAndLabelSemantics = true;
@UriParam
+ private boolean useGetBytesForBlob;
+ @UriParam
private JdbcPrepareStatementStrategy prepareStatementStrategy = new DefaultJdbcPrepareStatementStrategy();
@UriParam(defaultValue = "true")
private boolean allowNamedParameters = true;
@@ -241,6 +244,19 @@ public class JdbcEndpoint extends DefaultEndpoint {
this.beanRowMapper = beanRowMapper;
}
+ public boolean isUseGetBytesForBlob() {
+ return this.useGetBytesForBlob;
+ }
+
+ /**
+ * To read BLOB columns as bytes instead of string data.
+ * <p/>
+ * This may be needed for certain databases such as Oracle where you must read BLOB columns as bytes.
+ */
+ public void setUseGetBytesForBlob(boolean useGetBytesForBlob) {
+ this.useGetBytesForBlob = useGetBytesForBlob;
+ }
+
@Override
protected String createEndpointUri() {
return dataSourceName != null ? "jdbc:" + dataSourceName : "jdbc";
http://git-wip-us.apache.org/repos/asf/camel/blob/036abcc2/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
index 13ecade..7efe001 100644
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
@@ -291,7 +291,7 @@ public class JdbcProducer extends DefaultProducer {
*/
protected void setGeneratedKeys(Exchange exchange, Connection conn, ResultSet generatedKeys) throws SQLException {
if (generatedKeys != null) {
- ResultSetIterator iterator = new ResultSetIterator(conn, generatedKeys, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics());
+ ResultSetIterator iterator = new ResultSetIterator(conn, generatedKeys, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics(), getEndpoint().isUseGetBytesForBlob());
List<Map<String, Object>> data = extractRows(iterator);
exchange.getOut().setHeader(JdbcConstants.JDBC_GENERATED_KEYS_ROW_COUNT, data.size());
@@ -307,7 +307,7 @@ public class JdbcProducer extends DefaultProducer {
protected boolean setResultSet(Exchange exchange, Connection conn, ResultSet rs) throws SQLException {
boolean answer = true;
- ResultSetIterator iterator = new ResultSetIterator(conn, rs, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics());
+ ResultSetIterator iterator = new ResultSetIterator(conn, rs, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics(), getEndpoint().isUseGetBytesForBlob());
// preserve headers
exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders());
http://git-wip-us.apache.org/repos/asf/camel/blob/036abcc2/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java
----------------------------------------------------------------------
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java
index 8055550..633e182 100644
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java
@@ -41,12 +41,14 @@ public class ResultSetIterator implements Iterator<Map<String, Object>> {
private final Statement statement;
private final ResultSet resultSet;
private final Column[] columns;
+ private final boolean useGetBytes;
private final AtomicBoolean closed = new AtomicBoolean();
- public ResultSetIterator(Connection conn, ResultSet resultSet, boolean isJDBC4) throws SQLException {
+ public ResultSetIterator(Connection conn, ResultSet resultSet, boolean isJDBC4, boolean useGetBytes) throws SQLException {
this.resultSet = resultSet;
this.statement = this.resultSet.getStatement();
this.connection = conn;
+ this.useGetBytes = useGetBytes;
ResultSetMetaData metaData = resultSet.getMetaData();
columns = new Column[metaData.getColumnCount()];
@@ -78,7 +80,11 @@ public class ResultSetIterator implements Iterator<Map<String, Object>> {
try {
Map<String, Object> row = new LinkedHashMap<String, Object>();
for (Column column : columns) {
- row.put(column.getName(), column.getValue(resultSet));
+ if (useGetBytes && column instanceof BlobColumn) {
+ row.put(column.getName(), ((BlobColumn) column).getBytes(resultSet));
+ } else {
+ row.put(column.getName(), column.getValue(resultSet));
+ }
}
loadNext();
return row;
@@ -203,5 +209,9 @@ public class ResultSetIterator implements Iterator<Map<String, Object>> {
public Object getValue(ResultSet resultSet) throws SQLException {
return resultSet.getString(columnNumber);
}
+
+ public Object getBytes(ResultSet resultSet) throws SQLException {
+ return resultSet.getBytes(columnNumber);
+ }
}
}