Sobes.tech
Middle

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.