Mivel az SQL típusok és a Java típusok különböznek egymástól, ezért a paraméter átadás megoldásához szükséges, hogy új úgynevezett JDBC típusokatat vezessünk be, melyek reprezentálják az SQL típusokat. Ezeket a típusokat a java.sql.Types osztály definiálja. A már felépített kapcsolaton keresztül lehetőségünk nyílik arra, hogy mindenféle hasznos információkat kérdezzünk le az adatbázisunkról, illetve a lekérdezés eredménytáblájáról. Előbbit a DatabaseMetaData interfészen, utóbbit a ResultSetMetaData interfészen keresztül kérhetjük le.
A DatabaseMetaData interfészt megvalósító objektumhoz a Connection objektum getMetaData metódusával juthatunk mely az alábbi fontosabb metódusokat tartalmazza:
- getTypeInfo – egy ResultSet típusú objektumot ad vissza, mely tartalmazza az adatbázis illetve a JDBC meghajtó által támogatott JDBC típusokat.
- getUDTs – egy ResultSet típusú objektumot ad vissza, mely tartalmazza a felhasználói típusok leírását egy meghatározott keresési mintán belül. Felhasználói típusnak megadhatunk Types.DISTINCT, Types.STRUCT, és Types.JAVA_OBJECT típusokat, melyeket a későbbiekben részletezni fogok. Ezt a funkciót hiába próbáljuk MySQL esetén, nem fog visszaadni semmit csak egy üres ResultSet objektumot mivel nem támogatja a felhasználói adattípusokat, ellenben például a PostgreSQL adatbáziskezelővel szépen működik.
- getColumns – egy ResultSet típusú objektumot ad vissza, mely minden információt tartalmaz a táblákban lévő mezőkről egy meghatározott keresési mintán belül. Például: COLUMN_NAME, DATA_TYPE, TYPE_NAME, COLUMN_SIZE
A ResultSetMetaData interfészt megvalósító objektumhoz a ResultSet objektum getMetaData metódusával juthatunk mely az alábbi fontosabb metódusokat tartalmazza:
- getColumnType – egy integer értéket ad vissza, mely reprezentálja az SQL-beli típust.
- getColumnTypeName – egy String értéket ad vissza, mely megnevezi az SQL-beli típust.
Típusmegfeleltetés
Az alábbi táblázat megmutatja, hogy adott JDBC típusnak milyen Java típus felel meg:
JDBC Type | Java Type |
---|---|
CHAR | String |
VARCHAR | String |
LONGVARCHAR | String |
NUMERIC | java.math.BigDecimal |
DECIMAL | java.math.BigDecimal |
BIT | boolean |
BOOLEAN | boolean |
TINYINT | byte |
SMALLINT | short |
INTEGER | int |
BIGINT | long |
REAL | float |
FLOAT | double |
DOUBLE | double |
BINARY | byte[] |
VARBINARY | byte[] |
LONGVARBINARY | byte[] |
DATE | java.sql.Date |
TIME | java.sql.Time |
TIMESTAMP | java.sql.Timestamp |
CLOB | Clob |
BLOB | Blob |
ARRAY | Array |
DISTINCT | mapping of underlying type |
STRUCT | Struct |
REF | Ref |
DATALINK | java.net.URL |
JAVA_OBJECT | underlying Java class |
Az értékeket lekérdezni, beállítani illetve frissíteni a get<típus> , set<típus> és update<típus> kezdetű metódusokkal lehet.