Apache Derby: typ danych DECIMAL
Opis
Liczba o podanej precyzji i skali.
Skala oznacza liczbę cyfr po przecinku dziesiętnym.
Precyzja oznacza łączną liczbę cyfr w liczbie, czyli sumę liczb przed przecinkiem i po przecinku.
Składnia
DECIMAL(precyzja, skala)
albo
DEC(precyzja, skala)
albo
NUMERIC(precyzja, skala)
Ograniczenia
Precyzja może być liczbą z przedziału zamkniętego <1, 31>.
Domyślna skala wynosi 0.
Domyślna precyzja wynosi 5.
Jeśli podana liczba ma zbyt dużo miejsc po przecinku – liczba jest zaokrąglana w dół.
Jeśli podana liczba ma zbyt dużo cyfr przed przecinkiem – wyrzucany jest błąd, gdyż doszło by do utraty
wartości.
Odpowiadający typ Java
java.lang.BigDecimal
Odpowiadający typ JDBC
java.sql.Types.DECIMAL
Zakres
Liczby o precyzji większej niż 31 mogą być zapisane tylko jako łańcuch znaków.
Przykład
Klasa R042.java
span class="s0">package aderby.types; import aderby.DerbyUtil; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class R042_DECIMAL { private static final String baza = "C:/Przyklady/R042"; private static final String createTable="CREATE TABLE orbity(\n" + " id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY(\n" + " START WITH 1, INCREMENT BY 1),\n" + " nazwa VARCHAR(7), \n" + " a DECIMAL(6,2)\n" + ")"; private static final String a1 = "INSERT INTO orbity VALUES (DEFAULT, 'Merkury', 57.94)"; private static final String a2 = "INSERT INTO orbity VALUES (DEFAULT, 'Wenus', 108.21)"; private static final String a3 = "INSERT INTO orbity VALUES (DEFAULT, 'Ziemia', 149.60)"; private static final String a4 = "INSERT INTO orbity VALUES (DEFAULT, 'Mars', 227.94)"; private static final String a5 = "INSERT INTO orbity VALUES (DEFAULT, 'Jowisz', 778.41)"; private static final String a6 = "INSERT INTO orbity VALUES (DEFAULT, 'Saturn', 1426.73)"; private static final String a7 = "INSERT INTO orbity VALUES (DEFAULT, 'Uran', 2870.97)"; private static final String a8 = "INSERT INTO orbity VALUES (DEFAULT, 'Neptun', 4498.25)"; public static void main(String[] args) { DerbyUtil.startDerbyEngine(DerbyUtil.embdriver); //Utworzenie bazy Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=true"); //Utworzenie połączenia Statement stat = null; try { stat = con.createStatement(); //Dodanie poleceń wsadowych //Utworzenie tabeli stat.addBatch(createTable); //Dodanie danych do tabeli stat.addBatch(a1); stat.addBatch(a2); stat.addBatch(a3); stat.addBatch(a4); stat.addBatch(a5); stat.addBatch(a6); stat.addBatch(a7); stat.addBatch(a8); //Wykonanie polecenia wsadowego stat.executeBatch(); } catch (SQLException e1) { e1.printStackTrace(); } //DerbyUtil.close(stat); //pobranie danych //Statement stat1 = null; ResultSet rs = null; try { stat = con.createStatement(); rs = stat.executeQuery("SELECT * FROM orbity"); while (rs.next()) { System.out.println( rs.getString("nazwa") + " " + rs.getBigDecimal("a")); } } catch (SQLException e) { e.printStackTrace(); } DerbyUtil.close(rs); DerbyUtil.close(stat); DerbyUtil.close(con); DerbyUtil.shutdownEmbeddedDB(baza); DerbyUtil.shutdownDerbyEngine(); } }
Po uruchomieniu klasy we wskazanym folderze pojawia się baza danych, na konsoli otrzymujemy:
Merkury 57.94 Wenus 108.21 Ziemia 149.60 Mars 227.94 Jowisz 778.41 Saturn 1426.73 Uran 2870.97 Neptun 4498.25
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.