Beispielcode zum Abrufen der wichtigsten JDBC-Typwerte in der Java + H2-Datenbank

Überblick

Was ist ein JDBC-Typ?

Der JDBC-Typ ist ein Typ, der als Vermittler zwischen dem SQL-Typ und dem Java-Sprachtyp fungiert. In der Nähe des Typs, der SQL-Daten darstellt (z. B. CHAR oder INTEGER).

SQL-Typ ← (Zuordnung) → JDBC-Typ ← (Zuordnung) → Java-Sprachtyp

Einführung in die JDBC-API \ -Mapping zwischen SQL- und Java-Typen

Es gibt erhebliche Unterschiede zwischen den SQL-Typen, die von verschiedenen Datenbankprodukten unterstützt werden. Selbst wenn verschiedene Datenbanken SQL-Typen mit derselben Bedeutung unterstützen, können sie unterschiedliche Namen erhalten. Beispielsweise unterstützen die meisten wichtigen Datenbanken SQL-Typen für große Binärwerte, die Oracle als LONG RAW, Sybase IMAGE, Informix BYTE und DB2 LONG VARCHAR FOR BIT DATA bezeichnet. ..

JDBC-Programmierer müssen sich normalerweise nicht um den tatsächlichen SQL-Typnamen kümmern, der von der Zieldatenbank verwendet wird. In vielen Fällen müssen JDBC-Programmierer nicht auf vorhandene Datenbanktabellen programmieren und auf den genauen SQL-Typnamen achten, mit dem sie erstellt wurden.

JDBC definiert eine Reihe generischer SQL-Typbezeichner in der Klasse java.sql.Types. Die Typen in der Gruppe sollen die am häufigsten verwendeten SQL-Typen darstellen. Durch die Programmierung mit der JDBC-API können Programmierer die JDBC-Typen verwenden, um auf generische SQL-Typen zu verweisen, ohne den genauen SQL-Typnamen zu kennen, der von der Zieldatenbank verwendet wird. ..

Beispielcode

Dateiliste

├── build.gradle
└── src
    └── main
        └── java
            └── JdbcSample.java

build.gradle

plugins {
  id 'application'
  id 'java'
}

sourceCompatibility = JavaVersion.VERSION_14

repositories {
  mavenCentral()
}

dependencies {
  // H2 Database 1.4.200 eingeführt
  implementation 'com.h2database:h2:1.4.200'
}

tasks.withType(JavaCompile) {
  //Verwenden Sie die Java 14-Vorschaufunktion
  options.compilerArgs += ['--enable-preview']
}

application {
  //Verwenden Sie die Java 14-Vorschaufunktion
  applicationDefaultJvmArgs = ['--enable-preview']
  mainClassName = 'JdbcSample'
}

JdbcSample.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Arrays;

class JdbcSample {

