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. ..
├── 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();
}
}
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
Recommended Posts