private void prepareColumnTypeValue()

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);
        }
    }