Я видел несколько постов об этом топи c ( post1 , post2 , post3 ). Во всех них решение выглядит очень просто, но я не могу получить значение возвращаемого значения.
Это то, что я пробовал до сих пор:
Опция 1:
int affectedRows =pstmt.executeUpdate();
ResultSet rs = pstmt.getResultSet();
if (rs.next())
updated = rs.getBoolean(1);
Результат: java.lang.NullPointerException
вызвать, если (rs.next())
Опция 2:
ResultSet rs =pstmt.executeQuery();
if (rs.next())
{updated = rs.getBoolean(1);}
Результат : org.postgresql.util.PSQLException: No results were returned by the query
Вариант 3:
boolean hasResult =pstmt.execute();
logger.info("hasResult: " + hasResult);
//if (hasResult) {
ResultSet rs = pstmt.getResultSet();
if (rs.next())
updated = rs.getBoolean(1);
//}
logger.info("updated: " + updated);
Результат: java.lang.NullPointerException
вызвать, если (rs.next())
также заметит hasResult: false
Запрос, созданный в коде Java, выглядит следующим образом:
INSERT INTO public."tablename"( "field1", "field2", ...,"field n")
VALUES('value1','value2',...,'value n')
ON CONFLICT ("UniqueID")
DO UPDATE SET "field1" = 'value3' ,..., "Updated"=true
RETURNING "Updated"
Если я выполняю запрос, например, с помощью pgadmin, я вижу возвращаемое значение «Обновлено»
Примечание. В каждом варианте запрос выполняется без проблем, но я не могу получить значение «Обновлено»
Это зависимость maven:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.12</version>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>postgres-socket-factory</artifactId>
<version>1.0.15</version>
</dependency>
И строка подключения:
jdbc:postgresql://google/postgres?cloudSqlInstance=<...>&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<...>&password=<...>