├── 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;
}
}
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
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.