| | |
| | | |
| | | @Override |
| | | public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException { |
| | | |
| | | if (s == null || s.isEmpty()) { |
| | | preparedStatement.setNull(i, jdbcType.TYPE_CODE); |
| | | return; |
| | | } |
| | | |
| | | Geometry geo = null; |
| | | try { |
| | | // String转Geometry |
| | | geo = new WKTReader(new GeometryFactory(new PrecisionModel())).read(s); |
| | | // Geometry转WKB |
| | | byte[] geometryBytes = new WKBWriter(2, ByteOrderValues.LITTLE_ENDIAN, false).write(geo); |
| | | // 设置SRID为mysql默认的 0 |
| | | byte[] wkb = new byte[geometryBytes.length + 4]; |
| | | wkb[0] = wkb[1] = wkb[2] = wkb[3] = 0; |
| | | System.arraycopy(geometryBytes, 0, wkb, 4, geometryBytes.length); |
| | | if (geo == null) { |
| | | preparedStatement.setNull(i, jdbcType.TYPE_CODE); |
| | | return; |
| | | } |
| | | // 设置SRID为WGS84 (4326) |
| | | geo.setSRID(4326); |
| | | // Geometry转WKB,使用大端序(PostgreSQL 期望的格式),并包含SRID信息(EWKB格式) |
| | | byte[] wkb = new WKBWriter(2, ByteOrderValues.BIG_ENDIAN, true).write(geo); |
| | | preparedStatement.setBytes(i, wkb); |
| | | } catch (ParseException e) { |
| | | |
| | | // 解析失败时设置为null |
| | | preparedStatement.setNull(i, jdbcType.TYPE_CODE); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException { |
| | | return ""; |
| | | try { |
| | | // 使用 getBlob 方法获取 Blob 对象 |
| | | java.sql.Blob blob = callableStatement.getBlob(i); |
| | | if (blob != null) { |
| | | try (InputStream inputStream = blob.getBinaryStream()) { |
| | | Geometry geo = getGeometryFromInputStream(inputStream); |
| | | if (geo != null) { |
| | | return geo.toString(); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | // 处理异常 |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |