У меня есть база данных postgresql с некоторой таблицей и хранимая процедура, которые записываются в эту таблицу. Все идет хорошо, когда я вызываю эту хранимую процедуру от psql
: я вижу, что мои записи вставлены в мою таблицу. Хотя, когда я вызываю эту хранимую процедуру через JDBC, я получаю журнал выполнения хранимой процедуры, последовательность увеличивается, но моя таблица не обновляется.Хранимая процедура PostgresQL, вызванная из JDBC, не работает
Вот SQL я выполнил из свежей установки PostGreSQL (9.5.1):
создание таблицы:
CREATE SEQUENCE atable_id_seq;
CREATE TABLE IF NOT EXISTS "atable" (
"id" int NOT NULL DEFAULT NEXTVAL('atable_id_seq'),
"name" varchar(250) DEFAULT NULL,
PRIMARY KEY ("id")
);
Создание хранимой процедуры:
CREATE OR REPLACE FUNCTION awrite(IN name character varying, OUT result character varying) AS
$$
BEGIN
INSERT INTO atable(name) VALUES (name)
RETURNING atable.id INTO awrite.result;
RAISE INFO 'Create awrite: %', name;
END
$$
LANGUAGE plpgsql;
Вызов awrite хранимая процедура от psql
фактически запускает журнал в postgres и обновляет таблицу.
Затем я написал программу Java для вызова же хранимую процедуру:
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("org.postgresql.Driver");
hikariConfig.setJdbcUrl("jdbc:postgresql://127.0.0.1:5432/toto?charSet=UNICODE");
hikariConfig.setUsername("toto");
hikariConfig.setAutoCommit(false);
hikariConfig.setMinimumIdle(0);
hikariConfig.setMaximumPoolSize(2);
JdbcTemplate jdbcTemplate =
new JdbcTemplate(new HikariDataSource(hikariConfig));
SimpleJdbcCall call = new SimpleJdbcCall(jdbcTemplate).withProcedureName("awrite");
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("name", "Foo");
call.addDeclaredParameter(new SqlOutParameter("result", Types.VARCHAR));
Map<String, Object> result = call.execute(params);
jdbcTemplate.execute("COMMIT;");
System.out.println("Result: ");
for (String s : result.keySet()) {
System.out.println(s + ": " + result.get(s));
}
я получить идентификатор и исполнение шло хорошо. Однако моя таблица не содержит записи.
Я не понимаю, может быть, кто-то может мне помочь?