sql >> Databáze >  >> RDS >> PostgreSQL

Hodnotné parametry tabulky Postgresql JDBC

Za předpokladu, že chcete předávat hodnoty od klienta . Pokud hodnoty již v databázi existují, existují jiné, jednodušší způsoby.

Syntaxe pro pole kompozitního_typu

Zdá se, že to, co můžete předat, je omezeno Typy Java a typy JDBC a zdá se, že neexistují ustanovení pro typy polí, nemluvě o polích složených hodnot ...

Vždy však můžete předat text zastoupení. Stavím na dvou základních faktech:

  1. Citování příručky :

Odvážný důraz můj. Proto po vytvoření typu number_with_time jak je definováno ve vaší otázce nebo definována tabulka se stejnými sloupci, která automaticky registruje typ řádku v systému, můžete také použít typ pole number_with_time[] .

  1. Je tam text zastoupení pro každého hodnotu.

Proto existuje také textová reprezentace pro number_with_time[] :

'{"(1,2014-04-20 20:00:00)","(2,2014-04-21 21:00:00)"}'::number_with_time[]

Volání funkce

Skutečné volání funkce závisí na návratových hodnotách definovaných ve vaší funkci – což je skryto ve vaší otázce.

Chcete-li se vyhnout komplikacím při manipulaci s poli v JDBC, předejte text zastoupení. Vytvořte funkci pomocí text parametr.

Nebudu používat název "datum" pro timestamp . Práce s touto mírně upravenou definicí typu:

CREATE TYPE number_with_time AS(
   _num float
 , _ts  timestamp
);

Jednoduchá funkce SQL:

CREATE OR REPLACE FUNCTION myfunc_sql(_arr_txt text)
  RETURNS integer       -- example
  LANGUAGE sql AS
$func$
   SELECT sum(_num)::int
   FROM   unnest (_arr_txt::number_with_time[]) x
   WHERE  _ts > '2014-04-19 20:00:00';
$func$;

Volejte:

SELECT myfunc_sql('{"(1,2014-04-20 20:00:00)","(2,2014-04-21 21:00:00)"}');

db<>fiddle zde
Starý sqlfiddle

Demonstrace:

  • nad funkcí SQL
  • Varianta PL/pgSQL
  • několik variant syntaxe pro pole složeného typu
  • volání funkce

Volejte funkci jako kteroukoli jinou funkci s jednoduchým text parametr:

CallableStatement myProc = conn.prepareCall("{ ? = call myfunc_sql( ? ) }");
myProc.registerOutParameter(1, Types.VARCHAR);
// you have to escape double quotes in a Java string!
myProc.setString(2, "{\"(1,2014-04-20 20:00:00)\",\"(2,2014-04-21 21:00:00)\"}");
myProc.execute();
String mySum = myProc.getInt(1);
myProc.close(); 

Podrobnosti v příručce Postgres JDBC zde.

Příklad vrácení celé tabulky přes JDBC:



  1. Mysql převést int na MAC

  2. je možné volat skript SQL z uložené procedury v jiném skriptu SQL?

  3. Jak používat mnoho operátorů LIKE a používat index

  4. Jak zálohovat databázi Chamilo LMS MySQL