Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Java

JDBC ResultSet Παράδειγμα

Η Connectivity (Java Database JDBC ) Application Programmer Interface ( API ) παρέχει μαθήματα για τη σύνδεση και την πρόσβαση σε δεδομένα των πινάκων , συμπεριλαμβανομένων των σχεσιακών βάσεων δεδομένων . Η τάξη ResultSet παρέχει μεθόδους για την ανάκτηση , την πλοήγηση και χειρισμό αποτελέσματα ερώτημα βάσης δεδομένων . Παράδειγμα Περιβάλλον
Η

Στα ακόλουθα παραδείγματα , θα συνδεθείτε με μια βάση δεδομένων που ονομάζεται « προσωπικό », σε ένα ενιαίο πίνακα μέσα σε αυτή τη βάση δεδομένων με το όνομα " ανθρώπους " που περιέχει τρεις στήλες : " first_name " , " last_name " , " τίτλο , "και" μισθό ". Το τραπέζι σας περιέχει τα ακόλουθα αρχεία :

Bob , Smith , γραμματέα , 23.50Ted , Άντερσον , Designer, 38.00Fred , Johnson , Προγραμματιστής , 32.25Alice , Άντερσον , Μηχανικός , 46.75Bob , Κλαρκ , Intern , 15.00Carol , Smith , Διευθυντής, 42.50
εικόνων ερωτήματος της βάσης δεδομένων
Η

Δημιουργήστε μια σύνδεση βάσης δεδομένων και να δημιουργήσετε ένα αντικείμενο Δήλωση καλώντας createStatement αντικείμενο Connection μας ( λειτουργία ) .

String url = " jdbc : mysql ://localhost /staff" ? Σύνδεση conn = DriverManager.getConnection ( url , "username" , " password" ) ? Δήλωση st = conn.createStatement ( ) ?

Δημιουργία ένα ερώτημα string που περιέχει μια έγκυρη δήλωση ερώτημα SQL

ερώτημα String = "SELECT first_name , last_name ΑΠΟ άνθρωποι "? .

Δημιουργήστε ένα αντικείμενο ResultSet χρησιμοποιώντας το αντικείμενο δήλωση για την εκτέλεση του ερωτήματος στη βάση δεδομένων .

rs ResultSet = st.executeQuery (ερώτημα ) ?

το αντικείμενο ResultSet , rs , περιέχει τώρα τα αποτελέσματα του ερωτήματος : η " first_name " και " last_name " στήλες για κάθε εγγραφή ο «λαός» πίνακα.

Η Πρόσβαση στην Έρευνα Αποτελέσματα
Η

το αντικείμενο ResultSet διαθέτει έναν δείκτη , ο οποίος αρχικά δεν οδηγούν σε οποιαδήποτε εγγραφή. Καλέστε το πρώτο ( ) συνάρτηση ResultSet να μετακινήσετε το δρομέα στο πρώτο ρεκόρ που κατέχει από το αντικείμενο ResultSet . Get λειτουργίες ResultSet παρέχουν πρόσβαση στο περιεχόμενο της κάθε στήλης , χρησιμοποιώντας το όνομα της στήλης από τον πίνακα της βάσης δεδομένων . " . Last_name " Χρήση GetString ( String columnLabel ) να ανακτήσετε τα περιεχόμενα του VARCHAR στήλες " first_name » και