  public static void main(String[] args) throws Exception {

    //Stellen Sie eine Verbindung zur H2-Datenbank her
    // mem:In-Memory-Datenbank
    // DB_CLOSE_DELAY=-1:Löschen Sie keine DB-Inhalte, wenn Sie die Verbindung trennen
    String url = "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1";
    String user = "sa";
    String password = "";
    Connection con = DriverManager.getConnection(url, user, password);
    Statement stmt = con.createStatement();

    //Tabelle erstellen
    //Verschiedene JDBC-Typen(Unterscheidet sich geringfügig vom SQL-Datentyp)Spalte definieren mit
    // (Verwenden Sie die Textblockfunktion, die wie ein Hördokument geschrieben werden kann und mit der Java 14-Vorschaufunktion verwendet werden kann)
    stmt.execute("""
      create table test (
        --Zeichenfolgentyp
        my_char         CHAR,         --Kurze Schnur fester Länge
        my_varchar      VARCHAR,      --Kurze Zeichenfolge mit variabler Länge
        my_longvarchar  LONGVARCHAR,  --Lange Zeichenfolge mit variabler Länge
        my_clob         CLOB,         -- Character Large Object

        --Binärtyp
        my_binary         BINARY(4),         --Kleine Binärdatei mit fester Länge(SQL-Datentyp BIT)
        my_varbinary      VARBINARY(4),      --Kleine Binärdatei mit variabler Länge(SQL-Datentyp BIT VARYING)
        my_longvarbinary  LONGVARBINARY(4),  --Große Binärdatei mit variabler Länge
        my_blob           BLOB(4),           -- Binary Large Object

        --Boolescher Typ
        my_boolean  BOOLEAN,  --Boolescher Wert

        --Ganzzahliger Typ
        my_smallint  SMALLINT,  -- short
        my_integer   INTEGER,   -- int
        my_bigint    BIGINT,    -- long

        --Gleitkomma-Typ
        my_real    REAL,    --Gleitkommazahl mit einfacher Genauigkeit
        my_double  DOUBLE,  --Gleitkommazahl mit doppelter Genauigkeit doppelt

        --Festpunkttyp
        my_numeric  NUMERIC,  --Feste Dezimalzahl
        my_decimal  DECIMAL,  --Festpunkttyp

        --Zeittyp
        my_date       DATE,       --Datum
        my_time       TIME,       --Stunden, Minuten und Sekunden
        my_timestamp  TIMESTAMP   --Datum+Stunden, Minuten und Sekunden+Nano Sekunden
      )""");

    //Datensatz hinzufügen
    // (Verwenden Sie die Textblockfunktion, die wie ein Hördokument geschrieben werden kann und mit der Java 14-Vorschaufunktion verwendet werden kann)
    stmt.execute("""
      insert into test values (
        --Zeichenfolgentyp
        'Hello', -- CHAR
        'Hello', -- VARCHAR
        'Hello', -- LONGVARCHAR
        'Hello', -- CLOB

        --Binärtyp
        X'CAFEBABE',  -- BINARY,
        X'CAFEBABE',  -- VARBINARY,
        X'CAFEBABE',  -- LONGVARBINARY,
        X'CAFEBABE',  -- BLOB,

        --Boolescher Typ
        TRUE,  -- BOOLEAN

        --Ganzzahliger Typ
        32767              ,  -- SMALLINT
        2147483647         ,  -- INTEGER
        9223372036854775807,  -- BIGINT

        --Gleitkomma-Typ
        123.0001,  -- REAL
        123.0001,  -- DOUBLE

        --Festpunkttyp
        123.0001,  -- NUMERIC
        123.0001,  -- DECIMAL

        --Zeittyp
        '2001-02-03',                     -- DATE
        '04:05:06',                       -- TIME
        '2001-02-03 04:05:06.123456789'   -- TIMESTAMP
      )""");

    //Holen Sie sich Rekord
    ResultSet rs = stmt.executeQuery("select * from test");
    while (rs.next()) {

      //Rufen Sie den Java-Objekttyp für den JDBC-Typ der Spalte ab
      System.out.println("Spaltenname-JDBC-Typ-Java-Objekttyp");
      ResultSetMetaData rsmd = rs.getMetaData();
      for (int i = 1; i <= rsmd.getColumnCount(); i++) {
        System.out.println(
          rsmd.getColumnName(i) + " - " +
          rsmd.getColumnTypeName(i) + " - " +
          rsmd.getColumnClassName(i));
      }
      System.out.println();

      //Spaltenwerte abrufen
      System.out.println("Spaltenname-Spaltenwert");

      //Zeichenfolgentyp
      System.out.println("my_char=" + rs.getString("my_char"));
      System.out.println("my_varchar=" + rs.getString("my_varchar"));
      System.out.println("my_longvarchar=" + rs.getString("my_longvarchar"));
      System.out.println("my_clob=" + rs.getClob("my_clob"));

      //Binärtyp
      System.out.println("my_binary=" + Arrays.toString(rs.getBytes("my_binary")));
      System.out.println("my_varbinary=" + Arrays.toString(rs.getBytes("my_varbinary")));
      System.out.println("my_longvarbinary=" + Arrays.toString(rs.getBytes("my_longvarbinary")));
      System.out.println("my_blob=" + rs.getBlob("my_blob"));

      //Boolescher Typ
      System.out.println("my_boolean=" + rs.getBoolean("my_boolean"));

      //Ganzzahliger Typ
      System.out.println("my_smallint=" + rs.getShort("my_smallint"));
      System.out.println("my_integer=" + rs.getInt("my_integer"));
      System.out.println("my_bigint=" + rs.getBigDecimal("my_bigint"));

      //Gleitkomma-Typ
      System.out.println("my_real=" + rs.getFloat("my_real"));
      System.out.println("my_double=" + rs.getDouble("my_double"));

      //Festpunkttyp
      System.out.println("my_numeric=" + rs.getBigDecimal("my_numeric"));
      System.out.println("my_decimal=" + rs.getBigDecimal("my_decimal"));

      //Zeittyp
      System.out.println("my_date=" + rs.getDate("my_date"));
      System.out.println("my_time=" + rs.getTime("my_time"));
      System.out.println("my_timestamp=" + rs.getTimestamp("my_timestamp"));
    }

    stmt.close();
    con.close();
  }
}

Ausführungsergebnis

Mit Gradles Laufaufgabe ausführen.

$ gradle run

> Task :compileJava
Hinweis:/Users/foo/bar/src/main/java/JdbcSample.Java verwendet die Vorschau-Sprachfunktion.
Hinweis:Detail ist,-Xlint:Bitte kompilieren Sie mit der Vorschau-Option neu.

> Task :run
Spaltenname-JDBC-Typ-Java-Objekttyp
MY_CHAR - CHAR - java.lang.String
MY_VARCHAR - VARCHAR - java.lang.String
MY_LONGVARCHAR - VARCHAR - java.lang.String
MY_CLOB - CLOB - java.sql.Clob
MY_BINARY - VARBINARY - [B
MY_VARBINARY - VARBINARY - [B
MY_LONGVARBINARY - VARBINARY - [B
MY_BLOB - BLOB - java.sql.Blob
MY_BOOLEAN - BOOLEAN - java.lang.Boolean
MY_SMALLINT - SMALLINT - java.lang.Short
MY_INTEGER - INTEGER - java.lang.Integer
MY_BIGINT - BIGINT - java.lang.Long
MY_REAL - REAL - java.lang.Float
MY_DOUBLE - DOUBLE - java.lang.Double
MY_NUMERIC - DECIMAL - java.math.BigDecimal
MY_DECIMAL - DECIMAL - java.math.BigDecimal
MY_DATE - DATE - java.sql.Date
MY_TIME - TIME - java.sql.Time
MY_TIMESTAMP - TIMESTAMP - java.sql.Timestamp

Spaltenname-Spaltenwert
my_char=Hello
my_varchar=Hello
my_longvarchar=Hello
my_clob=clob0: 'Hello'
my_binary=[-54, -2, -70, -66]
my_varbinary=[-54, -2, -70, -66]
my_longvarbinary=[-54, -2, -70, -66]
my_blob=blob0: X'cafebabe'
my_boolean=true
my_smallint=32767
my_integer=2147483647
my_bigint=9223372036854775807
my_real=123.0001
my_double=123.0001
my_numeric=123.0001
my_decimal=123.0001
my_date=2001-02-03
my_time=04:05:06
my_timestamp=2001-02-03 04:05:06.123457

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed

Referenzmaterial

Recommended Posts

Beispielcode zum Abrufen der wichtigsten JDBC-Typwerte in der Java + H2-Datenbank
Beispielcode zum Abrufen der Werte der wichtigsten SQL-Typen in Java + Oracle Database 12c
Beispielcode zum Abrufen der wichtigsten SQL-Typwerte in Java + MySQL 8.0
Beispielcode zum Konvertieren von List in List <String> in Java Stream
Java-Codebeispiel zum Erfassen und Anzeigen von DBLINK-Quell- und Zieldaten in Oracle Database mithilfe von DBLINK
Holen Sie sich null-sichere Map-Werte in Java
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
So erhalten Sie das Datum mit Java
Beispiel zum Entpacken einer gz-Datei in Java
Beispielcode zum Serialisieren und Deserialisieren von Java Enum-Enumerationen und JSON in Jackson
Versuchen Sie, mit JDK6 (Java) + JDBC OCI-Treiber (Typ 2) eine Verbindung zur autonomen Datenbank herzustellen.
Java-Beispielcode 02
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Java-Beispielcode 03
Beispielquellcode zum Ermitteln des minimalen gemeinsamen Vielfachen mehrerer Werte in Java
So erhalten Sie eine Klasse von Element in Java
Java-Beispielcode 04
Bibliothek "OSHI" zum Erfassen von Systeminformationen mit Java
Java-Beispielcode 01
[Java] So erhalten Sie den Schlüssel und den Wert, die in Map gespeichert sind, durch iterative Verarbeitung
Beispielcode zum Zuweisen eines Werts in der Eigenschaftendatei zu einem Feld des erwarteten Typs
Quelle zum Abrufen der Umleitungsquell-URL in Java
[Für Anfänger] Mindestbeispiel für die Anzeige von RecyclerView in Java
Sortieren Sie die Map-Werte in aufsteigender Schlüsselreihenfolge in Java TreeMap
[Java] Hinweise zur Typinferenz in Java 10
Typbestimmung in Java
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Spielen Sie andere Codewerte als XML-gültige Zeichen in Java ab
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Java-Quellbeispiel für SELECT und Anzeige von CLOB (Oracle Database + Java)
So erhalten Sie Werte in Echtzeit mit TextWatcher (Android)
Beispielcode zum Parsen von Datum und Uhrzeit mit Java SimpleDateFormat
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ruft Attribute und Werte aus einer XML-Datei in Java ab
Beispielcode für elektronische Signatur (JAVA)
Holen Sie sich EXIF-Informationen in Java
Java Parallel Code Sample Collection
Probieren Sie den Funktionstyp in Java aus! ①
[Java] KClass in Java herunterladen [Kotlin]
Java mit Visual Studio Code
Schreiben Sie Java8-ähnlichen Code in Java8
Ich habe versucht, Code wie eine Typdeklaration in Ruby zu schreiben
So verwalten Sie Java-Code, der automatisch von jOOQ & Flyway generiert wird
[Für Anfänger] Mindestbeispiel zum Aktualisieren von RecyclerView mit DiffUtils in Java
So erhalten Sie die ID des automatisch inkrementierten PRIMAY-Schlüssels in MyBatis
[Mit Beispielcode] Grundlagen von Spring JDBC mit der Blog-App gelernt
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Beispielcode mit JMustache, der Moustache-Vorlagen-Engine in Java
[Java] So konvertieren Sie vom Typ String in den Pfadtyp und erhalten den Pfad
So ermitteln Sie die Länge einer Audiodatei mit Java