Я пытаюсь получить информацию о местоположении из схемы Location. Postgres версия 9.3.15
и maven jar используется 9.4-1200-jdbc4
ubuntu 14.04 LTS. Для пула соединений я использую mchange
версии 0.9.5.2
.Невозможно получить идентификатор с помощью Postgres Сохраненная функция - Плохое значение для типа int
org.postgresql.util.PSQLException: Bad value for type int : -,24.7477464699999992,32.7477464700000027,232328,xxxx,xxxxx,xxxx,"xxxx",India,landmark
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toInt(AbstractJdbc2ResultSet.java:2962)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getInt(AbstractJdbc2ResultSet.java:2145)
at com.mchange.v2.c3p0.impl.NewProxyResultSet.getInt(NewProxyResultSet.java:425)
at com.creo.hike.direct.storage.jdbc.service.LocationService.getLocation(LocationService.java:74)
at com.creo.hike.direct.storage.jdbc.service.LocationService.getLocation(LocationService.java:66)
at com.creo.hike.direct.testapp.App.testLocationService(App.java:38)
at com.creo.hike.direct.testapp.App.main(App.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Схема расположения.
CREATE TABLE Location (
LocationId SERIAL PRIMARY KEY,
Latitude DOUBLE PRECISION NOT NULL DEFAULT 0.0,
Longitude DOUBLE PRECISION NOT NULL DEFAULT 0.0,
Pincode INTEGER NOT NULL DEFAULT 0,
InnerAddress TEXT NOT NULL DEFAULT 'Unknown',
Locality TEXT NOT NULL DEFAULT 'Unknown',
City TEXT NOT NULL DEFAULT 'Unknown',
State TEXT NOT NULL DEFAULT 'Unknown',
Country TEXT NOT NULL DEFAULT 'Unknown',
Landmark TEXT NOT NULL DEFAULT 'Unknown'
);
Вводов Места работают хорошо, но при попытке извлечь Место сгенерированных LocationId
, он не удался, используя хранимую функцию. Хранимая процедура - Получение местоположения по идентификатору gets_location_by_id
CREATE OR REPLACE FUNCTION gets_location_by_id(
localId INTEGER
) RETURNS Location AS $$
DECLARE
row Location%ROWTYPE;
BEGIN
SELECT * INTO row
FROM Location
WHERE LocationId = localId;
RETURN row;
END;
$$ LANGUAGE plpgsql;
Пожалуйста, дайте мне знать, если я пропускаю что-то здесь. Java-код, чтобы получить местоположение по идентификатору является
String sql = "SELECT gets_location_by_id(?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, locationId);
ResultSet resultSet = statement.executeQuery();
location = new Location(
resultSet.getInt(1),
resultSet.getDouble(2),
resultSet.getDouble(3),
resultSet.getInt(4),
resultSet.getString(5),
resultSet.getString(6),
resultSet.getString(7),
resultSet.getString(8),
resultSet.getString(9),
resultSet.getString(10));
Вы уверены, что SELECT * возвращает LocationId , Широта, Долгота, Pincode, ... в строку в этом точном порядке? –
Да. Он возвращался. – Vish