rs.first ( ) ? String fn = rs.getString ( " first_name ")? String ln = rs . GetString ( « last_name ")? System.out.println ( ln + " , " + fn ) ?

Η τελευταία γραμμή πάνω εκτυπώσεις :

Smith , Bob

Καλέστε την τελευταία λειτουργία ResultSet της ( ) για να μετακινήσετε το δρομέα στο τελευταίο ρεκόρ που κατέχει από το αντικείμενο ResultSet

rs.last ()? . fn = rs.getString ( " first_name ")? ln = rs.getString ( " last_name " ) ? System.out.println ( ln + " , " + fn ) ?

Η τελευταία γραμμή πάνω εκτυπώσεις :

Smith , Carol
εικόνων Ενίσχυση Μέσα από τα αποτελέσματα ερωτήματος
Η

Τυπικά , θα θέλετε να έχετε πρόσβαση σε όλα τα αποτελέσματα που επιστρέφονται από το ερώτημα . Επόμενη λειτουργία ResultSet του ( ) μετακινεί το δρομέα προς τα εμπρός για την επόμενη εγγραφή . Όταν ο δρομέας μετακινείται μετά το τέλος του συνόλου των αποτελεσμάτων , η συνάρτηση next ( ) επιστρέφει NULL , που σας επιτρέπει να χρησιμοποιήσετε την τιμή επιστροφής να ξεφύγουν από ένα βρόχο while

Δήλωση st = conn.createStatement ( ) . ? ερώτημα String = " SELECT * FROM ανθρώπων όπου μισθών > 30 " ? ResultSet rs = st.executeQuery (ερώτημα ) ?

ενώ ( rs.next ( ) ) { String fn = rs.getString ( " first_name " ) ? String ln = rs.getString ( " last_name ")? System.out.println ( fn + " " + ln ) ? }

Τα βήματα, ενώ βρόχο μέσω κάθε εγγραφή στο σύνολο αποτελεσμάτων , και εκτυπώνει :

προηγούμενη ( ) συνάρτηση Ted AndersonFred JohnsonAlice AndersonCarol Smith

ResultSet του μετακινεί το δρομέα προς τα πίσω μία εγγραφή στο σύνολο αποτελεσμάτων , και επιστρέφει NULL όταν ο δρομέας έχει κινηθεί πριν από την πρώτη εγγραφή . Αυτό σας επιτρέπει να περπατήσετε προς τα πίσω μέσα στο σύνολο των αποτελεσμάτων και να χρησιμοποιήσετε την τιμή επιστροφής από την προηγούμενη ( ) συνάρτηση για να ξεφύγουν από το βρόχο while . Συνεχίζοντας το παραπάνω παράδειγμα , ο δείκτης έμεινε τοποθετηθεί μετά την τελευταία εγγραφή στο σύνολο αποτελεσμάτων . Χρησιμοποιήστε την προηγούμενη λειτουργία ( ) με τα πόδια προς τα πίσω μέσα από τα αποτελέσματα του ερωτήματος , η εκτύπωση του τίτλου και τις στήλες των μισθών από κάθε εγγραφή . Χρησιμοποιήστε getFloat λειτουργία ResultSet του ( String columnLabel ) να έχουν πρόσβαση στο περιεχόμενο της στήλης FLOAT " μισθών " :

ενώ ( rs.previous ( ) ) { String t = rs.getString ( "title" ) ? Int w = rs.getFloat ( « μισθός» ) ? System.out.println ( fn + " $ " + ln ) ? }

Τα βήματα προς τα πίσω , ενώ βρόχου μέσω κάθε εγγραφή στο σύνολο αποτελεσμάτων , και εκτυπώσεις :

Διευθυντής $ 42.50Engineer $ $ 46.75Programmer 32.25Designer $ 38.00
εικόνων τυχαίας προσπέλασης πλοήγησης
Η

ResultSet προσφέρει λειτουργίες για τη μετακίνηση του δρομέα αυθαίρετα μέσα από τις εγγραφές σε ένα σύνολο αποτελεσμάτων . Ανακτήσει όλες τις εγγραφές που περιέχονται από τον «λαό» πίνακα , ταξινομημένες κατά το « last_name " τότε " first_name " στήλες :

Δήλωση st = conn.createStatement ( ) ? Ερώτημα String = " SELECT * FROM ανθρώπους ώστε με last_name , first_name " ? ResultSet rs = st.executeQuery (ερώτημα ) ?

Το σύνολο των αποτελεσμάτων περιέχει :

Alice , Άντερσον , Μηχανικός , 46.75Ted , Άντερσον , Designer, 38.00Bob , Κλαρκ , Intern , 15.00Fred , Johnson , Προγραμματιστής , 32.25Bob , Smith , γραμματέα , 23.50Carol , Smith , Διευθυντής, 42.50

Χρησιμοποιήστε την απόλυτη λειτουργία ( γραμμή int ) για να ρυθμίσετε το δρομέα σε μια συγκεκριμένη γραμμή του συνόλου των αποτελεσμάτων . Μια θετική τιμή για την παράμετρο γραμμής θα μετακινήσει το δρομέα προς τα εμπρός πριν από την έναρξη του συνόλου των αποτελεσμάτων . Μια αρνητική τιμή για την παράμετρο γραμμής θα μετακινήσει το δρομέα προς τα πίσω από το τέλος του συνόλου των αποτελεσμάτων :

rs.absolute ( 3 ) ? String fn = rs.getString ( " first_name ")? String ln = rs . GetString ( " last_name ")? System.out.println ( fn + " " + ln ) ?

rs.absolute ( 5 ) ? String fn = rs.getString ( " first_name ")? String ln = rs . GetString ( « last_name ")? System.out.println ( fn + " " + ln ) ?

rs.absolute ( -1 ) ? String fn = rs.getString ( " first_name ")? String ln = rs.getString ( " last_name ")? System.out.println ( fn + " " + ln ) ?

rs.absolute ( -3 ) ? String fn = rs.getString ( " first_name " ) ? String ln = rs.getString ( " last_name ")? System.out.println ( fn + " " + ln ) ?

Οι δηλώσεις εκτύπωσης πάνω εξόδου :

Bob ClarkBob SmithCarol SmithFred Johnson

Συνεχίζοντας , χρησιμοποιήστε σχετική (γραμμή int ) για να μετακινήσετε τον κέρσορα προς τα πίσω ή προς τα εμπρός σε σχέση με την τρέχουσα θέση . Ο δρομέας αφέθηκε τοποθετείται στην τέταρτη καταγραφή του συνόλου των αποτελεσμάτων . Μετακίνηση προς τα εμπρός δύο σειρές , στη συνέχεια, προς τα πίσω τέσσερις σειρές :

rs.relative ( 2 ) ? Fn = rs.getString ( " first_name ")? Ln = rs.getString ( " last_name ")? System.out . println ( fn + " " + ln ) ?

rs.relative ( -4 ) ? fn = rs.getString ( " first_name ")? ln = rs.getString ( " last_name ")? System.out . println ( fn + " " + ln ) ?

Οι δηλώσεις εκτύπωσης στην έξοδο παραπάνω κωδικό :

Carol SmithTed Anderson
εικόνων Τροποποίηση των αποτελεσμάτων

Τροποποιήστε τα περιεχόμενα ενός συνόλου αποτέλεσμα χρησιμοποιώντας λειτουργίες ενημέρωσης ResultSet του . Χρησιμοποιήστε updateString ( String columnLabel , String x ) για να αλλάξετε όλα τα αρχεία που ταιριάζουν με "βαρίδι " στη στήλη " first_name " σε " Robert . " Χρησιμοποιήστε το ( λειτουργία beforeFirst ) για να επαναφέρετε τον κέρσορα στην πριν από την έναρξη του αποτελέσματος που έτσι μπορείτε να περπατήσετε μέσα από το επικαιροποιημένο σύνολο αποτελεσμάτων και να εκτυπώσετε τις νέες τιμές :

ερώτημα String = " SELECT * FROM ανθρώπους " ? ResultSet rs = st.executeQuery (ερώτημα ) ?

ενώ ( rs.next ( ) ) { String fn = rs.getString ( " first_name ")? αν ( fn.equals ( " Bob " ) { rs.updateString ( " first_name " , " Robert" ) ? } } rs.beforeFirst ( ) ? ενώ ( rs.next ( ) ) { String fn = rs.getString ( " first_name ")? String ln = rs.getString ( " last_name " ) ? System.out.println ( fn + " " + ln ) ? }

τα ακόλουθα αποτελέσματα εκτυπώνονται :

Robert SmithTed AndersonFred JohnsonAlice AndersonRobert ClarkCarol Smith
εικόνων Χειρισμός σφαλμάτων
Η

Πολλές λειτουργίες ResultSet να ρίξουμε μια SQLException . βέλτιστη πρακτική υπαγορεύει ρίχνονται λάθη θα πρέπει να συλληφθούν και να αντιμετωπίζονται . SQLException μήνυμα μπορεί να είναι πολύ χρήσιμο στην εκσφαλμάτωση σύνδεση και το ερώτημα λάθη . Περιορίστε τη σύνδεσή σας και τον κωδικό ερωτήματος σε δοκιμάστε αλιευμάτων μπλοκ

try { String url = " jdbc : mysql ://localhost /staff" ? . σύνδεσης conn = DriverManager.getConnection ( url , "username" , " password" ) ? Δήλωση st = conn . createStatement ( ) ?

String query = "SELECT first_name , last_name ΑΠΟ άνθρωποι " ? ResultSet rs = st.executeQuery (ερώτημα ) ?

ενώ ( rs.next ( ) ) { String fn = rs.getString ( " first_name ")? String ln = rs.getString ( " last_name ")? System.out.println ( fn + " " + ln ) ? } } αλιευμάτων ( SQLException πρώην ) { System.err.println ( ex.getMessage ( ) ) .?}
εικόνων Clean Up
Η

ένα αντικείμενο ResultSet κλείνει αυτόματα όταν το αντικείμενο δήλωση χρησιμοποιείται για να δημιουργήσει είναι κοντά όταν είναι κλειστή , ένα ResultSet αντικείμενο θα απελευθερώσει πόρους Δύναμη αυτόματα ένα αντικείμενο ResultSet να απελευθερώσει όλο το JDBC και των πόρων της βάσης δεδομένων να κρατήσει καλώντας τη στενή ( λειτουργία ) Κλείστε το αντικείμενο ResultSet , rs , από τα παραπάνω παραδείγματα : . .

rs.close ( ) ?
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα