jdbc resultset how use java resultset retrieve data
Aquest tutorial explica com utilitzar JDBC ResultSet per recuperar dades. També coneixerem les interfícies ResultSetMetaData i DatabaseMetaData amb exemples:
A la Controlador de JDBC tutorial del Sèrie de tutorials JDBC , vam aprendre a utilitzar JDBC DriverManager i els seus mètodes, JDBC PreparedStatement en aplicacions Java.
En aquest tutorial, parlarem de les interfícies restants a JDBC. Hem cobert les interfícies Statement, PreparedStatement i CallableStatement als nostres tutorials anteriors.
Aquí coneixerem les interfícies JDBC ResultSet, ResultSetMetaData i DatabaseMetaData, els seus mètodes i com utilitzar els mètodes del programa Java.
Què aprendreu:
JDBC ResultSet Interface
La interfície ResultSet està present al paquet java.sql. S'utilitza per emmagatzemar les dades que es retornen de la taula de base de dades després de l'execució de les sentències SQL al programa Java. L'objecte de ResultSet manté el punt del cursor a les dades del resultat. Per defecte, les posicions del cursor abans de la primera fila de les dades del resultat.
El mètode next () s’utilitza per moure el cursor a la següent posició en direcció cap endavant. Tornarà FALS si no hi ha més registres. Recupera dades trucant al mètode executeQuery () mitjançant qualsevol dels objectes de sentència. Pot ser una declaració o un objecte PreparedStatement o CallableStatement. Les interfícies PreparedStatement i CallableStatement són les subinterfícies de la interfície Statement.
Interfície de declaració
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement Interface
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Podem utilitzar el mètode getX () per obtenir les dades de les columnes mentre es repeteixen els resultats on X - és el tipus de dades de la columna. Podem utilitzar Noms de columna o Índex per obtenir els valors mitjançant mètodes 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); }
També podem esmentar el número d’índex de la columna en lloc del nom de la columna als mètodes 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); }
Tipus de conjunts de resultats
Per defecte, podem iterar les dades / valors de ResultSet que han retornat com a sortida de la sentència SQL executada en la direcció directa. Podem iterar els valors en altres direccions mitjançant Scrollable ResultSet. Podem especificar el tipus i la simultaneïtat de ResultSet mentre es creen objectes Statement, PreparedStatement i CallableStatement.
Hi ha 3 tipus a ResultSet. Ells són:
- TYPE_FORWARD_ONLY: És l’opció predeterminada, on el cursor es mou de principi a fi, és a dir, en la direcció cap endavant.
- TYPE_SCROLL_INSENSITIVE: En aquest tipus, farà que el cursor es mogui en les direccions cap endavant i cap enrere. Si fem canvis a les dades mentre iterem les dades emmagatzemades, no s’actualitzaran al conjunt de dades si algú canvia les dades a la base de dades. Com que el conjunt de dades conté les dades des del moment en què la consulta SQL retorna les dades.
- TYPE_SCROLL_SENSITIVE: És similar a TYPE_SCROLL_INSENSITIVE, la diferència és si algú actualitza les dades després que la consulta SQL hagi retornat les dades, mentre que la iteració reflectirà els canvis al conjunt de dades.
Resultat simultani
Hi ha 2 modes de simultaneïtat a ResultSet. Ells són:
- ResultSet.CONCUR_READ_ONLY: És el mode de concurrència predeterminat. Només podem llegir les dades del ResultSet. L'actualització no és aplicable.
- ResultSet.CONCUR_UPDATABLE: Podem actualitzar les dades de l’objecte ResultSet.
Algunes bases de dades no admeten el mode de simultaneïtat per a tots els tipus de Resultats. En aquest cas, hem de comprovar si admeten el tipus i el mode de simultaneïtat desitjats mitjançant el mètode supportsResultSetConcurrency ().
Mètodes a la interfície ResultSet
Hi ha 4 categories de mètodes ResultSet. Ells són:
- Mètodes de navegació
- Mètodes Getter
- Mètodes Setter
- Mètodes diversos
En primer lloc, discutirem els mètodes de navegació i després avançarem.
# 1) Mètodes de navegació
Aquest mètode s’utilitza per moure el cursor pel conjunt de dades.
- Absolut booleà (fila int): S'utilitza per moure el cursor a la fila especificada que s'esmenta al paràmetre i tornar true si l'operació té èxit, sinó tornar false.
- Void afterLast (): Fa que el cursor ResultSet es mogui després de la darrera fila.
- Void beforeFirst (): Fa que el cursor ResultSet es mogui abans de la primera fila.
- Primer booleà (): Fa que el cursor ResultSet passi a la primera fila. Torna True si l'operació té èxit, sinó False.
- Booleà últim (): Fa que el cursor ResultSet es desplaci a la darrera fila. Torna True si l'operació té èxit, sinó False.
- Booleà next (): Fa que el cursor ResultSet passi a la fila següent. Torna True si hi ha més registres i False si no hi ha més registres.
- Booleà anterior (): Fa que el cursor ResultSet passi a la fila anterior. Torna True si l'operació té èxit, sinó False.
- Relatiu booleà (): Mou el cursor al nombre de files donat, ja sigui en la direcció cap endavant o cap enrere.
- Int getRow (): Retorna el número de fila actual que apunta l'objecte ResultSet ara.
- Void moveToCurrentRow (): Moveu el cursor cap a la fila actual si es troba actualment a la fila d'inserció.
- Anul·lar moveToInsertRow (): Mou el cursor a la fila específica per inserir-la a la base de dades. Recorda la ubicació actual del cursor. Per tant, podem utilitzar el mètode moveToCurrentRow () per moure el cursor a la fila actual després de la inserció.
En aquest tutorial, tots els programes estan escrits en Java. Hem utilitzat la versió Java 8 i Oracle DB.
>> Podeu descarregar el programari Oracle des de aquí
>> Podeu descarregar la versió 8 de Java des de aquí
Té el procés d’instal·lació de Java pas a pas.
Programa d'exemple JDBC ResultSet: (mitjançant mètodes de navegació)
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(); } } }
SORTIDA:
Dades a la taula Employee_details
Explicació:
Al programa anterior hem implementat els mètodes first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () i getRow () a ResultSet. Per utilitzar aquests mètodes, establim els valors ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE al mètode prepareStatement.
A continuació, analitzarem quins són els mètodes Getter a ResultSet:
# 2) Mètodes Getter
ResultSet ha emmagatzemat les dades de la taula de la base de dades. S’utilitzen mètodes Getter per obtenir els valors de la taula a ResultSet. Per a això, hem de passar el valor de l’índex de la columna o el nom de la columna.
A continuació es detallen els mètodes getter de ResultSet:
- int getInt (int ColumnIndex): S'utilitza per obtenir el valor de la columna Índex especificat com a tipus de dades int.
- float getFloat (int ColumnIndex): S'utilitza per obtenir el valor de la columna Índex especificat com a tipus de dades flotant.
- java.sql.date getDate (int ColumnIndex): S'utilitza per obtenir el valor de la columna Índex especificat com a valor de data.
- int getInt (StringNom de columna): S'utilitza per obtenir el valor de la columna especificada com a tipus de dades int.
- float getFloat (String ColumnName): S'utilitza per obtenir el valor de la columna especificada com a tipus de dades flotant.
- Java.sql.date getDate (StringNom de columna): S'utilitza per obtenir el valor de la columna especificada com a valor de data.
Hi ha mètodes getter per a tots els tipus de dades primitius (booleans, llargs, dobles) i String també a la interfície ResultSet. També podem obtenir una matriu i un tipus binari de dades de la base de dades. També té mètodes per a això.
# 3) Mètodes de configuració / actualització
Podem actualitzar el valor a la base de dades mitjançant mètodes ResultSet Updater. És similar als mètodes Getter, però aquí hem de passar els valors / dades de la columna en particular per actualitzar a la base de dades.
A continuació es detallen els mètodes d’actualització de ResultSet:
- void updateInt (int ColumnIndex, int Value): S'utilitza per actualitzar el valor de la columna Índex especificat amb un valor int.
- void updateFloat (int ColumnIndex, float f): S'utilitza per actualitzar el valor de la columna Índex especificat amb el valor flotant.
- void updateDate (int ColumnIndex, Data d): S'utilitza per actualitzar el valor de la columna Índex especificat amb el valor de data.
- void updateInt (StringNom de columna, valor int): S'utilitza per actualitzar el valor de la columna especificada amb el valor int indicat.
- void updateFloat (StringNom de columna, float f): S'utilitza per actualitzar el valor de la columna especificada amb el valor flotant donat.
- Java.sql.date getDate (StringNom de columna): S'utilitza per actualitzar el valor de la columna especificada amb el valor de data indicat.
Hi ha mètodes Updater per a tots els tipus de dades primitius (booleà, llarg, doble) i String també a la interfície ResultSet.
Els mètodes d’actualització només actualitzen les dades de l’objecte ResultSet. Els valors s’actualitzaran a la base de dades després de trucar al mètode insertRow o updateRow.
Actualització d'una fila:
Podem actualitzar les dades seguides trucant als mètodes updateX (), passant el nom o l’índex de la columna i els valors a actualitzar. Podem utilitzar qualsevol tipus de dades en lloc de X en el mètode updateX. Fins ara hem actualitzat les dades de l’objecte ResultSet. Per actualitzar les dades de la base de dades, hem de trucar al mètode updateRow ().
Inserció d'una fila:
Hem d’utilitzar moveToInsertRow () per moure el cursor per inserir una nova fila. Ja ho hem tractat a la secció de mètodes de navegació. A continuació, hem de trucar al mètode updateX () per afegir les dades a la fila. Hauríem de proporcionar dades per a totes les columnes que utilitzin el valor per defecte d'aquesta columna en particular.
Després d’actualitzar les dades, hem de trucar al mètode insertRow (). A continuació, utilitzeu el mètode moveToCurrentRow () per recuperar la posició del cursor a la fila on ens trobàvem abans de començar a inserir una nova fila.
Exemple de conjunt de resultats:
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(); } } }
SORTIDA:
Explicació:
En el programa anterior, el que hem fet és primer, emmagatzemem les dades de la taula Employee_details a l’objecte ResultSet mitjançant la consulta SELECT. A continuació, vam mostrar les dades de l'última fila a la taula empleat_detalls mitjançant el mètode last () de ResultSet. El mètode moveToInsertRow () fa que el cursor assenti la fila actual, ara la fila actual és la darrera fila.
Els mètodes updateXXX () utilitzats per actualitzar els valors a la fila i el mètode insertRow () han inserit les dades en una fila nova. Mitjançant el mètode absolute (), vam fer que el cursor assenyalés el 5thfila. S'ha utilitzat el mètode UpdateInt () per actualitzar l'EMPNUM amb un nou identificador del 5thempleat a la taula. Després d'això, mostreu les dades per comprovar si l'EMPNUM està actualitzat o no.
Va fer que el cursor assenyalés l'última fila de la taula amb last () i el va mostrar. Per realitzar la lògica anterior, hem d’establir els valors ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE al mètode prepareStatement.
# 4) Mètodes diversos
- void close (): S'utilitza per tancar la instància ResultSet i alliberar els recursos associats amb la instància ResultSet.
- ResultSetMetaData getMetaData (): Torna la instància ResultSetMetaData. Té la informació sobre el tipus i la propietat de les columnes de la sortida de la consulta. Aprendrem més informació sobre ResultSetMetaData a la següent secció.
ResultSetMetaData
Què són les metadades?
Les metadades són dades sobre dades. Mitjançant aquesta interfície, obtindrem més informació sobre ResultSet. Està disponible al paquet java.sql. Tots els objectes ResultSet s’associen a un objecte ResultSetMetaData.
Aquest objecte tindrà els detalls de les propietats de les columnes, com ara el tipus de dades de la columna, el nom de la columna, el nombre de columnes, el nom de la taula, el nom de l’esquema, etc.
Sintaxi del ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Mètodes importants de la interfície ResultSetMetaData:
Nom del mètode | Descripció |
---|---|
booleà isCaseSensitive (int Columna) | Es torna cert si la columna indicada distingeix entre majúscules i minúscules, en cas contrari és falsa |
Cadena getColumnName (columna int) | Retorna el nom de la columna de la columna en particular |
Cadena getColumnTypeName (columna int) | Retorna el tipus de dades de la columna concreta que hem passat com a paràmetre |
Cadena getTableName (columna int) | Torna el nom de la taula de la columna |
Cadena getSchemaName (columna int) | Retorna el nom de l'esquema de la taula de la columna |
int getColumnCount () | Retorna el nombre de columnes del ResultSet |
boolean isAutoIncrement (int Columna) | Es torna cert si la columna indicada és Increment automàtic, en cas contrari, és fals |
Exemple de 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)); } } }
SORTIDA:
Explicació:
implementant un gràfic en c ++
Al programa anterior, hem implementat els mètodes getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () i getSchemaName () a la interfície ResultSetMetaData.
DatabaseMetaData
La interfície DatabaseMetaData proporciona informació sobre la base de dades com DatabaseName, versió de la base de dades, etc.
Mètodes importants de la interfície DatabaseMetaData:
Nom del mètode | Descripció |
---|---|
String getStringFunctions () | Torna la llista de funcions de cadena disponibles a la base de dades connectada |
Cadena getDriverName () | Tornarà el nom del controlador JDBC que estem utilitzant al nostre programa Java |
Cadena getDriverVersion () | Torna el número de versió del controlador JDBC |
Cadena getUserName () | Retorna el nom d'usuari de la base de dades que estem utilitzant |
Cadena getDatabaseProductName () | Retorna el nom de la base de dades que estem utilitzant |
Cadena getDatabaseProductVersion () | Torna el número de versió de la base de dades que estem utilitzant |
ResultSet getSchemas () | Retorna els noms dels esquemes disponibles a la base de dades connectada |
Cadena getTimeDateFunctions () | Torna la llista de funcions de data i hora disponibles a la base de dades connectada |
Cadena getURL () | Torna l'URL de la base de dades |
Booleà isReadOnly () | Torna si la base de dades està en mode de només lectura |
Suports booleansBatchUpdates () | Torna si la base de dades admet actualitzacions per lots |
Suports booleansSavepoints () | Torna si la base de dades admet Savepoints |
Suports booleansStatementPooling () | Torna si la base de dades admet l'agrupació de sentències |
Suports booleansStoredProcedures () | Torna si la base de dades admet procediments emmagatzemats |
Suports booleansOuterJoins () | Torna si la base de dades admet Outer Join |
Aquí enumerem alguns mètodes importants de la interfície DatabaseMetaData. Podeu consultar el lloc oficial del Oracle on podeu veure tots els mètodes disponibles a la interfície DatabaseMetaData.
Exemple 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()); } }
SORTIDA:
Explicació:
Al programa anterior, hem utilitzat / implementat getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly () , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () i supportsOuterJoins () als mètodes DatabaseMetaData Interface.
Punts a destacar:
- La interfície JDBC ResultSet s’utilitza per emmagatzemar les dades de la base de dades i utilitzar-les al nostre programa Java.
- També podem utilitzar ResultSet per actualitzar les dades mitjançant mètodes updateXXX ().
- L'objecte ResultSet apunta el cursor abans de la primera fila de les dades del resultat. Mitjançant el mètode next (), podem iterar a través del ResultSet.
- Disposem de mètodes de navegació de ResultSet per avançar més a l’objecte ResultSet
- ResultMetaData s’utilitza per obtenir més informació sobre el ResultSet com el nom de la columna, el nombre de columnes, el tipus de dades de la columna, etc.
- DatabaseMetData s’utilitza per obtenir informació sobre la base de dades que hem connectat
Preguntes freqüents
P # 1) Què utilitza ResultSet?
Resposta: ResultSet s’utilitza per emmagatzemar i recuperar les dades de la base de dades. Quan s'ha executat el mètode executeQuery (), retornarà l'objecte ResultSet. Podem utilitzar aquest objecte ResultSet al nostre programa per realitzar la lògica.
Q # 2) Com comprovar si el ResultSet està buit o no?
Resposta: No hi ha mètodes predefinits com length (), size () disponibles per comprovar el buit IsResultSet. Podem fer servir el mètode next () per iterar i, si torna True, llavors no està buit, si torna False significa que el Resultat és buit.
P # 3) És possible que ResultSet sigui nul?
Resposta: No, el mètode executeQuery () retorna l'objecte ResultSet que pot ser que mai sigui nul.
P # 4) Què és el conjunt de resultats actualitzable?
Resposta: Un objecte ResultSet actualitzable s’utilitza per actualitzar les dades de la columna, inserir dades a les columnes i suprimir files. Per fer un ResultSet com a actualitzable, hem de fer que el tipus de desplaçament sigui tan sensible o insensible i el tipus CONCUR com a actualitzable.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
P # 5) Com obtenir el nom de la base de dades que s'ha connectat?
Resposta: Podem utilitzar el mètode getDatabaseProductName () de l'objecte DatabaseMetaData.
Conclusió
En aquest tutorial, hem analitzat què són les interfícies ResultSet, ResultSetMetaData i DatabaseMetaData i els seus mètodes importants que s’utilitzen habitualment als programes JDBC. També hem vist com actualitzar les dades a la base de dades mitjançant ResultSet. ResultSetMetadata conté informació sobre ResultSet, com ara el nom de la columna, el recompte de columnes, etc.
DatabaseMetaData conté informació de la base de dades.
Lectura recomanada
- JDBC DriverManager, JDBC PreparedStatement i declaració
- Tutorial Java JDBC: què és JDBC (connectivitat a la base de dades Java)
- Gestió de transaccions Java JDBC amb exemple
- Tutorial de processament per lots i processos emmagatzemats de JDBC
- Tutorial de connexió Java JDBC amb exemple de programació
- Interfícies comparables i comparadores a Java
- Proves de base de dades de seleni (mitjançant WebDriver i l'API JDBC)
- Gestió d’excepcions de JDBC: com gestionar les excepcions d’SQL