From 0b671dabaaf2a3e9d947139a37b4833d724c0d59 Mon Sep 17 00:00:00 2001 From: otxiyin Date: Tue, 13 Sep 2022 20:03:35 +0800 Subject: [PATCH] [hotfix-#1253][db2] db2 support clob type --- .../db2/converter/Db2ColumnConverter.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/chunjun-connectors/chunjun-connector-db2/src/main/java/com/dtstack/chunjun/connector/db2/converter/Db2ColumnConverter.java b/chunjun-connectors/chunjun-connector-db2/src/main/java/com/dtstack/chunjun/connector/db2/converter/Db2ColumnConverter.java index d142d5106e..53d03c0e1f 100644 --- a/chunjun-connectors/chunjun-connector-db2/src/main/java/com/dtstack/chunjun/connector/db2/converter/Db2ColumnConverter.java +++ b/chunjun-connectors/chunjun-connector-db2/src/main/java/com/dtstack/chunjun/connector/db2/converter/Db2ColumnConverter.java @@ -31,9 +31,15 @@ import org.apache.flink.table.types.logical.LogicalType; import org.apache.flink.table.types.logical.RowType; +import com.ibm.db2.jcc.am.c9; + +import java.io.IOException; +import java.io.Reader; import java.math.BigDecimal; import java.sql.Blob; +import java.sql.Clob; import java.sql.Date; +import java.sql.SQLException; import java.sql.Time; import java.sql.Timestamp; @@ -75,7 +81,14 @@ protected IDeserializationConverter createInternalConverter(LogicalType type) { return val -> new BigDecimalColumn((BigDecimal) val); case CHAR: case VARCHAR: - return val -> new StringColumn((String) val); + return val -> { + // db2 clob type + if (val instanceof c9) { + Clob clob = (Clob) val; + return new StringColumn(convertClob(clob)); + } + return new StringColumn((String) val); + }; case DATE: return val -> new SqlDateColumn((Date) val); case TIME_WITHOUT_TIME_ZONE: @@ -99,4 +112,16 @@ protected IDeserializationConverter createInternalConverter(LogicalType type) { throw new UnsupportedOperationException("Unsupported type:" + type); } } + + public static String convertClob(Clob clob) throws SQLException, IOException { + StringBuffer buffer = new StringBuffer(); + try (Reader r = clob.getCharacterStream()) { + int ch; + while ((ch = r.read()) != -1) { + buffer.append("" + (char) ch); + } + } + clob.free(); + return buffer.toString(); + } }