Ошибка при вставке через JDBC
Когда я запускаю SQL-оператор ниже через psql
он работает нормально, но когда я пытаюсь выполнить тот же запрос, построив его с preparedstatement
, это не удается.
INSERT INTO Hvbp
(provider_number, weighted_clinical_process,
weighted_patience_experience, total_performance_score,
coordinates, latitude, longitude, address, city, state, zip)
VALUES
('010092', 43.909090909091, 13.5, 57.409090909091,
'POINT(33.206201 -87.525480)', 33.206200613000476,
-87.52548020899968, '809 UNIVERSITY BOULEVARD EAST', 'TUSCALOOSA', 'AL', '');
Ошибка, которую я продолжаю получать,
org.postgresql.util.PSQLException: ERROR: column "coordinates" is of type geography but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
Position: 203
coordinates
столбец имеет тип GEOGRAPHY(POINT)
2 ответа
Я знаю, что это старая проблема, но я потратил большую часть дня на отладку той же основной проблемы и, наконец, нашел решение
То, что вы пытаетесь сделать, это предоставить POINT
используя WKT, и сервер автоматически преобразует это в Geometry
,
И, как вы обнаружили, это работает, если вы включаете WKT в тело SQL, но не работает, если вы используете параметр в подготовленном операторе.
Есть 3 варианта исправления:
Используйте st_GeographyFromText в вашем SQL следующим образом:
INSERT INTO Hvbp(coordinates) VALUES( st_GeographyFromText(?) )
И затем установите ваши параметры как WKT с
setString
,
В зависимости от задействованных структур, это может оказаться невозможным для вас.использование
setObject
на подготовленное государство вместоsetString
, Например:ps.setObject(1, "POINT(33.206201 -87.525480)", java.sql.Types.OTHER )
Измените настройки драйвера JDBC для отправки строк как
unspecified
тип, а затем сервер сделает преобразования типов для вас. Для этого вы хотите изменить свой URL JDBC на что-то вроде"jdbc:postgresql:my_db?stringtype=unspecified"
@Tim - спасибо за вашу помощь с подобной проблемой - мне пришлось написать ST_GeometryFromText в мою базу данных, и драйвер JDBC выдал аналогичное исключение, как @Hanks.
Для дальнейшего ознакомления и уточнения для других - это мой результат использования Java с JDBC:
INSERT INTO streets.points ( point_id, the_geom )
VALUES( ?, ST_GeomFromText( ? , 25832) );
И вставленная строка геометрии выглядела так:
POINT(33.206201 -87.525480)