Beispielcode zum Abrufen der Werte der wichtigsten SQL-Typen in Java + Oracle Database 12c

Überblick

Beispielcode

Dateiliste

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

build.gradle

plugins {
  id 'application'
  id 'java'
}

sourceCompatibility = JavaVersion.VERSION_14

repositories {
  mavenCentral()
}

dependencies {

  //Geben Sie runtimeOnly an, wenn Sie nur den Oracle JDBC-Treiber zur Laufzeit verwenden möchten
  //runtimeOnly 'com.oracle.database.jdbc:ojdbc8:19.7.0.0'

  //Diesmal Orakel.jdbc.Geben Sie die Implementierung für die Verwendung von OracleTypes an
  implementation 'com.oracle.database.jdbc:ojdbc8:19.7.0.0'
}

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 oracle.jdbc.OracleTypes; //Nicht erforderlich, wenn Sie es nur normal verwenden(Diese Zeit wurde verwendet, um Informationen zum erweiterten JDBC-Typ von Oracle abzurufen)

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.Types;
import java.util.Arrays;

class JdbcSample {

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

    //Stellen Sie eine Verbindung zu MySQL her
    String url = "jdbc:oracle:thin:@//localhost:1521/testdb";
    String user = "javarista";
    String password = "cafebabe";
    Connection con = DriverManager.getConnection(url, user, password);
    Statement stmt = con.createStatement();

    //Tabelle erstellen
    //Definieren Sie Spalten mit verschiedenen SQL-Datentypen
    // (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(8 CHAR),        --Zeichenfolge mit fester Länge(Grundsätzlich maximale Länge 2000 Bytes)
        my_varchar2  VARCHAR2(512 CHAR),  --Zeichenfolge mit variabler Länge(Grundsätzlich maximale Länge 4000 Bytes)
        my_clob      CLOB,                -- Character Large Object

        --Binärtyp
        my_raw   RAW(256),  --Binärdatei mit variabler Länge(Grundsätzlich maximale Länge 2000 Bytes)
        my_blob  BLOB,      -- Binary Large Object

        --Boolescher Typ
        my_number_1  NUMBER(1),  --0 wird als falsch interpretiert, alle anderen Werte werden als wahr interpretiert

        --Ganzzahliger Typ
        my_number_38  NUMBER(38),  --Bis zu 38 Stellen
        my_smallint   SMALLINT,    --ANSI-Datentyp in Oracle-Datentyp konvertiert
        my_integer    INTEGER,     --ANSI-Datentyp in Oracle-Datentyp konvertiert

        --Gleitkomma-Typ
        my_binary_float      BINARY_FLOAT,      --Gleitkommazahl Nummer 4 mit einfacher Genauigkeit
        my_binary_double     BINARY_DOUBLE,     --Gleitkommazahl mit doppelter Genauigkeit, 8 Byte
        my_float             FLOAT,             --Oracle-Datentyp FLOAT(126)ANSI-Datentyp konvertiert in
        my_double_precision  DOUBLE PRECISION,  --Oracle-Datentyp FLOAT(126)ANSI-Datentyp konvertiert in
        my_real              REAL,              --Oracle-Datentyp FLOAT(63)ANSI-Datentyp konvertiert in

        --Festpunkttyp
        my_fixed_point_number  NUMBER(7, 4),   --Feste Dezimalzahl
        my_numeric             NUMERIC(7, 4),  --ANSI-Datentyp in Oracle-Datentyp konvertiert
        my_decimal             DECIMAL(7, 4),  --ANSI-Datentyp in Oracle-Datentyp konvertiert

