jdbc resultset how use java resultset retrieve data
Acest tutorial explică cum să utilizați JDBC ResultSet pentru a prelua date. De asemenea, vom afla despre interfețele ResultSetMetaData și DatabaseMetaData cu exemple:
În JDBC DriverManager tutorial de Seria de tutoriale JDBC Am învățat cum să folosim JDBC DriverManager și metodele sale, JDBC PreparedStatement în aplicații Java.
În acest tutorial, vom discuta interfețele rămase în JDBC. Am acoperit interfațele Statement, PreparedStatement și CallableStatement în tutorialele noastre anterioare.
Aici, vom afla despre interfețele JDBC ResultSet, ResultSetMetaData și DatabaseMetaData, metodele lor și cum se utilizează metodele din programul Java.
Ce veți învăța:
JDBC ResultSet Interface
Interfața ResultSet este prezentă în pachetul java.sql. Este folosit pentru a stoca datele care sunt returnate din tabelul bazei de date după executarea instrucțiunilor SQL din programul Java. Obiectul ResultSet menține punctul de cursor la datele rezultate. În mod implicit, cursorul se poziționează înainte de primul rând al datelor rezultate.
Metoda next () este utilizată pentru a muta cursorul în următoarea poziție într-o direcție înainte. Se va întoarce FALS dacă nu mai există înregistrări. Preluează date apelând metoda executeQuery () utilizând oricare dintre obiectele de instrucțiuni. Poate fi obiectul Declarație sau PreparedStatement sau CallableStatement. Interfețele PreparedStatement și CallableStatement sunt subinterfețele interfeței Statement.
Interfață declarație
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Interfață de declarație pregătită
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Putem folosi metoda getX () pentru a obține datele coloanelor în timp ce iterăm prin rezultate unde X - este tipul de date al coloanei. Putem folosi fie nume de coloane, fie Index pentru a obține valorile folosind metodele 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); }
De asemenea, putem menționa numărul de index al coloanei în loc de numele coloanei în metodele 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); }
Tipuri de seturi de rezultate
În mod implicit, putem itera datele / valorile din ResultSet care au revenit ca o ieșire a instrucțiunii SQL executate în direcția înainte. Putem itera valorile în alte direcții folosind Scrollable ResultSet. Putem specifica tipul și concurența ResultSet în timp ce creăm obiecte Statement, PreparedStatement și CallableStatement.
Există 3 tipuri în ResultSet. Sunt:
- TYPE_FORWARD_ONLY: Este opțiunea implicită, unde cursorul se deplasează de la început până la sfârșit, adică în direcția înainte.
- TYPE_SCROLL_INSENSITIVE: În acest tip, va face cursorul să se deplaseze atât în direcții înainte, cât și înapoi. Dacă modificăm datele în timp ce iterăm datele stocate, nu se vor actualiza în setul de date dacă cineva schimbă datele din DB. Deoarece setul de date conține datele din momentul în care interogarea SQL returnează datele.
- TYPE_SCROLL_SENSITIVE: Este similar cu TYPE_SCROLL_INSENSITIVE, diferența este dacă cineva actualizează datele după ce interogarea SQL a returnat datele, în timp ce iterația acestora va reflecta modificările setului de date.
ResultSet simultanitate
Există 2 moduri de concurență în ResultSet. Sunt:
- ResultSet.CONCUR_READ_ONLY: Este modul implicit de concurență. Putem citi datele numai în ResultSet. Actualizarea nu este aplicabilă.
- ResultSet.CONCUR_UPDATABLE: Putem actualiza datele din obiectul ResultSet.
Unele baze de date nu acceptă modul concurenței pentru toate tipurile de rezultate. În acest caz, trebuie să verificăm dacă acceptă tipul și modul de concurență dorite folosind metoda supportsResultSetConcurrency ().
Metode în interfața ResultSet
Există 4 categorii de metode ResultSet. Sunt:
- Metode de navigație
- Metode Getter
- Metode Setter
- Diverse metode
În primul rând, vom discuta despre metodele de navigație și apoi vom merge mai departe.
# 1) Metode de navigație
Această metodă este utilizată pentru a muta cursorul în jurul setului de date.
- Absolut boolean (rând int): Se folosește pentru a muta cursorul pe rândul specificat, care este menționat în parametru și pentru a returna true dacă operațiunea are succes, altfel returnează false.
- Nul după ultimul (): Face ca cursorul ResultSet să se deplaseze după ultimul rând.
- Anulați înainte de primul (): Face ca cursorul ResultSet să se deplaseze înainte de primul rând.
- În primul rând boolean (): Face ca cursorul ResultSet să se deplaseze pe primul rând. Revine True dacă operațiunea are succes altfel False.
- Boolean last (): Face ca cursorul ResultSet să se deplaseze la ultimul rând. Revine True dacă operațiunea are succes altfel False.
- Boolean next (): Face ca cursorul ResultSet să treacă la rândul următor. Revine True dacă există mai multe înregistrări și False dacă nu mai există înregistrări.
- Boolean precedent (): Face ca cursorul ResultSet să se deplaseze la rândul anterior. Revine True dacă operațiunea are succes altfel False.
- Rudă booleană (): Mută cursorul la numărul dat de rânduri, fie în direcția înainte, fie înapoi.
- Int getRow (): Returnează numărul rândului curent pe care îl arată acum obiectul ResultSet.
- Void moveToCurrentRow (): Mută cursorul înapoi la rândul curent dacă este în prezent în rândul de inserare.
- Void moveToInsertRow (): Mută cursorul pe rândul specific pentru a insera rândul în baza de date. Își amintește locația curentă a cursorului. Deci, putem folosi metoda moveToCurrentRow () pentru a muta cursorul pe rândul curent după inserare.
În acest tutorial, toate programele sunt scrise în Java. Am folosit versiunea Java 8 și Oracle DB.
>> Puteți descărca software-ul Oracle de la Aici
>> Puteți descărca versiunea Java 8 de la Aici
Are procesul de instalare pas cu pas Java.
JDBC ResultSet Exemplu de program: (folosind metode de navigație)
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(); } } }
IEȘIRE:
Date din tabelul Employee_details
Explicaţie:
În programul de mai sus am implementat metodele first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () și getRow () metode în ResultSet. Pentru a utiliza aceste metode, setăm valorile ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE în metoda prepareStatement.
În continuare, vom discuta care sunt metodele Getter din ResultSet:
# 2) Metode Getter
ResultSet a stocat datele din tabel din baza de date. Metodele Getter sunt utilizate pentru a obține valorile tabelului în ResultSet. Pentru aceasta, trebuie să trecem fie valoarea Index a coloanei, fie Numele coloanei.
Următoarele sunt metodele getter din ResultSet:
- int getInt (int ColumnIndex): Se folosește pentru a obține valoarea coloanei Index specificate ca tip de date int.
- float getFloat (int ColumnIndex): Este folosit pentru a obține valoarea coloanei Index specificate ca tip de date flotant.
- java.sql.date getDate (int ColumnIndex): Este folosit pentru a obține valoarea coloanei specificate Index ca valoare de dată.
- int getInt (String ColumnName): Este folosit pentru a obține valoarea coloanei specificate ca tip de date int.
- float getFloat (String ColumnName): Se folosește pentru a obține valoarea coloanei specificate ca tip de date flotant.
- Java.sql.date getDate (String ColumnName): Se folosește pentru a obține valoarea coloanei specificate ca valoare de dată.
Există metode getter pentru toate tipurile de date primitive (boolean, lung, dublu) și String, de asemenea, în interfața ResultSet. Putem obține o matrice și un tip binar de date și din baza de date. Are și metode pentru asta.
# 3) Metode Setter / Updater
Putem actualiza valoarea în baza de date utilizând metodele ResultSet Updater. Este similar cu metodele Getter, dar aici trebuie să transmitem valorile / datele pentru coloana respectivă pe care să le actualizăm în baza de date.
Următoarele sunt metodele de actualizare din ResultSet:
- void updateInt (int ColumnIndex, int Value): Se folosește pentru a actualiza valoarea coloanei specificate Index cu o valoare int.
- void updateFloat (int ColumnIndex, float f): Se utilizează pentru a actualiza valoarea coloanei specificate Index cu valoarea float.
- void updateDate (int ColumnIndex, Data d): Este folosit pentru a actualiza valoarea coloanei specificate Index cu valoarea datei.
- void updateInt (String ColumnName, int Value): Se utilizează pentru a actualiza valoarea coloanei specificate cu valoarea int dată.
- void updateFloat (StringColumnName, float f): Se folosește pentru a actualiza valoarea coloanei specificate cu valoarea float dată.
- Java.sql.date getDate (String ColumnName): Se folosește pentru a actualiza valoarea coloanei specificate cu valoarea datei date.
Există metode Updater pentru toate tipurile de date primitive (boolean, lung, dublu) și String, de asemenea, în interfața ResultSet.
Metodele de actualizare doar actualizează datele din obiectul ResultSet. Valorile vor fi actualizate în DB după apelarea metodei insertRow sau updateRow.
Actualizarea unui rând:
Putem actualiza datele la rând apelând metodele updateX (), trecând numele sau indexul coloanei și valorile de actualizat. Putem folosi orice tip de date în locul lui X în metoda updateX. Până acum, am actualizat datele din obiectul ResultSet. Pentru a actualiza datele din DB, trebuie să apelăm metoda updateRow ().
Inserarea unui rând:
Trebuie să folosim moveToInsertRow () pentru a muta cursorul pentru a insera un rând nou. Am tratat deja acest lucru în secțiunea Metode de navigare. Apoi, trebuie să apelăm metoda updateX () pentru a adăuga datele la rând. Ar trebui să furnizăm date pentru toate coloanele în care va folosi valoarea implicită a acelei coloane.
După actualizarea datelor, trebuie să apelăm metoda insertRow (). Apoi utilizați metoda moveToCurrentRow (), pentru a lua poziția cursorului înapoi la rândul la care ne aflam înainte de a începe să inserăm un rând nou.
Exemplu de rezultate:
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(); } } }
IEȘIRE:
Explicaţie:
În programul de mai sus, ceea ce am făcut este mai întâi, am stocat datele din tabelul Employee_details în obiectul ResultSet folosind interogarea SELECT. Apoi, am afișat datele ultimului rând din tabelul angajat_detalii folosind metoda last () din ResultSet. Metoda moveToInsertRow () face ca cursorul să indice rândul curent, acum rândul curent este ultimul rând.
Metodele updateXXX () utilizate pentru actualizarea valorilor la rând și metoda insertRow () au inserat datele într-un rând nou. Folosind metoda absolute (), am făcut cursorul să indice spre 5arând. Metoda UpdateInt () a fost utilizată pentru a actualiza EMPNUM cu un nou id de 5aangajat în masă. După aceea, afișați datele pentru a verifica dacă EMPNUM este actualizat sau nu.
A făcut cursorul să indice ultimul rând al tabelului folosind last () și l-a afișat. Pentru a efectua logica de mai sus, trebuie să setăm valorile ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE în metoda prepareStatement.
# 4) Metode diverse
- void close (): Este folosit pentru a închide instanța ResultSet și a elibera resursele asociate instanței ResultSet.
- ResultSetMetaData getMetaData (): Returnează instanța ResultSetMetaData. Are informații despre tipul și proprietatea coloanelor rezultatului interogării. Vom afla mai multe despre ResultSetMetaData în secțiunea următoare.
ResultSetMetaData
Ce sunt metadatele?
Metadate înseamnă date despre date. Folosind această interfață, vom obține mai multe informații despre ResultSet. Este disponibil în pachetul java.sql. Fiecare obiect ResultSet este asociat cu un obiect ResultSetMetaData.
Acest obiect va avea detaliile proprietăților coloanelor, cum ar fi tipul de date al coloanei, numele coloanei, numărul de coloane, numele tabelului, numele schemei etc. Putem obține obiectul ResultSetMetaData folosind metoda getMetaData () a ResultSet
Sintaxa ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Metode importante ale interfeței ResultSetMetaData:
Nume metodă | Descriere |
---|---|
boolean isCaseSensitive (int Coloană) | Revine adevărat dacă Coloana dată este sensibilă la majuscule și minuscule, altfel falsă |
Șir getColumnName (coloană int) | Returnează numele coloanei coloanei respective |
Șir getColumnTypeName (coloană int) | Returnează tipul de date al coloanei pe care am trecut-o ca parametru |
Șir getTableName (coloana int) | Returnează numele tabelului coloanei |
Șir getSchemaName (coloana int) | Returnează numele schemei tabelului coloanei |
int getColumnCount () | Returnează numărul de coloane din ResultSet |
boolean isAutoIncrement (int Coloană) | Revine adevărat dacă coloana dată este Auto Increment, altfel fals |
ResultSetMetaData Exemplu
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)); } } }
IEȘIRE:
Explicaţie:
ce este cheia de securitate pentru rețeaua wireless
În programul de mai sus, am implementat getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () și getSchemaName () în interfața ResultSetMetaData.
DatabaseMetaData
Interfața DatabaseMetaData oferă informații despre baza de date precum DatabaseName, versiunea bazei de date și așa mai departe.
Metode importante ale interfeței DatabaseMetaData:
Nume metodă | Descriere |
---|---|
Șir getStringFunctions () | Revine lista funcțiilor șirului disponibile în baza de date conectată |
Șir getDriverName () | Acesta va returna numele driverului JDBC pe care îl folosim în programul nostru Java |
Șir getDriverVersion () | Returnează numărul versiunii driverului JDBC |
Șir getUserName () | Returnează numele de utilizator al bazei de date pe care o folosim |
Șir getDatabaseProductName () | Acesta returnează numele bazei de date pe care o folosim |
Șir getDatabaseProductVersion () | Returnează numărul versiunii bazei de date pe care o folosim |
ResultSet getSchemas () | Returnează numele schemelor disponibile în baza de date conectată |
Șir getTimeDateFunctions () | Revine lista funcțiilor de oră și dată disponibile în baza de date conectată |
Șir getURL () | Acesta returnează adresa URL pentru baza de date |
Boolean isReadOnly () | Revine dacă baza de date este în modul de citire numai |
Boolean supportsBatchUpdates () | Se returnează dacă baza de date acceptă actualizări de lot |
Boolean supportsSavepoints () | Se returnează dacă baza de date acceptă Savepoints |
Boolean supportsStatementPooling () | Se returnează dacă baza de date acceptă punerea în comun a declarațiilor |
Boolean supportsStoredProcedures () | Se returnează dacă baza de date acceptă proceduri stocate |
Boolean supportsOuterJoins () | Se returnează dacă baza de date acceptă Outer Join |
Aici, am enumerat câteva metode importante ale interfeței DatabaseMetaData. Puteți consulta site-ul oficial al Oracol unde puteți vedea toate metodele disponibile în interfața DatabaseMetaData.
DatabaseMetaData Exemplu:
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()); } }
IEȘIRE:
Explicaţie:
În programul de mai sus, am folosit / implementat getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly () , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () și supportsOuterJoins () în interfața DatabaseMetaData.
Puncte de remarcat:
- Interfața JDBC ResultSet este utilizată pentru a stoca datele din baza de date și a le utiliza în programul nostru Java.
- De asemenea, putem folosi ResultSet pentru a actualiza datele folosind metode updateXXX ().
- Obiectul ResultSet indică cursorul înaintea primului rând al datelor rezultate. Folosind metoda next (), putem itera prin ResultSet.
- Avem metode de navigare ale ResultSet pentru a ne deplasa mai departe în obiectul ResultSet
- ResultMetaData este folosit pentru a obține mai multe informații despre ResultSet, cum ar fi numele coloanei, numărul de coloane, tipul de date al coloanei etc.
- DatabaseMetData este folosit pentru a obține informații despre baza de date pe care am conectat-o
întrebări frecvente
Q # 1) La ce folosește ResultSet?
Răspuns: ResultSet este utilizat pentru a stoca și prelua datele din DB. Când s-a executat metoda executeQuery (), va returna obiectul ResultSet. Putem folosi acel obiect ResultSet în programul nostru pentru a efectua logica.
Q # 2) Cum să verificați dacă rezultatul este gol sau nu?
Răspuns: Nu există metode predefinite precum length (), size () disponibile pentru a verifica IsResultSet Empty. Putem folosi metoda next () pentru a itera și dacă returnează True, atunci nu este goală, dacă returnează False înseamnă că rezultatul este gol.
Î # 3) Este posibil ca ResultSet să fie nul?
Răspuns: Nu, metoda executeQuery () returnează obiectul ResultSet care nu poate fi niciodată nul.
Q # 4) Ce este setul de rezultate actualizabil?
Răspuns: Pentru a actualiza datele din coloană, pentru a insera date în coloane și pentru a șterge rândurile, se utilizează un obiect ResultSet actualizabil. Pentru a face ca un rezultat să fie actualizabil, trebuie să facem ca tipul de derulare să fie sensibil sau insensibil și tipul CONCUR ca actualizabil.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q # 5) Cum se obține numele bazei de date care a fost conectat?
Răspuns: Putem folosi metoda getDatabaseProductName () a obiectului DatabaseMetaData.
Concluzie
În acest tutorial, am discutat care sunt interfețele ResultSet, ResultSetMetaData și DatabaseMetaData și metodele lor importante utilizate în mod obișnuit în programele JDBC. De asemenea, am văzut cum să actualizăm datele în DB folosind ResultSet. ResultSetMetadata conține informații despre ResultSet, cum ar fi numele coloanei, numărul de coloane și așa mai departe.
DatabaseMetaData conține informații despre baza de date.
Lectură recomandată
- JDBC DriverManager, JDBC PreparedStatement și declarație
- Tutorial Java JDBC: Ce este JDBC (Java Database Connectivity)
- Gestionarea tranzacțiilor Java JDBC cu exemplu
- Tutorial JDBC privind procesarea lotului și procedura stocată
- Tutorial de conexiune Java JDBC cu exemplu de programare
- Interfețe comparabile și comparatoare în Java
- Testarea bazei de date cu seleniu (folosind WebDriver și API JDBC)
- JDBC Exception Handling - Cum să gestionați excepțiile SQL