Uveďte hlavní datové typy používané v JDBC a vysvětlete, jak souvisejí s datovými typy Java.
sobes.tech AI
Odpověď od AI
| SQL Datový typ | Java Datový typ | Popis |
|---|---|---|
CHAR, VARCHAR, LONGVARCHAR |
String |
Textové řetězce |
NUMERIC, DECIMAL |
BigDecimal |
Čísla s pevnou desetinnou čárkou |
BIT, BOOLEAN |
boolean |
Logické hodnoty |
TINYINT |
byte |
Celé číslo od -128 do 127 |
SMALLINT |
short |
Celé číslo od -32768 do 32767 |
INTEGER |
int |
Celé číslo |
BIGINT |
long |
Velké celé číslo |
REAL |
float |
Číslo s jednoduchou přesností |
FLOAT, DOUBLE |
double |
Číslo s dvojitou přesností |
BINARY, VARBINARY, LONGVARBINARY |
byte[] |
Binární data |
DATE |
java.sql.Date |
Datum (rok, měsíc, den) |
TIME |
java.sql.Time |
Čas (hodina, minuta, sekunda) |
TIMESTAMP |
java.sql.Timestamp |
Datum a čas s milisekundami |
BLOB |
java.sql.Blob |
Velký binární objekt |
CLOB |
java.sql.Clob |
Velký textový objekt |
ARRAY |
java.sql.Array |
Pole hodnot |
STRUCT |
java.sql.Struct |
Strukturovaný typ |
REF |
java.sql.Ref |
Odkaz na strukturovaný typ |
DATALINK |
java.net.URL |
Odkaz na externí zdroj |
JAVA_OBJECT |
Object |
Serializovaný Java objekt (závisí na implementaci) |
ROWID |
java.sql.RowId |
Identifikátor řádku (závisí na SGBD) |
NCHAR, NVARCHAR, LONGNVARCHAR |
String |
Národně lokalizované řetězce |
NCLOB |
java.sql.NClob |
Národně lokalizovaný velký textový objekt |
SQLXML |
java.sql.SQLXML |
XML data |
JDBC (Java Database Connectivity) specifikuje standardní SQL typy v třídě java.sql.Types. Tyto typy jsou reprezentovány jako číselné konstanty. JDBC ovladače mapují tyto SQL typy na vhodné Java typy při čtení dat z databáze (například pomocí metod getXXX() třídy ResultSet) a při zápisu dat do databáze (například pomocí metod setXXX() třídy PreparedStatement).
Mapování je určeno tím, jak konkrétní ovladač databáze implementuje převod mezi interními datovými typy databáze a standardními java.sql.Types, a následně na Java typy. Toto mapování je dokumentováno v specifikaci JDBC a může se mírně lišit mezi ovladači, i když hlavní mapování uvedené v tabulce je standardní.
Příklad načítání dat z ResultSet:
// Předpokládá se, že rs je 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");
Příklad nastavování parametrů v PreparedStatement:
// Předpokládá se, že pstmt je 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. pozice parametru (začíná od 1)
pstmt.setInt(2, id);
pstmt.setBigDecimal(3, value);
pstmt.setDate(4, date);
JDBC se snaží zajistit maximální kompatibilitu, ale pro specifické nebo vendor-specifické datové typy mohou být potřeba speciální přístupy, například použití getObject() / setObject() s konverzí typu nebo kontrolami instanceof.