private void fillPreparedStatement()

in adb3client/src/main/java/com/alibaba/cloud/analyticdb/adb3client/impl/UpsertStatementBuilder.java [336:445]


	private void fillPreparedStatement(PreparedStatement ps, int index, Object obj, Column column) throws SQLException {
		switch (column.getType()) {
			case Types.OTHER:
				if ("boolean".equalsIgnoreCase(column.getTypeName())) {
					if (obj instanceof Boolean) {
						ps.setBoolean(index, (Boolean) obj);
					} else {
						ps.setString(index, obj == null ? null : String.valueOf(obj));
					}
				} else if (obj instanceof String) {
					ps.setString(index, (String) obj);
				} else {
					ps.setObject(index, obj, column.getType());
				}
				break;
			case Types.LONGNVARCHAR:
			case Types.VARCHAR:
			case Types.CHAR:
				if (obj == null) {
					ps.setNull(index, column.getType());
				} else {
					ps.setObject(index, removeU0000(obj.toString()), column.getType());
				}
				break;
			case Types.BIT:
				if ("bit".equals(column.getTypeName())) {
					if (obj instanceof Boolean) {
						ps.setString(index, (Boolean) obj ? "1" : "0");
					} else {
						ps.setString(index, obj == null ? null : String.valueOf(obj));
					}
				} else {
					ps.setObject(index, obj, column.getType());
				}
				break;
			case Types.TIMESTAMP_WITH_TIMEZONE:
			case Types.TIMESTAMP:
				if (obj instanceof Number && inputNumberAsEpochMsForDatetimeColumn) {
					ps.setObject(index, new Timestamp(((Number) obj).longValue()), column.getType());
				} else if (obj instanceof String && inputStringAsEpochMsForDatetimeColumn) {
					long l = 0L;
					try {
						l = Long.parseLong((String) obj);
						ps.setObject(index, new Timestamp(l), column.getType());
					} catch (NumberFormatException e) {
						if (MYSQL_0000.equals(obj)) {
							ps.setObject(index, new Timestamp(0), column.getType());
						} else {
							ps.setObject(index, obj, column.getType());
						}
					}
				} else {
					if (MYSQL_0000.equals(obj)) {
						ps.setObject(index, new Timestamp(0), column.getType());
					} else {
						setTimeObject(ps, index, obj, column.getType());
					}
				}
				break;
			case Types.DATE:
				if (obj instanceof Number && inputNumberAsEpochMsForDatetimeColumn) {
					ps.setObject(index, new java.sql.Date(((Number) obj).longValue()), column.getType());
				} else if (obj instanceof String && inputStringAsEpochMsForDatetimeColumn) {
					long l = 0L;
					try {
						l = Long.parseLong((String) obj);
						ps.setObject(index, new java.sql.Date(l), column.getType());
					} catch (NumberFormatException e) {
						if (MYSQL_0000.equals(obj)) {
							ps.setObject(index, new java.sql.Date(0), column.getType());
						} else {
							ps.setObject(index, obj, column.getType());
						}
					}
				} else {
					if (MYSQL_0000.equals(obj)) {
						ps.setObject(index, new java.sql.Date(0), column.getType());
					} else {
						setTimeObject(ps, index, obj, column.getType());
					}
				}
				break;
			case Types.TIME_WITH_TIMEZONE:
			case Types.TIME:
				if (obj instanceof Number && inputNumberAsEpochMsForDatetimeColumn) {
					ps.setObject(index, new Time(((Number) obj).longValue()), column.getType());
				} else if (obj instanceof String && inputStringAsEpochMsForDatetimeColumn) {
					long l = 0L;
					try {
						l = Long.parseLong((String) obj);
						ps.setObject(index, new Time(l), column.getType());
					} catch (NumberFormatException e) {
						if (MYSQL_0000.equals(obj)) {
							ps.setObject(index, new Time(0), column.getType());
						} else {
							ps.setObject(index, obj, column.getType());
						}
					}
				} else {
					if (MYSQL_0000.equals(obj)) {
						ps.setObject(index, new Time(0), column.getType());
					} else {
						setTimeObject(ps, index, obj, column.getType());
					}
				}
				break;
			default:
				ps.setObject(index, obj, column.getType());
		}
	}