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.