in adb2client/src/main/java/com/alibaba/cloud/analyticdb/adbclient/AdbClient.java [813:955]
private void prepareColumnTypeValue(PreparedStatement statement, int columnSqltype, String column, int preparedPatamIndex, String columnName, String tableName) throws SQLException {
java.util.Date utilDate;
switch (columnSqltype) {
case Types.CHAR:
case Types.NCHAR:
case Types.CLOB:
case Types.NCLOB:
case Types.VARCHAR:
case Types.LONGVARCHAR:
case Types.NVARCHAR:
case Types.LONGNVARCHAR:
statement.setString(preparedPatamIndex + 1, column);
break;
case Types.SMALLINT:
case Types.INTEGER:
case Types.BIGINT:
case Types.REAL:
if (databaseConfig.getEmptyAsNull() && "".equals(column) || column == null) {
statement.setNull(preparedPatamIndex + 1, Types.BIGINT);
} else {
statement.setLong(preparedPatamIndex + 1, Long.parseLong(column.trim()));
}
break;
case Types.DECIMAL:
case Types.NUMERIC:
if (databaseConfig.getEmptyAsNull() && "".equals(column) || column == null) {
statement.setNull(preparedPatamIndex + 1, Types.DECIMAL);
} else {
statement.setBigDecimal(preparedPatamIndex + 1, new BigDecimal(column.trim()));
}
break;
case Types.FLOAT:
case Types.DOUBLE:
if (databaseConfig.getEmptyAsNull() && "".equals(column) || column == null) {
statement.setNull(preparedPatamIndex + 1, Types.DOUBLE);
} else {
statement.setDouble(preparedPatamIndex + 1, Double.parseDouble(column.trim()));
}
break;
//tinyint is a little special in some database like mysql {boolean->tinyint(1)}
case Types.TINYINT:
if (databaseConfig.getEmptyAsNull() && "".equals(column) || null == column) {
statement.setNull(preparedPatamIndex + 1, Types.BIGINT);
} else {
statement.setLong(preparedPatamIndex + 1, Long.valueOf(column.trim()));
}
break;
case Types.DATE:
java.sql.Date sqlDate = null;
try {
if (column == null || "".equals(column)) {
utilDate = null;
} else {
utilDate = new SimpleDateFormat("yyyy-MM-dd").parse(column.trim());
}
} catch (Exception e) {
if (e instanceof ParseException) {
try {
utilDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(column.trim());
} catch (Exception ex) {
throw new SQLException(String.format(
"Date transform error:[%s]", column), ex);
}
} else {
throw new SQLException(String.format(
"Date transform error:[%s]", column), e);
}
}
if (null != utilDate) {
sqlDate = new java.sql.Date(utilDate.getTime());
}
statement.setDate(preparedPatamIndex + 1, sqlDate);
break;
case Types.TIME:
Time sqlTime = null;
try {
if (column == null || "".equals(column)) {
utilDate = null;
} else {
utilDate = new SimpleDateFormat("HH:mm:ss").parse(column.trim());
}
} catch (Exception e) {
if (e instanceof ParseException) {
try {
utilDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(column.trim());
} catch (Exception ex) {
throw new SQLException(String.format(
"TIME transform error:[%s]", column), ex);
}
} else {
throw new SQLException(String.format(
"TIME transform error:[%s]", column));
}
}
if (null != utilDate) {
sqlTime = new Time(utilDate.getTime());
}
statement.setTime(preparedPatamIndex + 1, sqlTime);
break;
case Types.TIMESTAMP:
Timestamp sqlTimestamp = null;
try {
if (column == null || "".equals(column)) {
utilDate = null;
} else {
utilDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(column.trim());
}
} catch (Exception e) {
throw new SQLException(String.format(
"TIMESTAMP transform error:[%s]", column));
}
if (null != utilDate) {
sqlTimestamp = new Timestamp(utilDate.getTime());
}
statement.setTimestamp(preparedPatamIndex + 1, sqlTimestamp);
break;
case Types.BOOLEAN:
//case Types.BIT: ads 没有bit
if (null == column || "".equals(column) && databaseConfig.getEmptyAsNull()) {
statement.setNull(preparedPatamIndex + 1, Types.BOOLEAN);
} else {
statement.setBoolean(preparedPatamIndex + 1, Boolean.parseBoolean(column.trim()));
}
break;
default:
// statement.setString(preparedPatamIndex + 1, column);
Pair<Integer, String> columnMetaPair = this.configColumnsMetaData.get(tableName).get(columnName);
throw new AdbClientException(AdbClientException.CONFIG_ERROR, String.format("Your config is illegal. Because ADB does not support this type: column:[%s], type:[%s], Java type:[%s].",
columnName, columnMetaPair.getRight(), columnMetaPair.getLeft()), null);
}
}