Po PostgreSQL 11 zavedl tým ovladačů PostgreSQL JDBC název ENUM EscapeSyntaxCallMode v ovladači PostgreSQL verze 42.2.16. Tento výčet můžeme použít při vytváření databázového připojení nebo DataSource
objekt. Tento výčet má 3 typy hodnot:
- "
func
." " - toto nastavte, když chceme vždy volat funkce. - "
call
." " - toto nastavte, když chceme vždy volat procedury. - "
callIfNoReturn
" - Kontroluje návratový typ při volání funkce/procedury, pokud návratový typ existuje, PostgreSQL to považuje za funkci a volá to jako způsob funkce. Jinak to volá jako způsob procedury. Takže v mém projektu jsem použil tento "callIfNoReturn
“, protože jsem chtěl, aby PostgreSQL automaticky detekoval, zda volám funkci nebo proceduru.
Chcete-li tento problém vyřešit, stačí provést následující kroky:
-
Upgradujte verzi ovladače PostgreSQL JDBC z jakékoli starší verze na 42.2.16 nebo vyšší v
pom.xml
nebo gradle.<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.16</version> </dependency>
-
A samozřejmě musíte mít na svém počítači nainstalovaný PostgreSQL Server verze>=11, abyste mohli vytvořit proceduru.
-
Pokud používáte Spring, musíte při vytváření objektu zdroje dat připojit
escapeSyntaxCallMode
jako řetězec dotazu v"jdbcUrl"
takhle:<bean id="dataSource" parent="com.zaxxer.hikari.HikariDataSource"> <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/dev_db?escapeSyntaxCallMode=${cibase.db.app.procedureCallPolicy}"/> <property name="username" value="${cibase.db.app.user}"/> <property name="password" value="${cibase.db.app.password}"/> </bean>
?escapeSyntaxCallMode=${cibase.db.app.procedureCallPolicy}
:zde jsem vybral hodnotu výčtu ze souboru vlastností, ale můžete přímo zadat libovolnou hodnotu výčtu mezi"func"/"call"/"callIfNoReturn"
podle vašeho požadavku.
Nyní spustíte svůj kód a bude fungovat správně.
Poznámka: Nemusíte nic měnit ve způsobu volání procedury, ať už používáte prostý kód JDBC nebo @Procedure v Spring Data Jpa.
pro více podrobností prosím klikněte na tento odkaz https://github.com/pgjdbc/pgjdbc