sql >> Database >  >> RDS >> PostgreSQL

Gewaardeerde parameters voor Postgresql JDBC-tabel

Ervan uitgaande dat u waarden wilt doorgeven van de klant . Als de waarden al in de database bestaan, zijn er andere, eenvoudigere manieren.

Syntaxis voor array van composiet_type

Wat je kunt passeren lijkt te worden beperkt door Java-typen en JDBC-typen , en er lijken geen voorzieningen te zijn voor arraytypes, om nog maar te zwijgen van arrays van samengestelde waarden ...

U kunt echter altijd een text pass doorgeven vertegenwoordiging. Ik bouw voort op twee basisfeiten:

  1. Citeer de handleiding :

Vetgedrukte nadruk van mij. Daarom, nadat u het type number_with_time . hebt aangemaakt zoals gedefinieerd in uw vraag, of een tabel heeft gedefinieerd met dezelfde kolommen die het rijtype automatisch in het systeem registreert, kunt u ook het arraytype number_with_time[] gebruiken .

  1. Er is een text vertegenwoordiging voor elke waarde.

Daarom is er ook een tekstrepresentatie voor number_with_time[] :

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

Functie-oproep

De daadwerkelijke functieaanroep hangt af van de geretourneerde waarden die zijn gedefinieerd in uw functie - die verborgen is in uw vraag.

Om complicaties bij het afhandelen van arrays in JDBC te voorkomen, geeft u de text . door vertegenwoordiging. Maak de functie met een text parameter.

Ik ga de naam "datum" niet gebruiken voor een timestamp . Werken met deze licht aangepaste typedefinitie:

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

Eenvoudige SQL-functie:

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$;

Bel:

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

db<>fiddle hier
Oude sqlfiddle

Demonstreren:

  • boven SQL-functie
  • PL/pgSQL-variant
  • een paar syntaxisvarianten voor de array van samengesteld type
  • de functie roept

Roep de functie aan zoals elke andere functie met een eenvoudige text parameter:

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(); 

Details in de Postgres JDBC-handleiding hier.

Voorbeeld om een ​​hele tabel terug te sturen via JDBC:



  1. Speciale tekens in PHP / MySQL

  2. hoe datetime invoegen in de SQL Database-tabel?

  3. MySQL-databaseconfiguratie in een aparte klasse

  4. Hoe een database te maken in een database-docker-container?