        --Zeittyp
        my_date                      DATE,                        --Datum+Stunden, Minuten und Sekunden
        my_timestamp                 TIMESTAMP(9),                --Datum+Stunden, Minuten und Sekunden+Nano Sekunden
        my_timestamp_with_time_zone  TIMESTAMP(9) WITH TIME ZONE  --Datum+Stunden, Minuten und Sekunden+Nano Sekunden+Zeitzone
      )""");

    //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', -- VARCHAR2
        'Hello', -- CLOB

        --Binärtyp
        HEXTORAW('CAFEBABE'),  -- RAW
        HEXTORAW('CAFEBABE'),  -- BLOB,

        --Boolescher Typ
        1,  --0 wird als falsch interpretiert, alle anderen Werte werden als wahr interpretiert

        --Ganzzahliger Typ
        12345678901234567890123456789012345678,  -- NUMBER(38)
        32767,                                   -- SMALLINT
        2147483647,                              -- INTEGER

        --Gleitkomma-Typ
        123.0001,  -- BINARY_FLOAT
        123.0001,  -- BINARY_DOUBLE
        123.0001,  -- FLOAT
        123.0001,  -- DOUBLE PRECISION
        123.0001,  -- REAL

        --Festpunkttyp
        123.0001,  -- NUMBER(7, 4)
        123.0001,  -- NUMERIC(7, 4)
        123.0001,  -- DECIMAL(7, 4)

        --Zeittyp
        TO_DATE('2001-02-03 04:05:06', 'YYYY-MM-DD HH24:MI:SS'),                                      -- DATE
        TO_TIMESTAMP('2001-02-03 04:05:06.999999999', 'YYYY-MM-DD HH24:MI:SS.FF9'),                   -- TIMESTAMP(9)
        TO_TIMESTAMP_TZ('2001-02-03 04:05:06.999999999 +00:00', 'YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM')  -- TIMESTAMP(9) WITH TIME ZONE
      )""");

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

      //Ruft den Typ eines Java-Objekts für den JDBC- oder SQL-Typ einer Spalte ab
      System.out.println("Spaltenname-JDBC-Typ-Datenbankspezifischer SQL-Typ-Java-Objekttyp");
      ResultSetMetaData rsmd = rs.getMetaData();
      for (int i = 1; i <= rsmd.getColumnCount(); i++) {
        System.out.println(
          rsmd.getColumnName(i) + " - " +
            getJdbcTypeName(rsmd.getColumnType(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_varchar2=" + rs.getString("my_varchar2"));
      System.out.println("my_clob=" + rs.getClob("my_clob"));

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

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

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

      //Gleitkomma-Typ
      System.out.println("my_binary_float=" + rs.getFloat("my_binary_float"));
      System.out.println("my_binary_double=" + rs.getDouble("my_binary_double"));
      System.out.println("my_float=" + rs.getDouble("my_float"));
      System.out.println("my_double_precision=" + rs.getDouble("my_double_precision"));
      System.out.println("my_real=" + rs.getDouble("my_real"));

      //Festpunkttyp
      System.out.println("my_fixed_point_number=" + rs.getBigDecimal("my_fixed_point_number"));
      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.getTimestamp("my_date"));
      System.out.println("my_timestamp=" + rs.getTimestamp("my_timestamp").toInstant());
      System.out.println("my_timestamp_with_time_zone=" + rs.getTimestamp("my_timestamp_with_time_zone").toInstant());
    }

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

  //Rufen Sie den Namen des JDBC-Typs ab
  private static String getJdbcTypeName(int type) throws IllegalAccessException {
    //Suche nach Java-Standard-JDBC-Typ
    Field[] fs = Types.class.getDeclaredFields();
    for (Field f : fs) {
      if (type == f.getInt(null)) {
        return f.getName();
      }
    }
    //Suche nach JDBC-Typ der Oracle-Erweiterung
    fs = OracleTypes.class.getDeclaredFields();
    for (Field f : fs) {
      if (type == f.getInt(null)) {
        return "OracleTypes." + f.getName();
      }
    }
    //Da es keinen passenden JDBC-Typ gab, wird der Typwert in eine Zeichenfolge konvertiert und zurückgegeben.
    return "" + type;
  }
}

Ausführungsergebnis

Mit Gradles Laufaufgabe ausführen.

$ gradle run
Starting a Gradle Daemon (subsequent builds will be faster)

> 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-Datenbankspezifischer SQL-Typ-Java-Objekttyp
MY_CHAR - CHAR - CHAR - java.lang.String
MY_VARCHAR2 - VARCHAR - VARCHAR2 - java.lang.String
MY_CLOB - CLOB - CLOB - oracle.jdbc.OracleClob
MY_RAW - VARBINARY - RAW - [B
MY_BLOB - BLOB - BLOB - oracle.jdbc.OracleBlob
MY_NUMBER_1 - NUMERIC - NUMBER - java.math.BigDecimal
MY_NUMBER_38 - NUMERIC - NUMBER - java.math.BigDecimal
MY_SMALLINT - NUMERIC - NUMBER - java.math.BigDecimal
MY_INTEGER - NUMERIC - NUMBER - java.math.BigDecimal
MY_BINARY_FLOAT - OracleTypes.BINARY_FLOAT - BINARY_FLOAT - java.lang.Float
MY_BINARY_DOUBLE - OracleTypes.BINARY_DOUBLE - BINARY_DOUBLE - java.lang.Double
MY_FLOAT - NUMERIC - NUMBER - java.lang.Double
MY_DOUBLE_PRECISION - NUMERIC - NUMBER - java.lang.Double
MY_REAL - NUMERIC - NUMBER - java.lang.Double
MY_FIXED_POINT_NUMBER - NUMERIC - NUMBER - java.math.BigDecimal
MY_NUMERIC - NUMERIC - NUMBER - java.math.BigDecimal
MY_DECIMAL - NUMERIC - NUMBER - java.math.BigDecimal
MY_DATE - TIMESTAMP - DATE - java.sql.Timestamp
MY_TIMESTAMP - TIMESTAMP - TIMESTAMP - oracle.sql.TIMESTAMP
MY_TIMESTAMP_WITH_TIME_ZONE - OracleTypes.TIMESTAMPTZ - TIMESTAMP WITH TIME ZONE - oracle.sql.TIMESTAMPTZ

Spaltenname-Spaltenwert
my_char=Hello   
my_varchar2=Hello
my_clob=oracle.sql.CLOB@7c711375
my_raw=[-54, -2, -70, -66]
my_blob=oracle.sql.BLOB@3a44431a
my_number_1=true
my_number_38=12345678901234567890123456789012345678
my_smallint=32767
my_integer=2147483647
my_binary_float=123.0001
my_binary_double=123.0001
my_float=123.0001
my_double_precision=123.0001
my_real=123.0001
my_fixed_point_number=123.0001
my_numeric=123.0001
my_decimal=123.0001
my_date=2001-02-03 04:05:06.0
my_timestamp=2001-02-02T19:05:06.999999999Z
my_timestamp_with_time_zone=2001-02-03T04:05:06.999999999Z

BUILD SUCCESSFUL in 16s
2 actionable tasks: 2 executed

Boolescher Typ der Oracle-Datenbank

Oracle Database JDBC-Entwicklerhandbuch, 12c Release 2 \ (12 \ .2 ) \ - Zugriff auf und Bearbeitung von Oracle-Daten](https://docs.oracle.com/cd/E82638_01/jjdbc/accessing-and- Manipulieren von Oracle-Daten.html # GUID-EE0C380B-AB3E-4D1C-B02F-E3E599C72F91)

Da der BOOLEAN-Datenbanktyp nicht vorhanden ist, wird bei Verwendung von getBoolean immer eine Datentypkonvertierung durchgeführt. Die getBoolean-Methode wird nur für Spalten für Zahlen unterstützt. Wenn getBoolean auf solche Spalten angewendet wird, werden 0 (Null) -Werte als falsch und alle anderen Werte als wahr interpretiert. Bei Anwendung auf einen anderen Spaltentyp gibt getBoolean die Ausnahme java.lang.NumberFormatException zurück.

Referenzmaterial

Recommended Posts

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 Abrufen der wichtigsten JDBC-Typwerte in der Java + H2-Datenbank
Beispielquellcode zum Ermitteln des minimalen gemeinsamen Vielfachen mehrerer Werte in Java
Java-Codebeispiel zum Erfassen und Anzeigen von DBLINK-Quell- und Zieldaten in Oracle Database mithilfe von DBLINK
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
So ermitteln Sie die Länge einer Audiodatei mit Java
So erhalten Sie das Datum mit Java
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
AndroidStudio Verweisen wir auf C ++ im Modul anderer Projekte (Java / Kotlin).
Bedingte Verzweigung des Ergebnisses einer SQL-Anweisung, die nur eine in Java durchsucht
[Java] So erhalten Sie die URL der Übergangsquelle
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
Beispielcode zum Konvertieren von List in List <String> in Java Stream
[Java] So erhalten Sie den Maximalwert von HashMap
Quelle zum Abrufen der Umleitungsquell-URL in Java
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Beispielcode zum Zuweisen eines Werts in der Eigenschaftendatei zu einem Feld des erwarteten Typs
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Eine kurze Erklärung der fünf Arten von Java Static
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
Siehe C ++ im Android Studio-Modul (Java / Kotlin)
Java-Quellbeispiel für SELECT und Anzeige von CLOB (Oracle Database + Java)
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
So leiten Sie den letzten Tag des Monats in Java ab
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
So erhalten Sie die ID des automatisch inkrementierten PRIMAY-Schlüssels in MyBatis
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab
Beispielcode mit JMustache, der Moustache-Vorlagen-Engine in Java
So erhöhen Sie den Wert von Map in einer Zeile in Java
SQL zum Abrufen der Schemaliste (Oracle / MySQL / PostgreSQL / SQLServer / Cassandra)
Errate den Zeichencode in Java
Liste der in Java 9 hinzugefügten Typen
Ich habe versucht, ein Beispielprogramm mit dem Problem des Datenbankspezialisten für domänengesteuertes Design zu erstellen
Was ich getan habe, um den Oracle Certified Java Programmer, Silver SE 8, zu erhalten
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
So erhalten Sie den Einstellungswert (Eigenschaftswert) aus der Datenbank in Spring Framework
Ab Java9 werden Klassenkonstruktoren, die primitiven Typen entsprechen, als veraltet markiert.
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
So erstellen Sie Ihre eigene Anmerkung in Java und erhalten den Wert
Finden Sie das Datum des Monatsendes in verschiedenen Sprachen (C #, Java, Ruby, Javascript, VBA, Excel, MySQL, SQLite3, Oracle).
Java-Referenz zum Verständnis in der Abbildung
[Java] Ermittelt den Tag eines bestimmten Tages
[Java] So erhalten Sie das aktuelle Verzeichnis
Ausgabe des Buches "Einführung in Java"
[Java] [Microsoft] Beachten Sie Folgendes, wenn Sie den SQL Server-JDBC-Treiber in eine JAR-Datei aufnehmen
Die Geschichte des Schreibens von Java in Emacs
Beispiel zum Entpacken einer gz-Datei in Java
Von Java nach C und von C nach Java in Android Studio
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
Erstellen eines Beispielprogramms mit dem Problem eines Datenbankspezialisten für DDD-Verbesserung 2
graphql-ruby: So erhalten Sie den Namen der Abfrage oder Mutation im Controller Hinweis
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
Fassen Sie den Lebenszyklus von Java-Objekten zusammen, die bei der Android-Entwicklung berücksichtigt werden müssen