Aria

Apache Derby – tutorial

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
package aderby.sqls;

import aderby.DerbyUtil;

import java.sql.*;

public class R042 {
    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 skrypt = "src/resources/sqls/r042.sql";
    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

Skrypt R042.zip

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-nfo.java może być potrzebne skreślenie niepotrzebnych wpisów.