jdbc resultset how use java resultset retrieve data
In diesem Tutorial wird erläutert, wie Sie mit JDBC ResultSet Daten abrufen. Wir werden auch die Schnittstellen ResultSetMetaData und DatabaseMetaData anhand von Beispielen kennenlernen:
In dem JDBC DriverManager Tutorial der JDBC-Tutorialserie haben wir gelernt, wie man JDBC DriverManager und seine Methoden JDBC PreparedStatement in Java-Anwendungen verwendet.
In diesem Tutorial werden die verbleibenden Schnittstellen in JDBC erläutert. In unseren vorherigen Tutorials haben wir die Schnittstellen Statement, PreparedStatement und CallableStatement behandelt.
Hier erfahren Sie mehr über die Schnittstellen JDBC ResultSet, ResultSetMetaData und DatabaseMetaData, ihre Methoden und die Verwendung der Methoden im Java-Programm.
Was du lernen wirst:
JDBC ResultSet-Schnittstelle
Die ResultSet-Schnittstelle ist im Paket java.sql enthalten. Es wird verwendet, um die Daten zu speichern, die nach der Ausführung der SQL-Anweisungen im Java-Programm aus der Datenbanktabelle zurückgegeben werden. Das Objekt von ResultSet behält den Cursorpunkt auf den Ergebnisdaten bei. Standardmäßig befindet sich der Cursor vor der ersten Zeile der Ergebnisdaten.
Die next () -Methode wird verwendet, um den Cursor in Vorwärtsrichtung zur nächsten Position zu bewegen. Es wird FALSE zurückgegeben, wenn keine Datensätze mehr vorhanden sind. Es ruft Daten ab, indem es die Methode executeQuery () mit einem der Anweisungsobjekte aufruft. Dies kann ein Statement- oder PreparedStatement- oder CallableStatement-Objekt sein. Die Schnittstellen PreparedStatement und CallableStatement sind die Unterschnittstellen der Anweisungsschnittstelle.
Anweisungsschnittstelle
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement-Schnittstelle
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Wir können die Methode getX () verwenden, um die Daten der Spalten abzurufen, während wir die Ergebnisse durchlaufen, wobei X - der Datentyp der Spalte ist. Wir können entweder Spaltennamen oder Index verwenden, um die Werte mit den Methoden getX () abzurufen.
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); }
In den getX () -Methoden können wir auch die Indexnummer der Spalte anstelle des Spaltennamens angeben.
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-Typen
Standardmäßig können wir die Daten / Werte in ResultSet iterieren, die als Ausgabe der ausgeführten SQL-Anweisung in Vorwärtsrichtung zurückgegeben wurden. Mit Scrollable ResultSet können wir die Werte in andere Richtungen iterieren. Wir können den Typ und die Parallelität von ResultSet angeben, während wir Statement-, PreparedStatement- und CallableStatement-Objekte erstellen.
Es gibt 3 Typen in ResultSet. Sie sind:
- TYPE_FORWARD_ONLY: Dies ist die Standardoption, bei der sich der Cursor von Anfang nach Ende bewegt, d. H. In Vorwärtsrichtung.
- TYPE_SCROLL_INSENSITIVE: Bei diesem Typ bewegt sich der Cursor sowohl vorwärts als auch rückwärts. Wenn wir während der Iteration der gespeicherten Daten Änderungen an den Daten vornehmen, werden diese im Datensatz nicht aktualisiert, wenn jemand die Daten in der Datenbank ändert. Da das Dataset die Daten ab dem Zeitpunkt enthält, an dem die SQL-Abfrage die Daten zurückgibt.
- TYPE_SCROLL_SENSITIVE: Es ähnelt TYPE_SCROLL_INSENSITIVE. Der Unterschied besteht darin, dass jemand die Daten aktualisiert, nachdem die SQL-Abfrage die Daten zurückgegeben hat, während die Iteration die Änderungen am Dataset widerspiegelt.
ResultSet Parallelität
In ResultSet gibt es zwei Modi der Parallelität. Sie sind:
- ResultSet.CONCUR_READ_ONLY: Dies ist der Standard-Parallelitätsmodus. Wir können nur die Daten im ResultSet lesen. Aktualisierung ist nicht anwendbar.
- ResultSet.CONCUR_UPDATABLE: Wir können die Daten im ResultSet-Objekt aktualisieren.
Einige Datenbanken unterstützen den Parallelitätsmodus nicht für alle ResultSet-Typen. In diesem Fall müssen wir mithilfe der Methode supportResultSetConcurrency () überprüfen, ob sie unseren gewünschten Typ- und Parallelitätsmodus unterstützen.
Methoden in der ResultSet-Schnittstelle
Es gibt 4 Kategorien von ResultSet-Methoden. Sie sind:
- Navigationsmethoden
- Getter Methoden
- Setter-Methoden
- Verschiedene Methoden
Zuerst werden wir die Navigationsmethoden diskutieren und dann weiter gehen.
# 1) Navigationsmethoden
Diese Methode wird verwendet, um den Cursor im Datensatz zu bewegen.
- Boolesches Absolut (int row): Es wird verwendet, um den Cursor auf die angegebene Zeile zu bewegen, die im Parameter angegeben ist, und true zurückzugeben, wenn die Operation erfolgreich ist, andernfalls false zurückzugeben.
- Noid afterLast (): Dadurch bewegt sich der ResultSet-Cursor nach der letzten Zeile.
- Void beforeFirst (): Dadurch bewegt sich der ResultSet-Cursor vor der ersten Zeile.
- Boolean first (): Der ResultSet-Cursor bewegt sich in die erste Zeile. Es gibt True zurück, wenn die Operation erfolgreich ist, andernfalls False.
- Boolean last (): Der ResultSet-Cursor bewegt sich zur letzten Zeile. Es gibt True zurück, wenn die Operation erfolgreich ist, andernfalls False.
- Boolean next (): Der ResultSet-Cursor bewegt sich zur nächsten Zeile. Es gibt True zurück, wenn mehr Datensätze vorhanden sind, und False, wenn keine Datensätze mehr vorhanden sind.
- Boolean previous (): Dadurch bewegt sich der ResultSet-Cursor zur vorherigen Zeile. Es gibt True zurück, wenn die Operation erfolgreich ist, andernfalls False.
- Boolescher Verwandter (): Der Cursor bewegt sich entweder vorwärts oder rückwärts auf die angegebene Anzahl von Zeilen.
- Int getRow (): Es gibt die aktuelle Zeilennummer zurück, auf die das ResultSet-Objekt jetzt zeigt.
- Void moveToCurrentRow (): Der Cursor bewegt sich zurück zur aktuellen Zeile, wenn er sich gerade in der Einfügezeile befindet.
- Void moveToInsertRow (): Es bewegt den Cursor auf die bestimmte Zeile, um die Zeile in die Datenbank einzufügen. Es merkt sich die aktuelle Cursorposition. Wir können also die moveToCurrentRow () -Methode verwenden, um den Cursor nach dem Einfügen in die aktuelle Zeile zu bewegen.
In diesem Tutorial sind alle Programme in Java geschrieben. Wir haben Java 8 Version und Oracle DB verwendet.
>> Sie können die Oracle-Software von herunterladen Hier
>> Sie können die Java-Version 8 von herunterladen Hier
Es verfügt über einen schrittweisen Java-Installationsprozess.
JDBC ResultSet-Beispielprogramm: (Verwenden von Navigationsmethoden)
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(); } } }
AUSGABE:
Daten in der Tabelle Employee_details
Erläuterung:
Im obigen Programm haben wir die Methoden first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () und getRow () in ResultSet implementiert. Um diese Methoden zu verwenden, setzen wir ResultSet.TYPE_SCROLL_SENSITIVE-, ResultSet.CONCUR_UPDATABLE-Werte in der prepareStatement-Methode.
Als nächstes werden wir die Getter-Methoden in ResultSet diskutieren:
# 2) Getter-Methoden
ResultSet hat die Daten der Tabelle aus der Datenbank gespeichert. Getter-Methoden werden verwendet, um die Werte der Tabelle in ResultSet abzurufen. Dazu müssen wir entweder den Spaltenindexwert oder den Spaltennamen übergeben.
Im Folgenden sind die Getter-Methoden in ResultSet aufgeführt:
- int getInt (int ColumnIndex): Es wird verwendet, um den Wert der angegebenen Spalte Index als int-Datentyp abzurufen.
- float getFloat (int ColumnIndex): Es wird verwendet, um den Wert der angegebenen Spalte Index als Float-Datentyp abzurufen.
- java.sql.date getDate (int ColumnIndex): Es wird verwendet, um den Wert der angegebenen Spalte Index als Datumswert abzurufen.
- int getInt (String ColumnName): Es wird verwendet, um den Wert der angegebenen Spalte als int-Datentyp abzurufen.
- float getFloat (String ColumnName): Es wird verwendet, um den Wert der angegebenen Spalte als Float-Datentyp abzurufen.
- Java.sql.date getDate (String ColumnName): Es wird verwendet, um den Wert der angegebenen Spalte als Datumswert abzurufen.
Es gibt Getter-Methoden für alle primitiven Datentypen (Boolean, Long, Double) und String auch in der ResultSet-Schnittstelle. Wir können ein Array und einen binären Datentyp auch aus der Datenbank erhalten. Es gibt auch Methoden dafür.
# 3) Setter / Updater-Methoden
Wir können den Wert in der Datenbank mithilfe der ResultSet Updater-Methoden aktualisieren. Es ähnelt den Getter-Methoden, aber hier müssen wir die Werte / Daten für die bestimmte Spalte übergeben, um sie in der Datenbank zu aktualisieren.
Im Folgenden sind die Updater-Methoden in ResultSet aufgeführt:
- void updateInt (int ColumnIndex, int Value): Es wird verwendet, um den Wert der angegebenen Spalte Index mit einem int-Wert zu aktualisieren.
- void updateFloat (int ColumnIndex, float f): Es wird verwendet, um den Wert der angegebenen Spalte Index mit dem Gleitkommawert zu aktualisieren.
- void updateDate (int ColumnIndex, Datum d): Es wird verwendet, um den Wert der angegebenen Spalte Index mit dem Datumswert zu aktualisieren.
- void updateInt (String ColumnName, int Value): Es wird verwendet, um den Wert der angegebenen Spalte mit dem angegebenen int-Wert zu aktualisieren.
- void updateFloat (String ColumnName, float f): Es wird verwendet, um den Wert der angegebenen Spalte mit dem angegebenen Gleitkommawert zu aktualisieren.
- Java.sql.date getDate (String ColumnName): Es wird verwendet, um den Wert der angegebenen Spalte mit dem angegebenen Datumswert zu aktualisieren.
Es gibt Updater-Methoden für alle primitiven Datentypen (Boolean, Long, Double) und String auch in der ResultSet-Schnittstelle.
Updater-Methoden aktualisieren nur die Daten im ResultSet-Objekt. Die Werte werden in der Datenbank nach dem Aufrufen der Methode insertRow oder updateRow aktualisiert.
Aktualisieren einer Zeile:
Wir können die Daten in einer Zeile aktualisieren, indem wir updateX () -Methoden aufrufen, den Spaltennamen oder -index und die zu aktualisierenden Werte übergeben. Wir können in der updateX-Methode einen beliebigen Datentyp anstelle von X verwenden. Bisher haben wir die Daten im ResultSet-Objekt aktualisiert. Um die Daten in der Datenbank zu aktualisieren, müssen wir die updateRow () -Methode aufrufen.
Einfügen einer Zeile:
Wir müssen moveToInsertRow () verwenden, um den Cursor zu bewegen und eine neue Zeile einzufügen. Wir haben dies bereits im Abschnitt Navigationsmethoden behandelt. Als nächstes müssen wir die updateX () -Methode aufrufen, um die Daten zur Zeile hinzuzufügen. Wir sollten Daten für alle Spalten bereitstellen, da sonst der Standardwert dieser bestimmten Spalte verwendet wird.
Nach dem Aktualisieren der Daten müssen wir die Methode insertRow () aufrufen. Verwenden Sie dann die moveToCurrentRow () -Methode, um die Cursorposition auf die Zeile zurückzusetzen, in der wir uns befanden, bevor wir mit dem Einfügen einer neuen Zeile begonnen haben.
ResultSet Beispiel:
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(); } } }
AUSGABE:
Erläuterung:
Im obigen Programm haben wir zuerst die Daten der Employee_details-Tabelle mit der SELECT-Abfrage im ResultSet-Objekt gespeichert. Anschließend haben wir die Daten der letzten Zeile in der Tabelle employee_details mithilfe der last () -Methode von ResultSet angezeigt. Mit der Methode moveToInsertRow () zeigt der Cursor auf die aktuelle Zeile. Jetzt ist die aktuelle Zeile die letzte Zeile.
updateXXX () -Methoden zum Aktualisieren der Werte in der Zeile und insertRow () -Methode haben die Daten in eine neue Zeile eingefügt. Mit der Methode absolute () haben wir den Cursor so eingestellt, dass er auf die 5 zeigtthReihe. Die UpdateInt () -Methode wurde verwendet, um das EMPNUM mit einer neuen ID der 5 zu aktualisierenthMitarbeiter in der Tabelle. Danach werden die Daten angezeigt, um zu überprüfen, ob das EMPNUM aktualisiert wurde oder nicht.
Der Cursor zeigte mit last () auf die letzte Zeile der Tabelle und zeigte sie an. Um die obige Logik auszuführen, müssen Sie die Werte ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE in der prepareStatement-Methode festlegen.
# 4) Verschiedene Methoden
- void close (): Es wird verwendet, um die ResultSet-Instanz zu schließen und die mit der ResultSet-Instanz verknüpften Ressourcen freizugeben.
- ResultSetMetaData getMetaData (): Es gibt die ResultSetMetaData-Instanz zurück. Es enthält Informationen zu Typ und Eigenschaft der Spalten der Abfrageausgabe. Wir werden im nächsten Abschnitt mehr über ResultSetMetaData erfahren.
ResultSetMetaData
Was sind Metadaten?
Metadaten sind Daten über Daten. Über diese Schnittstelle erhalten wir weitere Informationen zu ResultSet. Es ist im Paket java.sql verfügbar. Jedes ResultSet-Objekt ist einem ResultSetMetaData-Objekt zugeordnet.
Dieses Objekt enthält die Details der Eigenschaften der Spalten wie Datentyp der Spalte, Spaltenname, Anzahl der Spalten, Tabellenname, Schemaname usw. Wir können das ResultSetMetaData-Objekt mit der getMetaData () -Methode von ResultSet abrufen.
Syntax der ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Wichtige Methoden der ResultSetMetaData-Schnittstelle:
Methodenname | Beschreibung |
---|---|
boolean isCaseSensitive (int Column) | Es gibt true zurück, wenn die angegebene Spalte zwischen Groß- und Kleinschreibung unterscheidet, andernfalls false |
String getColumnName (int column) | Es gibt den Spaltennamen der jeweiligen Spalte zurück |
Zeichenfolge getColumnTypeName (int column) | Es gibt den Datentyp der bestimmten Spalte zurück, die wir als Parameter übergeben haben |
Zeichenfolge getTableName (int-Spalte) | Es gibt den Tabellennamen der Spalte zurück |
Zeichenfolge getSchemaName (int-Spalte) | Es gibt den Schemanamen der Spaltentabelle zurück |
int getColumnCount () | Es gibt die Anzahl der Spalten des ResultSet zurück |
boolean isAutoIncrement (int Column) | Es gibt true zurück, wenn die angegebene Spalte Auto Increment ist, andernfalls false |
ResultSetMetaData Beispiel
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)); } } }
AUSGABE:
Erläuterung:
Top 10 Websites, um Anime zu sehen
Im obigen Programm haben wir die Methoden getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () und getSchemaName () in die Schnittstelle ResultSetMetaData implementiert.
DatabaseMetaData
Die DatabaseMetaData-Schnittstelle enthält Informationen zur Datenbank wie DatabaseName, Datenbankversion usw.
Wichtige Methoden der DatabaseMetaData-Schnittstelle:
Methodenname | Beschreibung |
---|---|
String getStringFunctions () | Es gibt die Liste der in der verbundenen Datenbank verfügbaren Zeichenfolgenfunktionen zurück |
String getDriverName () | Es wird der Name des JDBC-Treibers zurückgegeben, den wir in unserem Java-Programm verwenden |
String getDriverVersion () | Es gibt die Versionsnummer des JDBC-Treibers zurück |
String getUserName () | Es gibt den Benutzernamen der Datenbank zurück, die wir verwenden |
Zeichenfolge getDatabaseProductName () | Es gibt den Namen der Datenbank zurück, die wir verwenden |
Zeichenfolge getDatabaseProductVersion () | Es gibt die Versionsnummer der Datenbank zurück, die wir verwenden |
ResultSet getSchemas () | Es gibt die Namen der Schemas zurück, die in der verbundenen Datenbank verfügbar sind |
String getTimeDateFunctions () | Es gibt die Liste der Zeit- und Datumsfunktionen zurück, die in der verbundenen Datenbank verfügbar sind |
String getURL () | Es gibt die URL für die Datenbank zurück |
Boolean isReadOnly () | Es wird zurückgegeben, ob sich die Datenbank im schreibgeschützten Modus befindet |
Boolean unterstütztBatchUpdates () | Es wird zurückgegeben, ob die Datenbank Batch-Updates unterstützt |
Boolean unterstützt Savepoints () | Es wird zurückgegeben, ob die Datenbank Sicherungspunkte unterstützt |
Boolean unterstütztStatementPooling () | Es wird zurückgegeben, ob die Datenbank das Anweisungspooling unterstützt |
Boolean unterstütztStoredProcedures () | Es wird zurückgegeben, ob die Datenbank gespeicherte Prozeduren unterstützt |
Boolean unterstütztOuterJoins () | Es wird zurückgegeben, ob die Datenbank Outer Join unterstützt |
Hier haben wir einige wichtige Methoden der DatabaseMetaData-Schnittstelle aufgelistet. Sie können auf die offizielle Seite der Orakel Hier können Sie alle verfügbaren Methoden in der DatabaseMetaData-Schnittstelle anzeigen.
DatabaseMetaData Beispiel:
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()); } }
AUSGABE:
Erläuterung:
Im obigen Programm haben wir getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOn ( , unterstütztStatementPooling (), unterstütztSavepoints (), unterstütztStoredProcedures () und unterstütztOuterJoins () Methoden in DatabaseMetaData Interface.
Zu beachtende Punkte:
- Die JDBC ResultSet-Schnittstelle wird verwendet, um die Daten aus der Datenbank zu speichern und in unserem Java-Programm zu verwenden.
- Wir können ResultSet auch verwenden, um die Daten mit updateXXX () -Methoden zu aktualisieren.
- Das ResultSet-Objekt zeigt mit dem Cursor vor der ersten Zeile der Ergebnisdaten. Mit der next () -Methode können wir das ResultSet durchlaufen.
- Wir haben Navigationsmethoden von ResultSet, um uns im ResultSet-Objekt weiter zu bewegen
- ResultMetaData wird verwendet, um weitere Informationen zum ResultSet abzurufen, z. B. Spaltenname, Anzahl der Spalten, Datentyp der Spalte usw.
- DatabaseMetData wird verwendet, um Informationen über die Datenbank abzurufen, mit der wir verbunden sind
Häufig gestellte Fragen
F # 1) Was ist die Verwendung von ResultSet?
Antworten: ResultSet wird zum Speichern und Abrufen der Daten aus der Datenbank verwendet. Wenn die Methode executeQuery () ausgeführt wurde, gibt sie das ResultSet-Objekt zurück. Wir können dieses ResultSet-Objekt in unserem Programm verwenden, um die Logik auszuführen.
F # 2) Wie kann ich überprüfen, ob das ResultSet leer ist oder nicht?
Antworten: Es sind keine vordefinierten Methoden wie length (), size () verfügbar, um das IsResultSet Empty zu überprüfen. Wir können die next () -Methode zum Iterieren verwenden. Wenn True zurückgegeben wird, ist sie nicht leer. Wenn False zurückgegeben wird, bedeutet dies, dass das ResultSet leer ist.
F # 3) Ist es möglich, dass ResultSet null ist?
Antworten: Nein, die Methode executeQuery () gibt das ResultSet-Objekt zurück, das möglicherweise niemals null ist.
F # 4) Was ist aktualisierbares ResultSet?
Antworten: Ein aktualisierbares ResultSet-Objekt wird verwendet, um die Daten in der Spalte zu aktualisieren, Daten in Spalten einzufügen und Zeilen zu löschen. Um ein ResultSet als aktualisierbares zu erstellen, müssen Sie den Bildlauftyp als vertraulich oder unempfindlich und den CONCUR-Typ als aktualisierbar festlegen.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
F # 5) Wie erhalte ich den Datenbanknamen, der verbunden wurde?
Antworten: Wir können die Methode getDatabaseProductName () des DatabaseMetaData-Objekts verwenden.
Fazit
In diesem Lernprogramm haben wir die Schnittstellen ResultSet, ResultSetMetaData und DatabaseMetaData sowie deren wichtige Methoden erläutert, die häufig in JDBC-Programmen verwendet werden. Wir haben auch gesehen, wie Daten in der Datenbank mit ResultSet aktualisiert werden. ResultSetMetadata enthält Informationen zu ResultSet, z. B. Spaltenname, Spaltenanzahl usw.
DatabaseMetaData enthält Datenbankinformationen.
Literatur-Empfehlungen
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Java JDBC Tutorial: Was ist JDBC (Java Database Connectivity)
- Java JDBC Transaction Management mit Beispiel
- Tutorial zur JDBC-Stapelverarbeitung und gespeicherten Prozedur
- Java JDBC-Verbindungs-Tutorial mit Programmierbeispiel
- Vergleichbare und vergleichende Schnittstellen in Java
- Testen der Selendatenbank (mit WebDriver und JDBC-API)
- Behandlung von JDBC-Ausnahmen - Umgang mit SQL-Ausnahmen