Καταγράψτε τους βασικούς τύπους δεδομένων που χρησιμοποιούνται στο JDBC και εξηγήστε πώς σχετίζονται με τους τύπους δεδομένων στη Java.
sobes.tech AI
Απάντηση από AI
Οι βασικοί τύποι δεδομένων JDBC ορίζονται στην κλάση java.sql.Types. Αντιπροσωπεύουν τους τυπικούς τύπους SQL. Οι τύποι δεδομένων JVM στη Java ορίζονται στην προδιαγραφή της γλώσσας. Το JDBC παρέχει μια αντιστοίχιση (mapping) μεταξύ αυτών των δύο συνόλων τύπων.
Οι βασικοί τύποι στο java.sql.Types:
BOOLEANTINYINTSMALLINTINTEGERBIGINTREALFLOATDOUBLEDECIMALNUMERICCHARVARCHARLONGVARCHARDATETIMETIMESTAMPBINARYVARBINARYLONGVARBINARYBLOBCLOBNCHARNVARCHARLONGNVARCHARNCLOBSQLXML
Η αντιστοίχιση μεταξύ τύπων JDBC και τύπων Java κατά την λήψη δεδομένων (από το ResultSet):
| Τύπος JDBC | Τύπος Java (get) |
Σημειώσεις |
|---|---|---|
BOOLEAN, BIT |
boolean |
|
TINYINT |
byte |
|
SMALLINT |
short |
|
INTEGER |
int |
|
BIGINT |
long |
|
REAL |
float |
|
FLOAT, DOUBLE |
double |
|
DECIMAL, NUMERIC |
java.math.BigDecimal |
Συνιστάται |
CHAR, VARCHAR, LONGVARCHAR |
String |
|
DATE |
java.sql.Date |
|
TIME |
java.sql.Time |
|
TIMESTAMP |
java.sql.Timestamp |
|
BINARY, VARBINARY, LONGVARBINARY |
byte[] |
|
BLOB |
java.sql.Blob |
|
CLOB |
java.sql.Clob |
|
NCHAR, NVARCHAR, LONGNVARCHAR |
String |
|
NCLOB |
java.sql.NClob |
|
SQLXML |
java.sql.SQLXML |
Σημείωση: Για αριθμητικούς τύπους, εκτός από τους primitive τύπους, μπορούν να χρησιμοποιηθούν οι αντίστοιχες κλάσεις-περιτυλίγματα (Boolean, Byte, Short, Integer, Long, Float, Double) για την επεξεργασία τιμών NULL.
Η αντιστοίχιση κατά την εγκατάσταση δεδομένων (στο PreparedStatement): γενικά, χρησιμοποιείται η αντίστροφη αντιστοίχιση, αλλά υπάρχουν εξαιρέσεις και προτιμήσεις. Για παράδειγμα, για DECIMAL είναι καλύτερο να χρησιμοποιείτε BigDecimal.
Παράδειγμα χρήσης:
// Μέθοδος λήψης δεδομένων από το ResultSet
public String getStringValue(ResultSet rs, String columnName) throws SQLException {
// Λήψη string τιμής από τη στήλη
return rs.getString(columnName);
}
// Μέθοδος ρύθμισης παραμέτρου στο PreparedStatement
public void setIntValue(PreparedStatement ps, int parameterIndex, int value) throws SQLException {
// Ρύθμιση ακέραιας τιμής
ps.setInt(parameterIndex, value);
}