Apache Derby: funkcja IDENTITY_VAL_LOCAL
Opis
Kolumny oznaczone jako IDENTITY to kolumny wypełniane wartościami automatycznie. Funkcja IDENTITY_VAL_LOCAL zwraca ostatnią wartość jaka została wpisana w kolumnie tożsamościowej przy ostatnim wpisie w danej tabeli przy użyciu instrukcji INSERT z użyciem klauzuli VALUES, niekoniecznie zawierającym w wykazie kolumn kolumnę IDENTITY.
Składnia
IDENTITY_VAL_LOCAL( )
Ograniczenia
Wynik jest typu DECIMAL(31,0) niezależnie od typu kolumny IDENTITY. Jeśli instrukcja INSERT dla kolumny IDENTITY nie była wywoływana – wynik jest NULL.
Klasa R081_IDENTITY_VAL_LOCAL.java:
package aderby.functions.info; import aderby.DerbyUtil; import java.io.*; import java.sql.*; public class R081_IDENTITY_VAL_LOCAL { private static final String baza = "C:/Przyklady/r081_identity"; private static final String skrypt = "aderby/src/resources/sqls/temperatura3.sql"; public static void main(String[] args) { DerbyUtil.startDerbyEngine(DerbyUtil.embdriver); Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=true"); DerbyUtil.jdbcRunScript(skrypt, con); Statement stat = null; ResultSet rs = null; try { stat = con.createStatement(); rs = stat.executeQuery( "SELECT IDENTITY_VAL_LOCAL() FROM temperatura"); rs.next(); System.out.println(rs.getBigDecimal(1)); } catch (SQLException e) { e.printStackTrace(); } DerbyUtil.close(stat); DerbyUtil.close(con); DerbyUtil.close(rs); DerbyUtil.shutdownEmbeddedDB(baza); DerbyUtil.shutdownDerbyEngine(); DerbyUtil.dropDatabase(new File(baza)); } }
Plik temperatura3.sql
CREATE TABLE temperatura( id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1), czujnik INTEGER, val DOUBLE ); CREATE INDEX i_czujnik ON temperatura (czujnik ASC); CREATE INDEX i_val ON temperatura (val ASC); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 37.8); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 1, 39.7); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 36.6); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 33.2); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 39.2); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 40.6); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 41.2); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 1, 40.1); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 1, 39.8); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 38.9); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 1, 38.3); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 37.9); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 37.4); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 37.1); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 36.8); INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 36.7); INSERT INTO temperatura (czujnik, val) VALUES (1, 36.6);
Wynik
17
Komentarz
Wprowadziliśmy 17 wyników. Wartość wynosi 17. Ostatni wynik został również uwzględniony mimo, że kolumna 'id’ nie była bezpośrednio wymieniona w 'VALUES’, ponieważ dane w kolumnie były wstawione automatycznie.
Pliki do ściągnięcia
Aktualny (tworzony narastająco) plik module-info.java
Aktualny (tworzony narastająco) plik DerbyUtil.java
Pliki tworzone narastająco zastępują poprzednie pliki o tej samej nazwie i działają dla wszystkich wcześniej opublikowanych przykładów we wszystkich wpisach w projekcie. W przypadku pliku module-info.java
może być potrzebne skreślenie niepotrzebnych wpisów.