Uveďte hlavné typy údajov používané v JDBC a vysvetlite, ako sú spojené s dátovými typmi Java.
sobes.tech AI
Odpoveď od AI
| SQL dátové typy | Java dátové typy | Popis |
|---|---|---|
CHAR, VARCHAR, LONGVARCHAR |
String |
Reťazce znakov |
NUMERIC, DECIMAL |
BigDecimal |
Čísla s pevnou čiarkou |
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 |
Veľké celé číslo |
REAL |
float |
Číslo s plávajúcou desatinnou čiarkou s jednoduchou presnosťou |
FLOAT, DOUBLE |
double |
Číslo s plávajúcou desatinnou čiarkou s dvojitou presnosťou |
BINARY, VARBINARY, LONGVARBINARY |
byte[] |
Binárne dáta |
DATE |
java.sql.Date |
Dátum (rok, mesiac, deň) |
TIME |
java.sql.Time |
Čas (hodina, minúta, sekunda) |
TIMESTAMP |
java.sql.Timestamp |
Dátum a čas s milisekundami |
BLOB |
java.sql.Blob |
Binárny objekt veľkého objemu |
CLOB |
java.sql.Clob |
Reťazcový objekt veľkého objemu |
ARRAY |
java.sql.Array |
Pole hodnôt |
STRUCT |
java.sql.Struct |
Štruktúrovaný typ |
REF |
java.sql.Ref |
Odkaz na štruktúrovaný typ |
DATALINK |
java.net.URL |
Odkaz na externý zdroj |
JAVA_OBJECT |
Object |
Serializovaný Java objekt (závisí od implementácie) |
ROWID |
java.sql.RowId |
Identifikátor riadku (závisí od DBMS) |
NCHAR, NVARCHAR, LONGNVARCHAR |
String |
Národné znaky reťazce |
NCLOB |
java.sql.NClob |
Národný reťazcový objekt veľkého objemu |
SQLXML |
java.sql.SQLXML |
XML dáta |
JDBC (Java Database Connectivity) špecifikuje štandardné SQL typy dát v triede java.sql.Types. Tieto typy dát predstavujú číselné konštanty. JDBC ovládače mapujú tieto SQL typy na vhodné Java dátové typy pri čítaní dát z databázy (napríklad pomocou metód getXXX() triedy ResultSet) a pri zápise dát do databázy (napríklad pomocou metód setXXX() triedy PreparedStatement).
Väzba je určená tým, ako konkrétny ovládač databázy implementuje mapovanie medzi vnútornými typmi databázy a štandardnými java.sql.Types, a následne na Java dátové typy. Toto mapovanie je zdokumentované v špecifikácii JDBC a môže sa mierne líšiť medzi ovládačmi, hoci základné mapovania uvedené v tabuľke sú štandardné.
Príklad získania dát z ResultSet:
// Predpokladá sa, ž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");
Príklad nastavenia parametrov v PreparedStatement:
// Predpokladá sa, ž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 - číslo parametra (začína od 1)
pstmt.setInt(2, id);
pstmt.setBigDecimal(3, value);
pstmt.setDate(4, date);
JDBC sa snaží zabezpečiť maximálnu kompatibilitu, ale pre špecifické alebo vendor-špecifické typy dát môžu byť potrebné špeciálne prístupy alebo použitie metód getObject() / setObject() s následným prevedením typov alebo kontrolou pomocou instanceof.