Καταγράψτε τους βασικούς τύπους δεδομένων που χρησιμοποιούνται στο JDBC και εξηγήστε πώς σχετίζονται με τους τύπους δεδομένων της Java.
sobes.tech AI
Απάντηση από AI
| Τύπος δεδομένων SQL | Τύπος δεδομένων Java | Περιγραφή |
|---|---|---|
CHAR, VARCHAR, LONGVARCHAR |
String |
Συμβολοσειρές χαρακτήρων |
NUMERIC, DECIMAL |
BigDecimal |
Αριθμοί με σταθερό σημείο |
BIT, BOOLEAN |
boolean |
Λογικές τιμές |
TINYINT |
byte |
Ολόκληρος αριθμός από -128 έως 127 |
SMALLINT |
short |
Ολόκληρος αριθμός από -32768 έως 32767 |
INTEGER |
int |
Ολόκληρος αριθμός |
BIGINT |
long |
Μεγάλος ολόκληρος αριθμός |
REAL |
float |
Αριθμός κινητής υποδιαστολής απλής ακρίβειας |
FLOAT, DOUBLE |
double |
Αριθμός κινητής υποδιαστολής διπλής ακρίβειας |
BINARY, VARBINARY, LONGVARBINARY |
byte[] |
Δεδομένα δυαδικών |
DATE |
java.sql.Date |
Ημερομηνία (έτος, μήνας, ημέρα) |
TIME |
java.sql.Time |
Ώρα (ώρα, λεπτό, δευτερόλεπτο) |
TIMESTAMP |
java.sql.Timestamp |
Ημερομηνία και ώρα με milliseconds |
BLOB |
java.sql.Blob |
Μεγάλο δυαδικό αντικείμενο |
CLOB |
java.sql.Clob |
Μεγάλο κειμενικό αντικείμενο |
ARRAY |
java.sql.Array |
Πίνακας τιμών |
STRUCT |
java.sql.Struct |
Δομημένος τύπος |
REF |
java.sql.Ref |
Αναφορά σε δομημένο τύπο |
DATALINK |
java.net.URL |
Σύνδεσμος σε εξωτερική πηγή |
JAVA_OBJECT |
Object |
Αποθηκευμένο αντικείμενο Java (εξαρτάται από την υλοποίηση) |
ROWID |
java.sql.RowId |
Αναγνωριστικό γραμμής (εξαρτάται από το SGBD) |
NCHAR, NVARCHAR, LONGNVARCHAR |
String |
Εθνικοποιημένες συμβολοσειρές |
NCLOB |
java.sql.NClob |
Εθνικοποιημένο μεγάλο κειμενικό αντικείμενο |
SQLXML |
java.sql.SQLXML |
Δεδομένα XML |
Το JDBC (Java Database Connectivity) ορίζει τα πρότυπα τύπων SQL στην κλάση java.sql.Types. Αυτοί οι τύποι αντιπροσωπεύονται από αριθμητικές σταθερές. Οι οδηγοί JDBC αντιστοιχίζουν αυτούς τους τύπους SQL σε κατάλληλους τύπους Java κατά την ανάγνωση δεδομένων από τη βάση (π.χ. με τις μεθόδους getXXX() της ResultSet) και κατά την εγγραφή δεδομένων στη βάση (π.χ. με τις μεθόδους setXXX() της PreparedStatement).
Η αντιστοιχία καθορίζεται από το πώς ο συγκεκριμένος οδηγός βάσης δεδομένων υλοποιεί την απεικόνιση μεταξύ των εσωτερικών τύπων δεδομένων της βάσης και των java.sql.Types, και στη συνέχεια στους τύπους δεδομένων Java. Αυτή η απεικόνιση τεκμηριώνεται στην προδιαγραφή JDBC και μπορεί να διαφέρει ελαφρώς μεταξύ των οδηγών, αν και οι βασικές αντιστοιχίσεις στον πίνακα είναι τυπικές.
Παράδειγμα ανάγνωσης δεδομένων από το ResultSet:
// Υποθέτοντας ότι το rs είναι ένα 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");
Παράδειγμα ρύθμισης παραμέτρων στο PreparedStatement:
// Υποθέτοντας ότι το pstmt είναι ένα 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 η θέση της παραμέτρου (αρχίζει από 1)
pstmt.setInt(2, id);
pstmt.setBigDecimal(3, value);
pstmt.setDate(4, date);
Το JDBC προσπαθεί να διασφαλίσει τη μέγιστη συμβατότητα, αλλά για ειδικούς ή vendor-εξαρτώμενους τύπους δεδομένων μπορεί να απαιτούνται ειδικές προσεγγίσεις, όπως η χρήση των getObject() / setObject() με μετατροπές τύπων ή ελέγχους με instanceof.