| | |
| | | while (rs.next()) { |
| | | sql.append("("); |
| | | for (int index = 0; index < fields.length; index++) { |
| | | String value = rs.getString(fields[index]); |
| | | String fieldName = fields[index].trim(); |
| | | String value = rs.getString(fieldName); |
| | | if (value == null) { |
| | | sql.append("NULL"); // 显式处理 NULL 值 |
| | | } else if (isGeometryField(fieldName)) { |
| | | // 处理几何类型字段,使用 ST_GeomFromText 函数 |
| | | logger.debug("Processing geometry field: " + fieldName + " with value: " + value); |
| | | sql.append(handleGeometryData(value)); |
| | | } else { |
| | | sql.append("'").append(value).append("'"); // 字符串值加引号 |
| | | } |
| | |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 判断是否为几何类型字段 |
| | | * |
| | | * @param fieldName 字段名 |
| | | * @return 是否为几何类型字段 |
| | | */ |
| | | private boolean isGeometryField(String fieldName) { |
| | | // 常见的几何类型字段名 |
| | | return fieldName.equalsIgnoreCase("geom") || |
| | | fieldName.contains("geometry") || |
| | | fieldName.contains("geom_"); |
| | | } |
| | | |
| | | /** |
| | | * 处理几何类型数据 |
| | | * |
| | | * @param value 几何数据值 |
| | | * @return 处理后的几何数据 |
| | | */ |
| | | private String handleGeometryData(String value) { |
| | | logger.debug("原始几何数据值: " + value); |
| | | |
| | | if (value == null || value.isEmpty()) { |
| | | logger.debug("几何数据为空,返回 NULL"); |
| | | return "NULL"; |
| | | } |
| | | |
| | | // 尝试不同的几何数据格式处理 |
| | | try { |
| | | // 直接尝试使用 ST_GeomFromText 函数来转换几何数据 |
| | | // 不再检查是否为标准的 WKT 格式,因为 MySQL 的 ST_AsText 函数已经保证返回标准的 WKT 格式 |
| | | logger.debug("尝试使用 ST_GeomFromText 函数转换几何数据: " + value.substring(0, Math.min(value.length(), 50)) + "..."); |
| | | return "ST_GeomFromText('" + value + "')"; |
| | | } catch (Exception e) { |
| | | logger.error("处理几何数据时出错: " + e.getMessage() + ", 原始值: " + value); |
| | | return "NULL"; // 出错时返回 NULL |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |