jdbc resultset how use java resultset retrieve data
Αυτό το σεμινάριο εξηγεί πώς να χρησιμοποιήσετε το JDBC ResultSet για την ανάκτηση δεδομένων. Θα μάθουμε επίσης για τις διεπαφές ResultSetMetaData και DatabaseMetaData με παραδείγματα:
Στο JDBC DriverManager φροντιστήριο του Εκμάθηση σειράς JDBC , μάθαμε πώς να χρησιμοποιούμε το JDBC DriverManager και τις μεθόδους του, JDBC PreparedStatement σε εφαρμογές Java.
Σε αυτό το σεμινάριο, θα συζητήσουμε τις υπόλοιπες διεπαφές στο JDBC. Έχουμε καλύψει τις διεπαφές Statement, PreparedStatement και CallableStatement στα προηγούμενα σεμινάρια μας.
Εδώ, θα μάθουμε για τις διεπαφές JDBC ResultSet, ResultSetMetaData και DatabaseMetaData, τις μεθόδους τους και τον τρόπο χρήσης των μεθόδων στο πρόγραμμα Java.
Τι θα μάθετε:
Διεπαφή ResultSet JDBC
Το ResultSet Interface υπάρχει στο πακέτο java.sql. Χρησιμοποιείται για την αποθήκευση των δεδομένων που επιστρέφονται από τον πίνακα βάσης δεδομένων μετά την εκτέλεση των δηλώσεων SQL στο πρόγραμμα Java. Το αντικείμενο του ResultSet διατηρεί το σημείο του κέρσορα στα δεδομένα αποτελεσμάτων. Από προεπιλογή, ο δρομέας τοποθετείται πριν από την πρώτη σειρά των δεδομένων αποτελεσμάτων.
Η επόμενη () μέθοδος χρησιμοποιείται για να μετακινήσετε τον κέρσορα στην επόμενη θέση προς τα εμπρός. Θα επιστρέψει FALSE εάν δεν υπάρχουν άλλες εγγραφές. Ανακτά δεδομένα καλώντας τη μέθοδο executeQuery () χρησιμοποιώντας οποιοδήποτε από τα αντικείμενα της δήλωσης. Μπορεί να είναι αντικείμενο Statement ή PreparedStatement ή CallableStatement. Οι διεπαφές PreparedStatement και CallableStatement είναι οι δευτερεύουσες διεπαφές της διεπαφής Statement.
Διεπαφή δήλωσης
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Διασύνδεση PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Μπορούμε να χρησιμοποιήσουμε τη μέθοδο getX () για να λάβουμε τα δεδομένα των στηλών ενώ επαναλαμβάνουμε τα αποτελέσματα όπου το Χ - είναι ο τύπος δεδομένων της στήλης. Μπορούμε να χρησιμοποιήσουμε είτε ονόματα στηλών είτε ευρετήριο για να λάβουμε τις τιμές χρησιμοποιώντας μεθόδους getX ().
while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); }
Μπορούμε επίσης να αναφέρουμε τον αριθμό ευρετηρίου της στήλης αντί του ονόματος στήλης στις μεθόδους getX ().
while(rs1.next()) { int empNum = rs1.getInt(1); String lastName = rs1.getString(2); String firstName = rs1.getString(3); String email = rs1.getString(4); String deptNum = rs1.getString(5); String salary = rs1.getString(6); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); }
Τύποι ResultSet
Από προεπιλογή, μπορούμε να επαναλάβουμε τα δεδομένα / τιμές στο ResultSet που έχουν επιστραφεί ως έξοδο της εκτελεσμένης δήλωσης SQL προς τα εμπρός. Μπορούμε να επαναλάβουμε τις τιμές σε άλλες κατευθύνσεις χρησιμοποιώντας το Scrollable ResultSet. Μπορούμε να καθορίσουμε τον τύπο και τη συνάφεια του ResultSet κατά τη δημιουργία αντικειμένων Statement, PreparedStatement και CallableStatement.
Υπάρχουν 3 τύποι στο ResultSet. Αυτοί είναι:
- TYPE_FORWARD_ONLY: Είναι η προεπιλεγμένη επιλογή, όπου ο δρομέας κινείται από την αρχή στο τέλος, δηλαδή προς την εμπρός κατεύθυνση.
- TYPE_SCROLL_INSENSITIVE: Σε αυτόν τον τύπο, θα κάνει τον κέρσορα να κινείται προς τα εμπρός και προς τα πίσω. Εάν πραγματοποιήσουμε αλλαγές στα δεδομένα κατά την επανάληψη των αποθηκευμένων δεδομένων, δεν θα ενημερωθεί στο σύνολο δεδομένων εάν κάποιος αλλάξει τα δεδομένα στο DB. Επειδή το σύνολο δεδομένων έχει τα δεδομένα από τη στιγμή που το ερώτημα SQL επιστρέφει τα δεδομένα.
- TYPE_SCROLL_SENSITIVE: Είναι παρόμοιο με το TYPE_SCROLL_INSENSITIVE, η διαφορά είναι αν κάποιος ενημερώσει τα δεδομένα αφού το SQL Query επιστρέψει τα δεδομένα, ενώ επαναλαμβάνοντας θα αντικατοπτρίζει τις αλλαγές στο σύνολο δεδομένων.
ResultSet ταυτόχρονη
Υπάρχουν 2 τρόποι ταυτότητας στο ResultSet. Αυτοί είναι:
- ResultSet.CONCUR_READ_ONLY: Είναι η προεπιλεγμένη λειτουργία ταυτόχρονης λειτουργίας. Μπορούμε να διαβάσουμε μόνο τα δεδομένα στο ResultSet. Η ενημέρωση δεν ισχύει.
- ResultSet.CONCUR_UPDATABLE: Μπορούμε να ενημερώσουμε τα δεδομένα στο αντικείμενο ResultSet.
Ορισμένες βάσεις δεδομένων δεν υποστηρίζουν τη λειτουργία ταυτόχρονης λειτουργίας για όλους τους τύπους ResultSet. Σε αυτήν την περίπτωση, πρέπει να ελέγξουμε αν υποστηρίζουν τον επιθυμητό τύπο και λειτουργία ταυτόχρονης λειτουργίας χρησιμοποιώντας τη μέθοδο supportResultSetConcurrency ().
Μέθοδοι στη διεπαφή ResultSet
Υπάρχουν 4 κατηγορίες μεθόδων ResultSet. Αυτοί είναι:
- Μέθοδοι πλοήγησης
- Μέθοδοι λήψης
- Μέθοδοι ρύθμισης
- Διάφορες μέθοδοι
Πρώτον, θα συζητήσουμε τις μεθόδους πλοήγησης και στη συνέχεια θα προχωρήσουμε περαιτέρω.
# 1) Μέθοδοι πλοήγησης
Αυτή η μέθοδος χρησιμοποιείται για να μετακινήσετε τον κέρσορα γύρω από το σύνολο δεδομένων.
- Boolean απόλυτο (int σειρά): Χρησιμοποιείται για να μετακινήσετε τον κέρσορα στην καθορισμένη σειρά που αναφέρεται στην παράμετρο και να επιστρέψει αληθής εάν η λειτουργία είναι επιτυχής αλλιώς επιστρέφει ψευδής.
- Void afterLast (): Κάνει το δρομέα ResultSet να κινείται μετά την τελευταία σειρά.
- Void beforeFirst (): Κάνει το δρομέα ResultSet να κινείται πριν από την πρώτη σειρά.
- Boolean πρώτα (): Κάνει το δρομέα ResultSet να μετακινηθεί στην πρώτη σειρά. Επιστρέφει True εάν η λειτουργία είναι επιτυχής αλλιώς False.
- Boolean τελευταία (): Κάνει το δρομέα ResultSet να μετακινηθεί στην τελευταία σειρά. Επιστρέφει True εάν η λειτουργία είναι επιτυχής αλλιώς False.
- Boolean επόμενο (): Κάνει τον κέρσορα ResultSet να μετακινηθεί στην επόμενη σειρά. Επιστρέφει True εάν υπάρχουν περισσότερες εγγραφές και False εάν δεν υπάρχουν περισσότερες εγγραφές.
- Boolean προηγούμενο (): Κάνει το δρομέα ResultSet να μετακινηθεί στην προηγούμενη σειρά. Επιστρέφει True εάν η λειτουργία είναι επιτυχής αλλιώς False.
- Boolean συγγενής (): Μετακινεί τον κέρσορα στον δεδομένο αριθμό σειρών είτε προς τα εμπρός είτε προς τα πίσω.
- Int getRow (): Επιστρέφει τον τρέχοντα αριθμό σειράς που δείχνει το αντικείμενο ResultSet τώρα.
- Void moveToCurrentRow (): Μετακινεί τον κέρσορα πίσω στην τρέχουσα σειρά, εάν βρίσκεται επί του παρόντος στη σειρά εισαγωγής.
- Void moveToInsertRow (): Μετακινεί τον κέρσορα στη συγκεκριμένη σειρά για να εισαγάγει τη σειρά στη βάση δεδομένων. Θυμάται την τρέχουσα θέση του δρομέα. Έτσι μπορούμε να χρησιμοποιήσουμε τη μέθοδο moveToCurrentRow () για να μετακινήσουμε τον κέρσορα στην τρέχουσα σειρά μετά την εισαγωγή.
Σε αυτό το σεμινάριο, όλα τα προγράμματα είναι γραμμένα σε Java. Έχουμε χρησιμοποιήσει την έκδοση Java 8 και το Oracle DB.
>> Μπορείτε να πραγματοποιήσετε λήψη του λογισμικού Oracle από εδώ
>> Μπορείτε να πραγματοποιήσετε λήψη της έκδοσης Java από 8 από εδώ
Έχει τη διαδικασία εγκατάστασης Java βήμα προς βήμα.
Παράδειγμα προγράμματος JDBC ResultSet: (Χρήση μεθόδων πλοήγησης)
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ResultSet_Example { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub //Select query String select_query = 'select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:X E')) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll sensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Moving the cursor to point first row rs.first(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst(); System.out.println('Cursor is pointing at before the first row. Use next() to move in forward direction'); //Moving the cursor to point first row using next() rs.next(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point after last row rs.afterLast(); System.out.println('Cursor is pointing at after the last row. Use previous() to move in backward direction'); //Moving the cursor to point last row using previous() rs.previous(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point third row rs.absolute(3); System.out.println('Cursor is pointing at 3rd row'); System.out.println('THIRD ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point previous row of third row rs.relative(-1); System.out.println('Cursor is pointing to the 1 row previous to the 3rd row'); System.out.println('Second ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point 4th row after the 2nd row rs.relative(4); System.out.println('Cursor is pointing to the 4th row after the 2nd row'); System.out.println('SIXTH ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point current row System.out.println(' Current Row = ' + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
ΠΑΡΑΓΩΓΗ:
Δεδομένα στον πίνακα Employee_details
Εξήγηση:
Στο παραπάνω πρόγραμμα έχουμε εφαρμόσει τις μεθόδους πρώτου (), τελευταίου (), BeforeFirst (), afterLast (), next (), previous (), absolute (), relatif () και getRow () στο ResultSet. Για να χρησιμοποιήσετε αυτές τις μεθόδους ορίζουμε τιμές ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE στη μέθοδο προετοιμασίας.
Στη συνέχεια, θα συζητήσουμε ποιες είναι οι μέθοδοι λήψης στο ResultSet:
# 2) Μέθοδοι λήψης
Το ResultSet έχει αποθηκεύσει τα δεδομένα του πίνακα από τη βάση δεδομένων. Οι μέθοδοι λήψης χρησιμοποιούνται για τη λήψη των τιμών του πίνακα στο ResultSet. Για αυτό, πρέπει να περάσουμε είτε την τιμή ευρετηρίου στήλης είτε το όνομα στήλης.
Ακολουθούν οι μέθοδοι λήψης στο ResultSet:
- int getInt (int ColumnIndex): Χρησιμοποιείται για τη λήψη της τιμής του καθορισμένου ευρετηρίου στηλών ως τύπου δεδομένων int.
- float getFloat (int ColumnIndex): Χρησιμοποιείται για να πάρει την τιμή του καθορισμένου δείκτη στήλης ως τύπος δεδομένων float.
- java.sql.date getDate (int ColumnIndex): Χρησιμοποιείται για να πάρει την τιμή του καθορισμένου δείκτη στήλης ως τιμή ημερομηνίας.
- int getInt (String ColumnName): Χρησιμοποιείται για να πάρει την τιμή της καθορισμένης στήλης ως τύπο δεδομένων int.
- float getFloat (Όνομα συμβολοσειράς): Χρησιμοποιείται για να πάρει την τιμή της καθορισμένης στήλης ως τύπο δεδομένων float.
- Java.sql.date getDate (String ColumnName): Χρησιμοποιείται για να πάρει την τιμή της καθορισμένης στήλης ως τιμή ημερομηνίας.
Υπάρχουν μέθοδοι λήψης για όλους τους πρωτόγονους τύπους δεδομένων (Boolean, long, double) και String επίσης στη διεπαφή ResultSet. Μπορούμε να αποκτήσουμε έναν πίνακα και δυαδικό τύπο δεδομένων επίσης από τη βάση δεδομένων. Έχει επίσης μεθόδους για αυτό.
# 3) Μέθοδοι Setter / Updater
Μπορούμε να ενημερώσουμε την τιμή στη βάση δεδομένων χρησιμοποιώντας τις μεθόδους ResultSet Updater. Είναι παρόμοιο με τις μεθόδους Getter, αλλά εδώ πρέπει να περάσουμε τις τιμές / δεδομένα για τη συγκεκριμένη στήλη για ενημέρωση στη βάση δεδομένων.
Ακολουθούν οι μέθοδοι ενημέρωσης στο ResultSet:
- void updateInt (int ColumnIndex, int Value): Χρησιμοποιείται για την ενημέρωση της τιμής του καθορισμένου δείκτη στήλης με τιμή int.
- void updateFloat (int ColumnIndex, float f): Χρησιμοποιείται για την ενημέρωση της τιμής του καθορισμένου δείκτη στήλης με την τιμή float.
- void updateDate (int ColumnIndex, Date d): Χρησιμοποιείται για την ενημέρωση της τιμής του καθορισμένου δείκτη στήλης με την τιμή ημερομηνίας.
- void updateInt (String ColumnName, int Value): Χρησιμοποιείται για την ενημέρωση της τιμής της καθορισμένης στήλης με τη δεδομένη τιμή int.
- void updateFloat (String ColumnName, float f): Χρησιμοποιείται για την ενημέρωση της τιμής της καθορισμένης στήλης με τη δεδομένη τιμή float.
- Java.sql.date getDate (String ColumnName): Χρησιμοποιείται για την ενημέρωση της τιμής της καθορισμένης στήλης με τη δεδομένη τιμή ημερομηνίας.
Υπάρχουν μέθοδοι Updater για όλους τους πρωτόγονους τύπους δεδομένων (Boolean, long, double) και String επίσης στη διεπαφή ResultSet.
Οι μέθοδοι Updater απλώς ενημερώνουν τα δεδομένα στο αντικείμενο ResultSet. Οι τιμές θα ενημερωθούν στο DB αφού καλέσετε τη μέθοδο insertRow ή updateRow.
Ενημέρωση σειράς:
Μπορούμε να ενημερώσουμε τα δεδομένα στη σειρά καλώντας τις μεθόδους updateX (), περνώντας το όνομα της στήλης ή το ευρετήριο και τις τιμές για ενημέρωση. Μπορούμε να χρησιμοποιήσουμε οποιονδήποτε τύπο δεδομένων στη θέση X στη μέθοδο updateX. Μέχρι τώρα, έχουμε ενημερώσει τα δεδομένα στο αντικείμενο ResultSet. Για να ενημερώσετε τα δεδομένα στο DB, πρέπει να καλέσετε τη μέθοδο updateRow ().
Εισαγωγή σειράς:
Πρέπει να χρησιμοποιήσουμε το moveToInsertRow () για να μετακινήσουμε τον κέρσορα για να εισαγάγουμε μια νέα σειρά. Το έχουμε ήδη καλύψει στην ενότητα Μέθοδοι πλοήγησης. Στη συνέχεια, πρέπει να καλέσουμε τη μέθοδο updateX () για να προσθέσουμε τα δεδομένα στη σειρά. Πρέπει να παρέχουμε δεδομένα για όλες τις στήλες αλλιώς θα χρησιμοποιήσει την προεπιλεγμένη τιμή της συγκεκριμένης στήλης.
Μετά την ενημέρωση των δεδομένων, πρέπει να καλέσουμε τη μέθοδο insertRow (). Στη συνέχεια, χρησιμοποιήστε τη μέθοδο moveToCurrentRow (), για να επαναφέρετε τη θέση του δρομέα στη σειρά που βρισκόμασταν πριν ξεκινήσουμε να εισάγουμε μια νέα σειρά.
Παράδειγμα ResultSet:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ResultSet_Example1 { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub String select_query = 'select empnum,lastName,firstName from employee_details'; String insert_query = 'insert into employee_details values(?,?,?,?,?,?)'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll insensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Moving the cursor to point last row of the table rs.last(); System.out.println('LAST ROW: Before inserting new Employee'); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); // Setting the values to insert in the EMPLOYEE_DETAILS Table //Moving the cursor to point insert a row to table rs.moveToInsertRow(); //Update EMPNUM value rs.updateInt(1, 1017); //Update LAST NAME value rs.updateString(2, 'Bond'); //Update FIRST NAME value rs.updateString(3, 'James'); //Insert a new row rs.insertRow(); //Moving the cursor to point 5th row rs.absolute(5); System.out.println('Befor Updating EMPNUM of the 5th ROW'); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); System.out.println(' Updating EMP id of the 5th EMPLOYEE'); //Updating EMPNUM of 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
ΠΑΡΑΓΩΓΗ:
Εξήγηση:
Στο παραπάνω πρόγραμμα αυτό που κάναμε είναι πρώτα, αποθηκεύσαμε τα δεδομένα του πίνακα Employee_details στο αντικείμενο ResultSet χρησιμοποιώντας το ερώτημα SELECT. Στη συνέχεια, εμφανίστηκαν τα δεδομένα της τελευταίας σειράς στον πίνακα Employ_details χρησιμοποιώντας την τελευταία () μέθοδο του ResultSet. Η μέθοδος moveToInsertRow () κάνει τον κέρσορα να δείχνει την τρέχουσα σειρά, τώρα η τρέχουσα σειρά είναι η τελευταία σειρά.
οι μέθοδοι updateXXX () που χρησιμοποιούνται για την ενημέρωση των τιμών στη σειρά και η μέθοδος insertRow () έχει εισαγάγει τα δεδομένα σε μια νέα σειρά. Χρησιμοποιώντας την απόλυτη () μέθοδο, κάναμε τον κέρσορα να δείχνει στο 5ουσειρά. Η μέθοδος UpdateInt () έχει χρησιμοποιηθεί για την ενημέρωση του EMPNUM με ένα νέο αναγνωριστικό του 5ουυπάλληλος στον πίνακα. Μετά από αυτό, εμφανίστηκαν τα δεδομένα για να ελεγχθεί εάν το EMPNUM έχει ενημερωθεί ή όχι.
Έκανε τον κέρσορα για να δείξει την τελευταία σειρά του πίνακα χρησιμοποιώντας το τελευταίο () και το έδειξε. Για να εκτελέσουμε την παραπάνω λογική, πρέπει να ορίσουμε τιμές ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE στη μέθοδο προετοιμασίας.
# 4) Διάφορες μέθοδοι
- άκυρο κλείσιμο (): Χρησιμοποιείται για το κλείσιμο της παρουσίας ResultSet και την απελευθέρωση των πόρων που σχετίζονται με την παρουσία ResultSet.
- ResultSetMetaData getMetaData (): Επιστρέφει το ResultSetMetaData Instance. Έχει τις πληροφορίες σχετικά με τον τύπο και την ιδιότητα των στηλών της εξόδου του ερωτήματος. Στην επόμενη ενότητα θα μάθουμε περισσότερα για το ResultSetMetaData.
ResultSetMetaData
Τι είναι τα μεταδεδομένα;
Μεταδεδομένα σημαίνει δεδομένα σχετικά με δεδομένα. Χρησιμοποιώντας αυτήν τη διεπαφή, θα λάβουμε περισσότερες πληροφορίες σχετικά με το ResultSet. Είναι διαθέσιμο στο πακέτο java.sql. Κάθε αντικείμενο ResultSet σχετίζεται με ένα αντικείμενο ResultSetMetaData.
Αυτό το αντικείμενο θα έχει τις λεπτομέρειες των ιδιοτήτων των στηλών, όπως τύπος δεδομένων της στήλης, όνομα στήλης, αριθμός στηλών, όνομα πίνακα, όνομα σχήματος κ.λπ.
Σύνταξη του ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Σημαντικές μέθοδοι διεπαφής ResultSetMetaData:
Όνομα μεθόδου | Περιγραφή |
---|---|
boolean isCaseSensitive (int στήλη) | Επιστρέφει αληθές αν η δεδομένη στήλη είναι ευαίσθητη σε πεζά, αλλιώς ψευδής |
String getColumnName (int στήλη) | Επιστρέφει το όνομα στήλης της συγκεκριμένης στήλης |
String getColumnTypeName (int στήλη) | Επιστρέφει τον τύπο δεδομένων της συγκεκριμένης στήλης που έχουμε περάσει ως παράμετρος |
String getTableName (int στήλη) | Επιστρέφει το όνομα του πίνακα της στήλης |
String getSchemaName (int στήλη) | Επιστρέφει το όνομα σχήματος του πίνακα της στήλης |
int getColumnCount () | Επιστρέφει τον αριθμό των στηλών του ResultSet |
boolean isAutoIncrement (int στήλη) | Επιστρέφει αληθές εάν η δεδομένη στήλη είναι Αυτόματη αύξηση, αλλιώς ψευδής |
Παράδειγμα ResultSetMetaData
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ResultSetMetaData_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub String QUERY= ' select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; rs1 = statemnt1.executeQuery(QUERY); ResultSetMetaData rsmd = rs1.getMetaData(); System.out.println(' We are using ResultSetMetaData '); System.out.println('No: of Columns: '+ rsmd.getColumnCount()); System.out.println('ColumnName of Column 1: '+ rsmd.getColumnName(1)); System.out.println('Data Type of Column 2: ' + rsmd.getColumnTypeName(2)); System.out.println('Table Name of the Column 1: ' + rsmd.getTableName(1)); System.out.println('Schema Name of the Column 1: ' + rsmd.getSchemaName(1)); } } }
ΠΑΡΑΓΩΓΗ:
Εξήγηση:
δημιουργήστε μια σειρά από συμβολοσειρές java
Στο παραπάνω πρόγραμμα, έχουμε εφαρμόσει μεθόδους getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () και getSchemaName () στη διεπαφή ResultSetMetaData.
Βάση δεδομένων Μεταδεδομένα
Η διεπαφή DatabaseMetaData παρέχει πληροφορίες σχετικά με τη βάση δεδομένων, όπως το όνομα βάσης δεδομένων, την έκδοση βάσης δεδομένων και ούτω καθεξής.
Σημαντικές μέθοδοι διασύνδεσης DatabaseMetaData:
Όνομα μεθόδου | Περιγραφή |
---|---|
String getStringFunctions () | Επιστρέφει τη λίστα των συναρτήσεων συμβολοσειρών που είναι διαθέσιμες στη συνδεδεμένη βάση δεδομένων |
String getDriverName () | Θα επιστρέψει το όνομα του προγράμματος οδήγησης JDBC που χρησιμοποιούμε στο πρόγραμμα Java |
String getDriverVersion () | Επιστρέφει τον αριθμό έκδοσης του προγράμματος οδήγησης JDBC |
String getUserName () | Επιστρέφει το όνομα χρήστη της βάσης δεδομένων που χρησιμοποιούμε |
String getDatabaseProductName () | Επιστρέφει το όνομα της βάσης δεδομένων που χρησιμοποιούμε |
String getDatabaseProductVersion () | Επιστρέφει τον αριθμό έκδοσης της βάσης δεδομένων που χρησιμοποιούμε |
ResultSet getSchemas () | Επιστρέφει τα ονόματα των σχημάτων που είναι διαθέσιμα στη συνδεδεμένη βάση δεδομένων |
String getTimeDateFunctions () | Επιστρέφει τη λίστα των λειτουργιών ώρας και ημερομηνίας που είναι διαθέσιμες στη συνδεδεμένη βάση δεδομένων |
String getURL () | Επιστρέφει τη διεύθυνση URL για τη βάση δεδομένων |
Boolean isReadOnly () | Επιστρέφει εάν η βάση δεδομένων βρίσκεται σε λειτουργία μόνο για ανάγνωση |
Υποστηρίζει BooleanBatchUpdates () | Επιστρέφει εάν η βάση δεδομένων υποστηρίζει μαζικές ενημερώσεις |
Υποστηρίζει BooleanSavepoints () | Επιστρέφει εάν η βάση δεδομένων υποστηρίζει Savepoints |
Υποστηρίζει BooleanStatementPooling () | Επιστρέφει εάν η βάση δεδομένων υποστηρίζει Συγκεντρωτική δήλωση |
Υποστηρίζει BooleanStoredProcedures () | Επιστρέφει εάν η βάση δεδομένων υποστηρίζει Αποθηκευμένες διαδικασίες |
Υποστηρίζει BooleanOuterJoins () | Επιστρέφει εάν η βάση δεδομένων υποστηρίζει Outer Join |
Εδώ, παραθέτουμε μερικές σημαντικές μεθόδους της διασύνδεσης DatabaseMetaData. Μπορείτε να ανατρέξετε στον επίσημο ιστότοπο του Μαντείο όπου μπορείτε να δείτε όλες τις διαθέσιμες μεθόδους στη διεπαφή DatabaseMetaData.
DatabaseMetaData Παράδειγμα:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName('oracle.jdbc.driver.OracleDriver'); Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE'); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println('Using DatabaseMetaData'); System.out.println('Driver Name: ' + dbmd.getDriverName()); System.out.println('Driver Version: '+ dbmd.getDriverVersion()); System.out.println('UserName of the Database: ' + dbmd.getUserName()); System.out.println('Database Product Name:' + dbmd.getDatabaseProductName()); System.out.println('Database Product Version: ' + dbmd.getDatabaseProductVersion()); System.out.println('List of String Functions in the Database: ' + dbmd.getStringFunctions()); System.out.println('List of Time & Date functions in the Database: ' + dbmd.getTimeDateFunctions()); System.out.println('URL of the Database: ' + dbmd.getURL()); System.out.println('Database is read - only? ' +dbmd.isReadOnly()); System.out.println('Support Batch Updates? ' + dbmd.supportsBatchUpdates()); System.out.println('Support savepoints? ' + dbmd.supportsSavepoints()); System.out.println('Support Statement Pooling? '+ dbmd.supportsStatementPooling()); System.out.println('Support Stored Procedures? ' + dbmd.supportsStoredProcedures()); System.out.println('Support Outer Join? '+ dbmd.supportsOuterJoins()); } }
ΠΑΡΑΓΩΓΗ:
Εξήγηση:
Στο παραπάνω πρόγραμμα, χρησιμοποιήσαμε / εφαρμόσαμε το getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOn , υποστηρίζειStatementPooling (), υποστηρίζειSavepoints (), υποστηρίζει μεθόδουςStoredProcedures () και υποστηρίζει μεθόδουςOuterJoins () στο DatabaseMetaData Interface.
Σημεία που πρέπει να σημειωθούν:
- Η διεπαφή JDBC ResultSet χρησιμοποιείται για την αποθήκευση των δεδομένων από τη βάση δεδομένων και τη χρήση τους στο πρόγραμμα Java.
- Μπορούμε επίσης να χρησιμοποιήσουμε το ResultSet για να ενημερώσουμε τα δεδομένα χρησιμοποιώντας τις μεθόδους updateXXX ().
- Το αντικείμενο ResultSet δείχνει τον κέρσορα πριν από την πρώτη σειρά των δεδομένων αποτελεσμάτων. Χρησιμοποιώντας την επόμενη () μέθοδο, μπορούμε να επαναλάβουμε μέσω του ResultSet.
- Έχουμε μεθόδους πλοήγησης του ResultSet για να προχωρήσουμε περαιτέρω στο αντικείμενο ResultSet
- Το ResultMetaData χρησιμοποιείται για τη λήψη περισσότερων πληροφοριών σχετικά με το ResultSet όπως όνομα στήλης, αριθμός στηλών, τύπος δεδομένων της στήλης κ.λπ.
- Το DatabaseMetData χρησιμοποιείται για τη λήψη πληροφοριών σχετικά με τη βάση δεδομένων που έχουμε συνδέσει
Συχνές Ερωτήσεις
Ε # 1) Ποια είναι η χρήση του ResultSet;
Απάντηση: Το ResultSet χρησιμοποιείται για την αποθήκευση και ανάκτηση των δεδομένων από το DB. Όταν εκτελεστεί η μέθοδος executeQuery (), θα επιστρέψει το αντικείμενο ResultSet. Μπορούμε να χρησιμοποιήσουμε αυτό το αντικείμενο ResultSet στο πρόγραμμά μας για να εκτελέσουμε τη λογική.
Ε # 2) Πώς να ελέγξετε εάν το ResultSet είναι κενό ή όχι;
Απάντηση: Δεν υπάρχουν προκαθορισμένες μέθοδοι όπως το μήκος (), το μέγεθος () διαθέσιμο για τον έλεγχο του IsResultSet Empty. Μπορούμε να χρησιμοποιήσουμε την επόμενη () μέθοδο για να επαναλάβουμε και αν επιστρέψει True, τότε δεν είναι κενό, αν επιστρέψει False σημαίνει ότι το ResultSet είναι κενό.
Q # 3) Είναι πιθανό το ResultSet να είναι μηδενικό;
Απάντηση: Όχι, η μέθοδος executeQuery () επιστρέφει το αντικείμενο ResultSet που μπορεί να μην είναι ποτέ μηδενικό.
Q # 4) Τι είναι το ResultSet με δυνατότητα ενημέρωσης;
Απάντηση: Ένα αντικείμενο με δυνατότητα ενημέρωσης ResultSet χρησιμοποιείται για την ενημέρωση των δεδομένων στη στήλη, την εισαγωγή δεδομένων σε στήλες και τη διαγραφή σειρών. Για να κάνουμε ένα ResultSet ως ανανεώσιμο, πρέπει να κάνουμε τον τύπο κύλισης ως ευαίσθητο ή μη ευαίσθητο και CONCUR ως ενημερωμένο.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Ε # 5) Πώς να αποκτήσετε το όνομα της βάσης δεδομένων που έχει συνδεθεί;
Απάντηση: Μπορούμε να χρησιμοποιήσουμε τη μέθοδο getDatabaseProductName () του αντικειμένου DatabaseMetaData.
συμπέρασμα
Σε αυτό το σεμινάριο, έχουμε συζητήσει τι είναι οι διεπαφές ResultSet, ResultSetMetaData και DatabaseMetaData και οι σημαντικές μέθοδοι τους που χρησιμοποιούνται συνήθως στα προγράμματα JDBC. Έχουμε επίσης δει πώς να ενημερώσουμε τα δεδομένα στο DB χρησιμοποιώντας το ResultSet. Το ResultSetMetadata περιέχει πληροφορίες σχετικά με το ResultSet όπως όνομα στήλης, αριθμός στήλης και ούτω καθεξής.
Το DatabaseMetaData περιέχει πληροφορίες βάσης δεδομένων.
Συνιστώμενη ανάγνωση
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Εκμάθηση Java JDBC: Τι είναι το JDBC (Συνδεσιμότητα βάσης δεδομένων Java)
- Διαχείριση συναλλαγών Java JDBC με παράδειγμα
- Εγχειρίδιο επεξεργασίας παρτίδων JDBC και αποθήκευσης διαδικασιών
- Εκμάθηση σύνδεσης Java JDBC με παράδειγμα προγραμματισμού
- Συγκρίσιμες και συγκριτικές διεπαφές στην Java
- Δοκιμή βάσης δεδομένων Selenium (Χρήση WebDriver και JDBC API)
- JDBC Exception Handling - Τρόπος χειρισμού εξαιρέσεων SQL