Sobes.tech
Middle

Wymień główne typy danych używane w JDBC i wyjaśnij, jak są one powiązane z typami danych Java.

sobes.tech AI

Odpowiedź od AI

Typ danych SQL Typ danych Java Opis
CHAR, VARCHAR, LONGVARCHAR String Ciągi znaków
NUMERIC, DECIMAL BigDecimal Liczby z ustaloną kropką dziesiętną
BIT, BOOLEAN boolean Wartości logiczne
TINYINT byte Liczba całkowita od -128 do 127
SMALLINT short Liczba całkowita od -32768 do 32767
INTEGER int Liczba całkowita
BIGINT long Duża liczba całkowita
REAL float Liczba zmiennoprzecinkowa pojedynczej precyzji
FLOAT, DOUBLE double Liczba zmiennoprzecinkowa podwójnej precyzji
BINARY, VARBINARY, LONGVARBINARY byte[] Dane binarne
DATE java.sql.Date Data (rok, miesiąc, dzień)
TIME java.sql.Time Czas (godzina, minuta, sekunda)
TIMESTAMP java.sql.Timestamp Data i czas z milisekundami
BLOB java.sql.Blob Obiekt binarny dużego rozmiaru
CLOB java.sql.Clob Obiekt tekstowy dużego rozmiaru
ARRAY java.sql.Array Tablica wartości
STRUCT java.sql.Struct Typ strukturalny
REF java.sql.Ref Odwołanie do typu strukturalnego
DATALINK java.net.URL Odnośnik do zewnętrznego zasobu
JAVA_OBJECT Object Zserializowany obiekt Java (zależy od implementacji)
ROWID java.sql.RowId Identyfikator wiersza (zależy od SGBD)
NCHAR, NVARCHAR, LONGNVARCHAR String Narodowe ciągi znaków
NCLOB java.sql.NClob Narodowy obiekt tekstowy dużego rozmiaru
SQLXML java.sql.SQLXML Dane XML

Specyfikacja JDBC (Java Database Connectivity) definiuje standardowe typy SQL w klasie java.sql.Types. Typy te są stałymi numerycznymi. Sterowniki JDBC mapują te typy SQL na odpowiednie typy danych Java podczas odczytu danych z bazy (np. za pomocą metod getXXX() z ResultSet) i podczas zapisu danych do bazy (np. za pomocą metod setXXX() z PreparedStatement).

Mapowanie jest określane przez sposób, w jaki sterownik JDBC konkretnej bazy danych implementuje mapowanie między wewnętrznymi typami danych bazy a java.sql.Types, a następnie na typy danych Java. To mapowanie jest udokumentowane w specyfikacji JDBC i może się nieznacznie różnić między sterownikami, choć główne mapowania przedstawione w tabeli są standardowe.

Przykład odczytu danych z ResultSet:

// Zakłada się, że rs to ResultSet
String name = rs.getString("column_name_varchar");
int id = rs.getInt("column_name_integer");
BigDecimal value = rs.getBigDecimal("column_name_numeric");
Date date = rs.getDate("column_name_date");

Przykład ustawiania parametrów w PreparedStatement:

// Zakłada się, że pstmt to PreparedStatement
String name = "Test Name";
int id = 123;
BigDecimal value = new BigDecimal("100.50");
Date date = new Date(System.currentTimeMillis());

pstmt.setString(1, name); // 1 to numer parametru (zaczyna się od 1)
pstmt.setInt(2, id);
pstmt.setBigDecimal(3, value);
pstmt.setDate(4, date);

JDBC stara się zapewnić maksymalną kompatybilność, ale dla specyficznych lub zależnych od dostawcy typów danych mogą być potrzebne specjalne podejścia lub użycie metod getObject() / setObject() z konwersją typów lub sprawdzeniem za pomocą instanceof.