PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wartości parametrów tabeli Postgresql JDBC

Zakładając, że chcesz przekazać wartości od klienta . Jeśli wartości już istnieją w bazie danych, istnieją inne, prostsze sposoby.

Składnia tablicy typu composite_type

To, co możesz przekazać, wydaje się być ograniczone przez Typy Java i typy JDBC , i wydaje się, że nie ma przepisów dotyczących typów tablic, nie mówiąc już o tablicach wartości złożonych ...

Jednak zawsze możesz przekazać text reprezentacja. Opieram się na dwóch podstawowych faktach:

  1. Cytując podręcznik :

Moje odważne podkreślenie. Dlatego po utworzeniu typu number_with_time jak zdefiniowano w twoim pytaniu lub zdefiniowałeś tabelę z tymi samymi kolumnami, która automatycznie rejestruje typ wiersza w systemie, możesz również użyć typu tablicy number_with_time[] .

  1. Istnieje text reprezentacja dla każdego wartość.

Dlatego istnieje również tekstowa reprezentacja dla number_with_time[] :

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

Wywołanie funkcji

Rzeczywiste wywołanie funkcji zależy od wartości zwracanych zdefiniowanych w funkcji - która jest ukryta w pytaniu.

Aby uniknąć komplikacji związanych z obsługą tablic w JDBC, przekaż text reprezentacja. Utwórz funkcję pobierając text parametr.

Nie zamierzam używać nazwy „data” jako timestamp . Praca z tą nieznacznie dostosowaną definicją typu:

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

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

Zadzwoń:

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

db<>fiddle tutaj
Stary sqlfiddle

Demonstracja:

  • powyżej funkcji SQL
  • Wariant PL/pgSQL
  • kilka wariantów składni dla tablicy typu złożonego
  • wywołania funkcji

Wywołaj funkcję jak każdą inną funkcję pobierającą prosty 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(); 

Szczegóły w instrukcji Postgres JDBC tutaj.

Przykład, aby zwrócić całą tabelę przez JDBC:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL do XML z 3 tabelami

  2. Właściciel bazy postgresql nie może uzyskać dostępu do bazy danych - Nie znaleziono relacji.

  3. Dołącz do aliasów kolumn SQL

  4. Rozplątanie aktualizacji PostgreSQL

  5. Jak używać operatora % z rozszerzenia pg_trgm?