jdbc resultset how use java resultset retrieve data
Ce didacticiel explique comment utiliser JDBC ResultSet pour récupérer des données. Nous découvrirons également les interfaces ResultSetMetaData et DatabaseMetaData avec des exemples:
dans le DriverManager JDBC tutoriel du Série de didacticiels JDBC , nous avons appris à utiliser JDBC DriverManager et ses méthodes, JDBC PreparedStatement dans les applications Java.
Dans ce didacticiel, nous allons discuter des interfaces restantes dans JDBC. Nous avons couvert les interfaces Statement, PreparedStatement et CallableStatement dans nos didacticiels précédents.
Ici, nous découvrirons les interfaces JDBC ResultSet, ResultSetMetaData et DatabaseMetaData, leurs méthodes et comment utiliser les méthodes dans le programme Java.
Ce que vous apprendrez:
Interface ResultSet JDBC
L'interface ResultSet est présente dans le package java.sql. Il est utilisé pour stocker les données renvoyées par la table de la base de données après l'exécution des instructions SQL dans le programme Java. L'objet de ResultSet maintient le point du curseur sur les données de résultat. Par défaut, le curseur se positionne avant la première ligne des données de résultat.
La méthode next () est utilisée pour déplacer le curseur vers la position suivante dans une direction vers l'avant. Il retournera FALSE s'il n'y a plus d'enregistrements. Il récupère les données en appelant la méthode executeQuery () à l'aide de l'un des objets de l'instruction. Il peut s'agir d'un objet Statement ou PreparedStatement ou CallableStatement. Les interfaces PreparedStatement et CallableStatement sont les sous-interfaces de l'interface Statement.
Interface de déclaration
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Interface PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Nous pouvons utiliser la méthode getX () pour obtenir les données des colonnes tout en parcourant les résultats où X - est le type de données de la colonne. Nous pouvons utiliser les noms de colonnes ou l'index pour obtenir les valeurs à l'aide des méthodes 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); }
Nous pouvons également mentionner le numéro d'index de la colonne au lieu du nom de la colonne dans les méthodes 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 Types
Par défaut, nous pouvons itérer les données / valeurs dans ResultSet qui sont retournées en tant que sortie de l'instruction SQL exécutée dans le sens aller. Nous pouvons itérer les valeurs dans d'autres directions en utilisant Scrollable ResultSet. Nous pouvons spécifier le type et la concurrence de ResultSet lors de la création des objets Statement, PreparedStatement et CallableStatement.
Il existe 3 types dans ResultSet. Elles sont:
- TYPE_FORWARD_ONLY: C'est l'option par défaut, où le curseur se déplace du début à la fin, c'est-à-dire vers l'avant.
- TYPE_SCROLL_INSENSITIVE: Dans ce type, le curseur se déplacera à la fois vers l'avant et vers l'arrière. Si nous apportons des modifications aux données lors de l'itération des données stockées, elles ne seront pas mises à jour dans l'ensemble de données si quelqu'un modifie les données dans DB. Parce que l'ensemble de données contient les données à partir du moment où la requête SQL renvoie les données.
- TYPE_SCROLL_SENSITIVE: Il est similaire à TYPE_SCROLL_INSENSITIVE, la différence est que si quelqu'un met à jour les données après que la requête SQL a renvoyé les données, tandis que l'itération reflétera les modifications apportées à l'ensemble de données.
ResultSet Concurrence
Il existe 2 modes de concurrence dans ResultSet. Elles sont:
- ResultSet.CONCUR_READ_ONLY: C'est le mode de concurrence par défaut. Nous ne pouvons lire que les données du ResultSet. La mise à jour n'est pas applicable.
- ResultSet.CONCUR_UPDATABLE: Nous pouvons mettre à jour les données dans l'objet ResultSet.
Certaines bases de données ne prennent pas en charge le mode d'accès concurrentiel pour tous les types de ResultSet. Dans ce cas, nous devons vérifier s'ils prennent en charge le type et le mode de concurrence souhaités à l'aide de la méthode supportsResultSetConcurrency ().
Méthodes dans l'interface ResultSet
Il existe 4 catégories de méthodes ResultSet. Elles sont:
- Méthodes de navigation
- Méthodes Getter
- Méthodes de pose
- Méthodes diverses
Tout d'abord, nous discuterons des méthodes de navigation, puis nous avancerons plus loin.
# 1) Méthodes de navigation
Cette méthode est utilisée pour déplacer le curseur dans l'ensemble de données.
- Booléen absolu (ligne int): Il est utilisé pour déplacer le curseur sur la ligne spécifiée qui est mentionnée dans le paramètre et retourner true si l'opération est réussie sinon retourner false.
- Annulé après le dernier (): Cela permet au curseur ResultSet de se déplacer après la dernière ligne.
- Annulé avant le premier (): Cela permet au curseur ResultSet de se déplacer avant la première ligne.
- Booléen d'abord (): Cela permet au curseur ResultSet de se déplacer vers la première ligne. Il renvoie True si l'opération réussit, sinon False.
- Booléen last (): Cela fait que le curseur ResultSet se déplace vers la dernière ligne. Il renvoie True si l'opération réussit, sinon False.
- Booléen suivant (): Cela fait passer le curseur ResultSet à la ligne suivante. Il renvoie True s'il y a plus d'enregistrements et False s'il n'y a plus d'enregistrements.
- Booléen précédent (): Cela permet au curseur ResultSet de passer à la ligne précédente. Il renvoie True si l'opération réussit, sinon False.
- Relatif booléen (): Il déplace le curseur sur le nombre de lignes donné dans le sens avant ou arrière.
- Int getRow (): Il renvoie le numéro de ligne actuel sur lequel pointe l'objet ResultSet.
- Void moveToCurrentRow (): Il ramène le curseur sur la ligne actuelle s'il est actuellement dans la ligne d'insertion.
- Vide moveToInsertRow (): Il déplace le curseur sur la ligne spécifique pour insérer la ligne dans la base de données. Il se souvient de l'emplacement actuel du curseur. Nous pouvons donc utiliser la méthode moveToCurrentRow () pour déplacer le curseur sur la ligne courante après l'insertion.
Dans ce didacticiel, tous les programmes sont écrits en Java. Nous avons utilisé la version Java 8 et Oracle DB.
>> Vous pouvez télécharger le logiciel Oracle sur Ici
>> Vous pouvez télécharger la version 8 de Java sur Ici
Il a le processus d'installation Java étape par étape.
Exemple de programme JDBC ResultSet: (Utilisation des méthodes de navigation)
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(); } } }
PRODUCTION:
Données dans la table Employee_details
Explication:
Dans le programme ci-dessus, nous avons implémenté les méthodes first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () et getRow () dans ResultSet. Pour utiliser ces méthodes, nous définissons les valeurs ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE dans la méthode prepareStatement.
Ensuite, nous allons discuter des méthodes Getter dans ResultSet:
# 2) Méthodes Getter
ResultSet a stocké les données de la table à partir de la base de données. Les méthodes Getter sont utilisées pour obtenir les valeurs de la table dans ResultSet. Pour cela, nous devons transmettre la valeur d'index de la colonne ou le nom de la colonne.
Voici les méthodes getter dans ResultSet:
- int getInt (int ColumnIndex): Il est utilisé pour obtenir la valeur de la colonne spécifiée Index en tant que type de données int.
- float getFloat (int ColumnIndex): Il est utilisé pour obtenir la valeur de la colonne spécifiée Index en tant que type de données flottant.
- java.sql.date getDate (int ColumnIndex): Il est utilisé pour obtenir la valeur de la colonne spécifiée Index sous forme de valeur de date.
- int getInt (String ColumnName): Il est utilisé pour obtenir la valeur de la colonne spécifiée en tant que type de données int.
- float getFloat (String ColumnName): Il est utilisé pour obtenir la valeur de la colonne spécifiée en tant que type de données flottant.
- Java.sql.date getDate (String ColumnName): Il est utilisé pour obtenir la valeur de la colonne spécifiée sous forme de valeur de date.
Il existe des méthodes getter pour tous les types de données primitifs (booléen, long, double) et String également dans l'interface ResultSet. Nous pouvons également obtenir un tableau et un type binaire de données à partir de la base de données. Il a également des méthodes pour cela.
# 3) Méthodes Setter / Updater
Nous pouvons mettre à jour la valeur dans la base de données à l'aide des méthodes ResultSet Updater. C'est similaire aux méthodes Getter, mais ici, nous devons transmettre les valeurs / données de la colonne particulière à mettre à jour dans la base de données.
Voici les méthodes de mise à jour dans ResultSet:
- void updateInt (int ColumnIndex, int Value): Il est utilisé pour mettre à jour la valeur de la colonne spécifiée Index avec une valeur int.
- void updateFloat (int ColumnIndex, float f): Il est utilisé pour mettre à jour la valeur de la colonne Index spécifiée avec la valeur flottante.
- void updateDate (int ColumnIndex, Date d): Il est utilisé pour mettre à jour la valeur de l'index de colonne spécifié avec la valeur de date.
- void updateInt (String ColumnName, valeur int): Il est utilisé pour mettre à jour la valeur de la colonne spécifiée avec la valeur int donnée.
- void updateFloat (String ColumnName, float f): Il est utilisé pour mettre à jour la valeur de la colonne spécifiée avec la valeur flottante donnée.
- Java.sql.date getDate (String ColumnName): Il est utilisé pour mettre à jour la valeur de la colonne spécifiée avec la valeur de date donnée.
Il existe des méthodes Updater pour tous les types de données primitifs (booléen, long, double) et String également dans l'interface ResultSet.
Les méthodes de mise à jour mettent simplement à jour les données dans l'objet ResultSet. Les valeurs seront mises à jour dans DB après l'appel de la méthode insertRow ou updateRow.
Mettre à jour une ligne:
Nous pouvons mettre à jour les données dans une ligne en appelant les méthodes updateX (), en passant le nom ou l'index de la colonne et les valeurs à mettre à jour. Nous pouvons utiliser n'importe quel type de données à la place de X dans la méthode updateX. Jusqu'à présent, nous avons mis à jour les données dans l'objet ResultSet. Pour mettre à jour les données dans DB, nous devons appeler la méthode updateRow ().
Insertion d'une ligne:
Nous devons utiliser moveToInsertRow () pour déplacer le curseur afin d'insérer une nouvelle ligne. Nous avons déjà couvert cela dans la section Méthodes de navigation. Ensuite, nous devons appeler la méthode updateX () pour ajouter les données à la ligne. Nous devrions fournir des données pour toutes les colonnes sinon, il utilisera la valeur par défaut de cette colonne particulière.
Après avoir mis à jour les données, nous devons appeler la méthode insertRow (). Ensuite, utilisez la méthode moveToCurrentRow () pour ramener la position du curseur à la ligne où nous nous trouvions avant de commencer à insérer une nouvelle ligne.
Exemple de 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(); } } }
PRODUCTION:
Explication:
Dans le programme ci-dessus, nous avons d'abord stocké les données de la table Employee_details dans l'objet ResultSet à l'aide de la requête SELECT. Ensuite, nous avons affiché les données de la dernière ligne de la table employee_details en utilisant la méthode last () de ResultSet. moveToInsertRow () fait que le curseur pointe sur la ligne actuelle, maintenant la ligne actuelle est la dernière ligne.
Les méthodes updateXXX () utilisées pour mettre à jour les valeurs de la ligne et la méthode insertRow () a inséré les données dans une nouvelle ligne. En utilisant la méthode absolute (), nous avons fait pointer le curseur sur le 5erangée. La méthode UpdateInt () a été utilisée pour mettre à jour EMPNUM avec un nouvel identifiant du 5eemployé dans la table. Après cela, affiche les données pour vérifier si EMPNUM est mis à jour ou non.
Fait le curseur pour pointer la dernière ligne du tableau en utilisant last () et l'affiche. Pour exécuter la logique ci-dessus, nous devons définir les valeurs ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE dans la méthode prepareStatement.
# 4) Méthodes diverses
- void close (): Il est utilisé pour fermer l'instance ResultSet et libérer les ressources associées à l'instance ResultSet.
- ResultSetMetaData getMetaData (): Il renvoie l'instance ResultSetMetaData. Il contient les informations sur le type et la propriété des colonnes de la sortie de la requête. Nous en apprendrons plus sur ResultSetMetaData dans la section suivante.
ResultSetMetaData
Qu'est-ce que les métadonnées?
Les métadonnées désignent les données sur les données. En utilisant cette interface, nous obtiendrons plus d'informations sur ResultSet. Il est disponible dans le package java.sql. Chaque objet ResultSet est associé à un objet ResultSetMetaData.
Cet objet aura les détails des propriétés des colonnes comme le type de données de la colonne, le nom de la colonne, le nombre de colonnes, le nom de la table, le nom du schéma, etc., Nous pouvons obtenir l'objet ResultSetMetaData en utilisant la méthode getMetaData () de ResultSet.
Syntaxe de ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Méthodes importantes de l'interface ResultSetMetaData:
Nom de la méthode | La description |
---|---|
booléen isCaseSensitive (colonne int) | Il renvoie true si la colonne donnée est sensible à la casse, sinon false |
String getColumnName (colonne int) | Il renvoie le nom de colonne de la colonne particulière |
String getColumnTypeName (colonne int) | Il renvoie le type de données de la colonne particulière que nous avons passé en paramètre |
String getTableName (colonne int) | Il renvoie le nom de table de la colonne |
String getSchemaName (colonne int) | Il renvoie le nom de schéma de la table de la colonne |
int getColumnCount () | Il renvoie le nombre de colonnes du ResultSet |
booléen isAutoIncrement (int Column) | Il renvoie true si la colonne donnée est Auto Increment, sinon false |
Exemple 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)); } } }
PRODUCTION:
Explication:
convertir le nombre de caractères en int c ++
Dans le programme ci-dessus, nous avons implémenté les méthodes getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () et getSchemaName () dans l'interface ResultSetMetaData.
Base de donnéesMetaData
L'interface DatabaseMetaData donne des informations sur la base de données telles que DatabaseName, la version de la base de données, etc.
Méthodes importantes de l'interface DatabaseMetaData:
Nom de la méthode | La description |
---|---|
Chaîne getStringFunctions () | Il renvoie la liste des fonctions de chaîne disponibles dans la base de données connectée |
Chaîne getDriverName () | Il renverra le nom du pilote JDBC que nous utilisons dans notre programme Java |
Chaîne getDriverVersion () | Il renvoie le numéro de version du pilote JDBC |
Chaîne getUserName () | Il renvoie le nom d'utilisateur de la base de données que nous utilisons |
Chaîne getDatabaseProductName () | Il renvoie le nom de la base de données que nous utilisons |
Chaîne getDatabaseProductVersion () | Il renvoie le numéro de version de la base de données que nous utilisons |
ResultSet getSchemas () | Il renvoie les noms des schémas disponibles dans la base de données connectée |
Chaîne getTimeDateFunctions () | Il renvoie la liste des fonctions d'heure et de date disponibles dans la base de données connectée |
Chaîne getURL () | Il renvoie l'URL de la base de données |
Boolean isReadOnly () | Il renvoie si la base de données est en mode lecture seule |
Prise en charge booléenneBatchUpdates () | Il renvoie si la base de données prend en charge les mises à jour par lots |
Prise en charge booléenneSavepoints () | Il renvoie si la base de données prend en charge les points de sauvegarde |
Boolean supportsStatementPooling () | Il renvoie si la base de données prend en charge le regroupement d'instructions |
Supports booléensStoredProcedures () | Il renvoie si la base de données prend en charge les procédures stockées |
Supports booléensOuterJoins () | Il renvoie si la base de données prend en charge la jointure externe |
Ici, nous avons répertorié quelques méthodes importantes de l'interface DatabaseMetaData. Vous pouvez vous référer au site officiel du Oracle où vous pouvez voir toutes les méthodes disponibles dans l'interface DatabaseMetaData.
Exemple de 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()); } }
PRODUCTION:
Explication:
Dans le programme ci-dessus, nous avons utilisé / implémenté le getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), supportsBatch () , prend en chargeStatementPooling (), prend en chargeSavepoints (), prend en charge les méthodesStoredProcedures () et prend en chargeOuterJoins () dans l'interface DatabaseMetaData.
Points à noter:
- L'interface JDBC ResultSet est utilisée pour stocker les données de la base de données et les utiliser dans notre programme Java.
- Nous pouvons également utiliser ResultSet pour mettre à jour les données à l'aide des méthodes updateXXX ().
- L'objet ResultSet pointe le curseur avant la première ligne des données de résultat. En utilisant la méthode next (), nous pouvons parcourir le ResultSet.
- Nous avons des méthodes de navigation de ResultSet pour aller plus loin dans l'objet ResultSet
- ResultMetaData est utilisé pour obtenir plus d'informations sur le ResultSet comme le nom de la colonne, le nombre de colonnes, le type de données de la colonne, etc.
- DatabaseMetData est utilisé pour obtenir les informations sur la base de données que nous avons connectée
Questions fréquemment posées
Q # 1) Quelle est l'utilisation de ResultSet?
Répondre: ResultSet est utilisé pour stocker et récupérer les données de DB. Lorsque la méthode executeQuery () s'est exécutée, elle retournera l'objet ResultSet. Nous pouvons utiliser cet objet ResultSet dans notre programme pour exécuter la logique.
Q # 2) Comment vérifier si le ResultSet est vide ou non?
Répondre: Il n'y a pas de méthodes prédéfinies comme length (), size () disponibles pour vérifier le IsResultSet Empty. Nous pouvons utiliser la méthode next () pour itérer et si elle renvoie True, alors elle n'est pas vide, si elle retourne False signifie que ResultSet est vide.
Q # 3) Est-il possible que ResultSet soit nul?
Répondre: Non, la méthode executeQuery () retourne l'objet ResultSet qui peut ne jamais être nul.
Q # 4) Qu'est-ce que ResultSet modifiable?
Répondre: Un objet ResultSet modifiable est utilisé pour mettre à jour les données dans la colonne, insérer des données dans les colonnes et supprimer des lignes. Pour rendre un ResultSet modifiable, nous devons rendre le type scroll comme sensible ou insensible et le type CONCUR comme modifiable.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q # 5) Comment obtenir le nom de la base de données qui a été connecté?
Répondre: Nous pouvons utiliser la méthode getDatabaseProductName () de l'objet DatabaseMetaData.
Conclusion
Dans ce didacticiel, nous avons décrit les interfaces ResultSet, ResultSetMetaData et DatabaseMetaData et leurs méthodes importantes couramment utilisées dans les programmes JDBC. Nous avons également vu comment mettre à jour les données dans DB à l'aide de ResultSet. ResultSetMetadata contient des informations sur ResultSet telles que le nom de la colonne, le nombre de colonnes, etc.
DatabaseMetaData contient des informations sur la base de données.
lecture recommandée
- JDBC DriverManager, JDBC PreparedStatement et Statement
- Tutoriel Java JDBC: Qu'est-ce que JDBC (Java Database Connectivity)
- Gestion des transactions Java JDBC avec exemple
- Didacticiel sur le traitement par lots et les procédures stockées JDBC
- Tutoriel de connexion Java JDBC avec exemple de programmation
- Interfaces comparables et comparatives en Java
- Test de base de données Selenium (à l'aide de WebDriver et de l'API JDBC)
- Gestion des exceptions JDBC - Comment gérer les exceptions SQL