Skip to content

Commit ddca95f

Browse files
authored
[Improve][JDBC] Optimized code style for getting jdbc field types (#6583)
1 parent bac19f2 commit ddca95f

File tree

5 files changed

+72
-80
lines changed

5 files changed

+72
-80
lines changed

Diff for: seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/converter/AbstractJdbcRowConverter.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.apache.seatunnel.api.table.type.SeaTunnelRowType;
2424
import org.apache.seatunnel.common.exception.CommonErrorCodeDeprecated;
2525
import org.apache.seatunnel.connectors.seatunnel.jdbc.exception.JdbcConnectorException;
26-
import org.apache.seatunnel.connectors.seatunnel.jdbc.utils.JdbcUtils;
26+
import org.apache.seatunnel.connectors.seatunnel.jdbc.utils.JdbcFieldTypeUtils;
2727

2828
import lombok.extern.slf4j.Slf4j;
2929

@@ -56,49 +56,49 @@ public SeaTunnelRow toInternal(ResultSet rs, TableSchema tableSchema) throws SQL
5656
int resultSetIndex = fieldIndex + 1;
5757
switch (seaTunnelDataType.getSqlType()) {
5858
case STRING:
59-
fields[fieldIndex] = JdbcUtils.getString(rs, resultSetIndex);
59+
fields[fieldIndex] = JdbcFieldTypeUtils.getString(rs, resultSetIndex);
6060
break;
6161
case BOOLEAN:
62-
fields[fieldIndex] = JdbcUtils.getBoolean(rs, resultSetIndex);
62+
fields[fieldIndex] = JdbcFieldTypeUtils.getBoolean(rs, resultSetIndex);
6363
break;
6464
case TINYINT:
65-
fields[fieldIndex] = JdbcUtils.getByte(rs, resultSetIndex);
65+
fields[fieldIndex] = JdbcFieldTypeUtils.getByte(rs, resultSetIndex);
6666
break;
6767
case SMALLINT:
68-
fields[fieldIndex] = JdbcUtils.getShort(rs, resultSetIndex);
68+
fields[fieldIndex] = JdbcFieldTypeUtils.getShort(rs, resultSetIndex);
6969
break;
7070
case INT:
71-
fields[fieldIndex] = JdbcUtils.getInt(rs, resultSetIndex);
71+
fields[fieldIndex] = JdbcFieldTypeUtils.getInt(rs, resultSetIndex);
7272
break;
7373
case BIGINT:
74-
fields[fieldIndex] = JdbcUtils.getLong(rs, resultSetIndex);
74+
fields[fieldIndex] = JdbcFieldTypeUtils.getLong(rs, resultSetIndex);
7575
break;
7676
case FLOAT:
77-
fields[fieldIndex] = JdbcUtils.getFloat(rs, resultSetIndex);
77+
fields[fieldIndex] = JdbcFieldTypeUtils.getFloat(rs, resultSetIndex);
7878
break;
7979
case DOUBLE:
80-
fields[fieldIndex] = JdbcUtils.getDouble(rs, resultSetIndex);
80+
fields[fieldIndex] = JdbcFieldTypeUtils.getDouble(rs, resultSetIndex);
8181
break;
8282
case DECIMAL:
83-
fields[fieldIndex] = JdbcUtils.getBigDecimal(rs, resultSetIndex);
83+
fields[fieldIndex] = JdbcFieldTypeUtils.getBigDecimal(rs, resultSetIndex);
8484
break;
8585
case DATE:
86-
Date sqlDate = JdbcUtils.getDate(rs, resultSetIndex);
86+
Date sqlDate = JdbcFieldTypeUtils.getDate(rs, resultSetIndex);
8787
fields[fieldIndex] =
8888
Optional.ofNullable(sqlDate).map(e -> e.toLocalDate()).orElse(null);
8989
break;
9090
case TIME:
9191
fields[fieldIndex] = readTime(rs, resultSetIndex);
9292
break;
9393
case TIMESTAMP:
94-
Timestamp sqlTimestamp = JdbcUtils.getTimestamp(rs, resultSetIndex);
94+
Timestamp sqlTimestamp = JdbcFieldTypeUtils.getTimestamp(rs, resultSetIndex);
9595
fields[fieldIndex] =
9696
Optional.ofNullable(sqlTimestamp)
9797
.map(e -> e.toLocalDateTime())
9898
.orElse(null);
9999
break;
100100
case BYTES:
101-
fields[fieldIndex] = JdbcUtils.getBytes(rs, resultSetIndex);
101+
fields[fieldIndex] = JdbcFieldTypeUtils.getBytes(rs, resultSetIndex);
102102
break;
103103
case NULL:
104104
fields[fieldIndex] = null;
@@ -116,7 +116,7 @@ public SeaTunnelRow toInternal(ResultSet rs, TableSchema tableSchema) throws SQL
116116
}
117117

118118
protected LocalTime readTime(ResultSet rs, int resultSetIndex) throws SQLException {
119-
Time sqlTime = JdbcUtils.getTime(rs, resultSetIndex);
119+
Time sqlTime = JdbcFieldTypeUtils.getTime(rs, resultSetIndex);
120120
return Optional.ofNullable(sqlTime).map(e -> e.toLocalTime()).orElse(null);
121121
}
122122

Diff for: seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/KingbaseJdbcRowConverter.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.apache.seatunnel.connectors.seatunnel.jdbc.exception.JdbcConnectorException;
2626
import org.apache.seatunnel.connectors.seatunnel.jdbc.internal.converter.AbstractJdbcRowConverter;
2727
import org.apache.seatunnel.connectors.seatunnel.jdbc.internal.dialect.DatabaseIdentifier;
28-
import org.apache.seatunnel.connectors.seatunnel.jdbc.utils.JdbcUtils;
28+
import org.apache.seatunnel.connectors.seatunnel.jdbc.utils.JdbcFieldTypeUtils;
2929

3030
import java.math.BigDecimal;
3131
import java.sql.Date;
@@ -56,51 +56,51 @@ public SeaTunnelRow toInternal(ResultSet rs, TableSchema tableSchema) throws SQL
5656
int resultSetIndex = fieldIndex + 1;
5757
switch (seaTunnelDataType.getSqlType()) {
5858
case STRING:
59-
fields[fieldIndex] = JdbcUtils.getString(rs, resultSetIndex);
59+
fields[fieldIndex] = JdbcFieldTypeUtils.getString(rs, resultSetIndex);
6060
break;
6161
case BOOLEAN:
62-
fields[fieldIndex] = JdbcUtils.getBoolean(rs, resultSetIndex);
62+
fields[fieldIndex] = JdbcFieldTypeUtils.getBoolean(rs, resultSetIndex);
6363
break;
6464
case TINYINT:
65-
fields[fieldIndex] = JdbcUtils.getByte(rs, resultSetIndex);
65+
fields[fieldIndex] = JdbcFieldTypeUtils.getByte(rs, resultSetIndex);
6666
break;
6767
case SMALLINT:
68-
fields[fieldIndex] = JdbcUtils.getShort(rs, resultSetIndex);
68+
fields[fieldIndex] = JdbcFieldTypeUtils.getShort(rs, resultSetIndex);
6969
break;
7070
case INT:
71-
fields[fieldIndex] = JdbcUtils.getInt(rs, resultSetIndex);
71+
fields[fieldIndex] = JdbcFieldTypeUtils.getInt(rs, resultSetIndex);
7272
break;
7373
case BIGINT:
74-
fields[fieldIndex] = JdbcUtils.getLong(rs, resultSetIndex);
74+
fields[fieldIndex] = JdbcFieldTypeUtils.getLong(rs, resultSetIndex);
7575
break;
7676
case FLOAT:
77-
fields[fieldIndex] = JdbcUtils.getFloat(rs, resultSetIndex);
77+
fields[fieldIndex] = JdbcFieldTypeUtils.getFloat(rs, resultSetIndex);
7878
break;
7979
case DOUBLE:
80-
fields[fieldIndex] = JdbcUtils.getDouble(rs, resultSetIndex);
80+
fields[fieldIndex] = JdbcFieldTypeUtils.getDouble(rs, resultSetIndex);
8181
break;
8282
case DECIMAL:
83-
fields[fieldIndex] = JdbcUtils.getBigDecimal(rs, resultSetIndex);
83+
fields[fieldIndex] = JdbcFieldTypeUtils.getBigDecimal(rs, resultSetIndex);
8484
break;
8585
case DATE:
86-
Date sqlDate = JdbcUtils.getDate(rs, resultSetIndex);
86+
Date sqlDate = JdbcFieldTypeUtils.getDate(rs, resultSetIndex);
8787
fields[fieldIndex] =
8888
Optional.ofNullable(sqlDate).map(Date::toLocalDate).orElse(null);
8989
break;
9090
case TIME:
91-
Time sqlTime = JdbcUtils.getTime(rs, resultSetIndex);
91+
Time sqlTime = JdbcFieldTypeUtils.getTime(rs, resultSetIndex);
9292
fields[fieldIndex] =
9393
Optional.ofNullable(sqlTime).map(Time::toLocalTime).orElse(null);
9494
break;
9595
case TIMESTAMP:
96-
Timestamp sqlTimestamp = JdbcUtils.getTimestamp(rs, resultSetIndex);
96+
Timestamp sqlTimestamp = JdbcFieldTypeUtils.getTimestamp(rs, resultSetIndex);
9797
fields[fieldIndex] =
9898
Optional.ofNullable(sqlTimestamp)
9999
.map(Timestamp::toLocalDateTime)
100100
.orElse(null);
101101
break;
102102
case BYTES:
103-
fields[fieldIndex] = JdbcUtils.getBytes(rs, resultSetIndex);
103+
fields[fieldIndex] = JdbcFieldTypeUtils.getBytes(rs, resultSetIndex);
104104
break;
105105
case NULL:
106106
fields[fieldIndex] = null;

Diff for: seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/psql/PostgresJdbcRowConverter.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import org.apache.seatunnel.connectors.seatunnel.jdbc.exception.JdbcConnectorException;
2727
import org.apache.seatunnel.connectors.seatunnel.jdbc.internal.converter.AbstractJdbcRowConverter;
2828
import org.apache.seatunnel.connectors.seatunnel.jdbc.internal.dialect.DatabaseIdentifier;
29-
import org.apache.seatunnel.connectors.seatunnel.jdbc.utils.JdbcUtils;
29+
import org.apache.seatunnel.connectors.seatunnel.jdbc.utils.JdbcFieldTypeUtils;
3030

3131
import java.sql.Array;
3232
import java.sql.Date;
@@ -65,52 +65,52 @@ public SeaTunnelRow toInternal(ResultSet rs, TableSchema tableSchema) throws SQL
6565
? null
6666
: rs.getObject(resultSetIndex).toString();
6767
} else {
68-
fields[fieldIndex] = JdbcUtils.getString(rs, resultSetIndex);
68+
fields[fieldIndex] = JdbcFieldTypeUtils.getString(rs, resultSetIndex);
6969
}
7070
break;
7171
case BOOLEAN:
72-
fields[fieldIndex] = JdbcUtils.getBoolean(rs, resultSetIndex);
72+
fields[fieldIndex] = JdbcFieldTypeUtils.getBoolean(rs, resultSetIndex);
7373
break;
7474
case TINYINT:
75-
fields[fieldIndex] = JdbcUtils.getByte(rs, resultSetIndex);
75+
fields[fieldIndex] = JdbcFieldTypeUtils.getByte(rs, resultSetIndex);
7676
break;
7777
case SMALLINT:
78-
fields[fieldIndex] = JdbcUtils.getShort(rs, resultSetIndex);
78+
fields[fieldIndex] = JdbcFieldTypeUtils.getShort(rs, resultSetIndex);
7979
break;
8080
case INT:
81-
fields[fieldIndex] = JdbcUtils.getInt(rs, resultSetIndex);
81+
fields[fieldIndex] = JdbcFieldTypeUtils.getInt(rs, resultSetIndex);
8282
break;
8383
case BIGINT:
84-
fields[fieldIndex] = JdbcUtils.getLong(rs, resultSetIndex);
84+
fields[fieldIndex] = JdbcFieldTypeUtils.getLong(rs, resultSetIndex);
8585
break;
8686
case FLOAT:
87-
fields[fieldIndex] = JdbcUtils.getFloat(rs, resultSetIndex);
87+
fields[fieldIndex] = JdbcFieldTypeUtils.getFloat(rs, resultSetIndex);
8888
break;
8989
case DOUBLE:
90-
fields[fieldIndex] = JdbcUtils.getDouble(rs, resultSetIndex);
90+
fields[fieldIndex] = JdbcFieldTypeUtils.getDouble(rs, resultSetIndex);
9191
break;
9292
case DECIMAL:
93-
fields[fieldIndex] = JdbcUtils.getBigDecimal(rs, resultSetIndex);
93+
fields[fieldIndex] = JdbcFieldTypeUtils.getBigDecimal(rs, resultSetIndex);
9494
break;
9595
case DATE:
96-
Date sqlDate = JdbcUtils.getDate(rs, resultSetIndex);
96+
Date sqlDate = JdbcFieldTypeUtils.getDate(rs, resultSetIndex);
9797
fields[fieldIndex] =
9898
Optional.ofNullable(sqlDate).map(e -> e.toLocalDate()).orElse(null);
9999
break;
100100
case TIME:
101-
Time sqlTime = JdbcUtils.getTime(rs, resultSetIndex);
101+
Time sqlTime = JdbcFieldTypeUtils.getTime(rs, resultSetIndex);
102102
fields[fieldIndex] =
103103
Optional.ofNullable(sqlTime).map(e -> e.toLocalTime()).orElse(null);
104104
break;
105105
case TIMESTAMP:
106-
Timestamp sqlTimestamp = JdbcUtils.getTimestamp(rs, resultSetIndex);
106+
Timestamp sqlTimestamp = JdbcFieldTypeUtils.getTimestamp(rs, resultSetIndex);
107107
fields[fieldIndex] =
108108
Optional.ofNullable(sqlTimestamp)
109109
.map(e -> e.toLocalDateTime())
110110
.orElse(null);
111111
break;
112112
case BYTES:
113-
fields[fieldIndex] = JdbcUtils.getBytes(rs, resultSetIndex);
113+
fields[fieldIndex] = JdbcFieldTypeUtils.getBytes(rs, resultSetIndex);
114114
break;
115115
case NULL:
116116
fields[fieldIndex] = null;

Diff for: seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/sqlserver/SqlserverJdbcRowConverter.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.apache.seatunnel.connectors.seatunnel.jdbc.exception.JdbcConnectorException;
2626
import org.apache.seatunnel.connectors.seatunnel.jdbc.internal.converter.AbstractJdbcRowConverter;
2727
import org.apache.seatunnel.connectors.seatunnel.jdbc.internal.dialect.DatabaseIdentifier;
28-
import org.apache.seatunnel.connectors.seatunnel.jdbc.utils.JdbcUtils;
28+
import org.apache.seatunnel.connectors.seatunnel.jdbc.utils.JdbcFieldTypeUtils;
2929

3030
import java.math.BigDecimal;
3131
import java.sql.PreparedStatement;
@@ -46,7 +46,7 @@ public String converterName() {
4646

4747
@Override
4848
protected LocalTime readTime(ResultSet rs, int resultSetIndex) throws SQLException {
49-
Timestamp sqlTime = JdbcUtils.getTimestamp(rs, resultSetIndex);
49+
Timestamp sqlTime = JdbcFieldTypeUtils.getTimestamp(rs, resultSetIndex);
5050
return Optional.ofNullable(sqlTime)
5151
.map(e -> e.toLocalDateTime().toLocalTime())
5252
.orElse(null);

Diff for: seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/utils/JdbcUtils.java renamed to seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/utils/JdbcFieldTypeUtils.java

+28-36
Original file line numberDiff line numberDiff line change
@@ -23,61 +23,40 @@
2323
import java.sql.Time;
2424
import java.sql.Timestamp;
2525

26-
public final class JdbcUtils {
26+
public final class JdbcFieldTypeUtils {
2727

28-
private JdbcUtils() {}
29-
30-
public static String getString(ResultSet resultSet, int columnIndex) throws SQLException {
31-
return resultSet.getString(columnIndex);
32-
}
28+
private JdbcFieldTypeUtils() {}
3329

3430
public static Boolean getBoolean(ResultSet resultSet, int columnIndex) throws SQLException {
35-
if (null == resultSet.getObject(columnIndex)) {
36-
return null;
37-
}
38-
return resultSet.getBoolean(columnIndex);
31+
return getNullableValue(resultSet, columnIndex, ResultSet::getBoolean);
3932
}
4033

4134
public static Byte getByte(ResultSet resultSet, int columnIndex) throws SQLException {
42-
if (null == resultSet.getObject(columnIndex)) {
43-
return null;
44-
}
45-
return resultSet.getByte(columnIndex);
35+
return getNullableValue(resultSet, columnIndex, ResultSet::getByte);
4636
}
4737

4838
public static Short getShort(ResultSet resultSet, int columnIndex) throws SQLException {
49-
if (null == resultSet.getObject(columnIndex)) {
50-
return null;
51-
}
52-
return resultSet.getShort(columnIndex);
39+
return getNullableValue(resultSet, columnIndex, ResultSet::getShort);
5340
}
5441

5542
public static Integer getInt(ResultSet resultSet, int columnIndex) throws SQLException {
56-
if (null == resultSet.getObject(columnIndex)) {
57-
return null;
58-
}
59-
return resultSet.getInt(columnIndex);
43+
return getNullableValue(resultSet, columnIndex, ResultSet::getInt);
6044
}
6145

6246
public static Long getLong(ResultSet resultSet, int columnIndex) throws SQLException {
63-
if (null == resultSet.getObject(columnIndex)) {
64-
return null;
65-
}
66-
return resultSet.getLong(columnIndex);
47+
return getNullableValue(resultSet, columnIndex, ResultSet::getLong);
6748
}
6849

6950
public static Float getFloat(ResultSet resultSet, int columnIndex) throws SQLException {
70-
if (null == resultSet.getObject(columnIndex)) {
71-
return null;
72-
}
73-
return resultSet.getFloat(columnIndex);
51+
return getNullableValue(resultSet, columnIndex, ResultSet::getFloat);
7452
}
7553

7654
public static Double getDouble(ResultSet resultSet, int columnIndex) throws SQLException {
77-
if (null == resultSet.getObject(columnIndex)) {
78-
return null;
79-
}
80-
return resultSet.getDouble(columnIndex);
55+
return getNullableValue(resultSet, columnIndex, ResultSet::getDouble);
56+
}
57+
58+
public static String getString(ResultSet resultSet, int columnIndex) throws SQLException {
59+
return resultSet.getString(columnIndex);
8160
}
8261

8362
public static BigDecimal getBigDecimal(ResultSet resultSet, int columnIndex)
@@ -98,9 +77,22 @@ public static Timestamp getTimestamp(ResultSet resultSet, int columnIndex) throw
9877
}
9978

10079
public static byte[] getBytes(ResultSet resultSet, int columnIndex) throws SQLException {
101-
if (null == resultSet.getObject(columnIndex)) {
80+
return resultSet.getBytes(columnIndex);
81+
}
82+
83+
private static <T> T getNullableValue(
84+
ResultSet resultSet,
85+
int columnIndex,
86+
ThrowingFunction<ResultSet, T, SQLException> getter)
87+
throws SQLException {
88+
if (resultSet.getObject(columnIndex) == null) {
10289
return null;
10390
}
104-
return resultSet.getBytes(columnIndex);
91+
return getter.apply(resultSet, columnIndex);
92+
}
93+
94+
@FunctionalInterface
95+
private interface ThrowingFunction<T, R, E extends Exception> {
96+
R apply(T t, int columnIndex) throws E;
10597
}
10698
}

0 commit comments

Comments
 (0)