Deze tutorial legt uit hoe je JDBC ResultSet gebruikt om gegevens op te halen. We leren ook over de interfaces ResultSetMetaData en DatabaseMetaData met voorbeelden:
In de JDBC DriverManager handleiding van de JDBC tutorialserie hebben we geleerd hoe we JDBC DriverManager en zijn methoden, JDBC PreparedStatement in Java-toepassingen kunnen gebruiken.
In deze tutorial bespreken we de overige interfaces in JDBC. We hebben de interfaces Statement, PreparedStatement en CallableStatement behandeld in onze vorige tutorials.
Hier leren we over JDBC ResultSet, ResultSetMetaData, en DatabaseMetaData interfaces, hun methoden en hoe de methoden te gebruiken in Java programma's.
JDBC ResultaatSet-interface
ResultSet Interface is aanwezig in het java.sql pakket. Het wordt gebruikt om de gegevens op te slaan die uit de database tabel komen na de uitvoering van de SQL statements in het Java Programma. Het object van ResultSet houdt de cursor op de resultaatgegevens. Standaard staat de cursor voor de eerste rij van de resultaatgegevens.
De next() methode wordt gebruikt om de cursor naar de volgende positie in voorwaartse richting te verplaatsen. Het zal FALSE retourneren als er geen records meer zijn. Het haalt gegevens op door de executeQuery() methode aan te roepen met behulp van een van de statement objecten. Het kan Statement of PreparedStatement of CallableStatement object zijn. PreparedStatement, en CallableStatement interfaces zijn de sub-interfaces van de Statementinterface.
Verklaring Interface
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");
We kunnen de methode getX() gebruiken om de gegevens van de kolommen te verkrijgen terwijl we itereren door de resultaten, waarbij X - het datatype van de kolom is. We kunnen ofwel Kolomnamen ofwel Index gebruiken om de waarden te verkrijgen met de methoden 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 salaris = rs1.getString("salaris"); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +","+deptNum +"," +salaris); } }.
We kunnen ook het indexnummer van de kolom vermelden in plaats van de kolomnaam in de getX()-methoden.
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 +"," +salaris); } }.
ResultSet Types
Standaard kunnen we de gegevens/waarden in ResultSet die zijn geretourneerd als output van de uitgevoerde SQL-instructie in de voorwaartse richting itereren. We kunnen de waarden in andere richtingen itereren met behulp van Scrollable ResultSet. We kunnen het type en de concurrency van ResultSet specificeren tijdens het creëren van Statement, PreparedStatement en CallableStatement objecten.
Er zijn 3 types in ResultSet. Dat zijn:
- TYPE_FORWARD_ONLY: Dit is de standaardoptie, waarbij de cursor van begin tot eind beweegt, dus in voorwaartse richting.
- TYPE_SCROLL_INSENSITIVE: In dit type zal de cursor zowel in voorwaartse als in achterwaartse richting bewegen. Als we veranderingen aanbrengen in de gegevens tijdens het itereren van de opgeslagen gegevens zal deze niet worden bijgewerkt in de dataset als iemand de gegevens in de DB wijzigt. Omdat de dataset de gegevens heeft vanaf het moment dat de SQL query de gegevens retourneert.
- TYPE_SCROLL_SENSITIVE: Het is vergelijkbaar met TYPE_SCROLL_INSENSITIVE, het verschil is dat als iemand de gegevens bijwerkt nadat de SQL Query de gegevens heeft geretourneerd, tijdens het itereren de wijzigingen in de dataset worden weergegeven.
ResultSet Concurrency
Er zijn 2 manieren van Concurrency in ResultSet. Dat zijn:
- ResultSet.CONCUR_READ_ONLY: Het is de standaard concurrency modus. We kunnen alleen de gegevens in de ResultSet lezen. Updaten is niet van toepassing.
- ResultSet.CONCUR_UPDATABLE: We kunnen de gegevens in het object ResultSet bijwerken.
Sommige databases ondersteunen geen concurrency mode voor alle ResultSet types. In dat geval moeten we controleren of ze ons gewenste type en concurrency mode ondersteunen met behulp van de methode supportsResultSetConcurrency().
Methoden in de ResultSet-interface
Er zijn 4 categorieën van ResultSet methoden. Dat zijn:
- Navigatiemethoden
- Getter Methoden
- Setter Methoden
- Diverse methoden
Eerst bespreken we de navigatiemethoden en daarna gaan we verder.
#1) Navigatiemethoden
Deze methode wordt gebruikt om de cursor in de dataset te verplaatsen.
- Booleaans absoluut(int rij): Het wordt gebruikt om de cursor te verplaatsen naar de opgegeven rij die in de parameter staat en geeft waar terug als de operatie succesvol is, anders onwaar.
- Void afterLast(): Het zorgt ervoor dat de ResultSet cursor na de laatste rij beweegt.
- Void beforeFirst(): Het zorgt ervoor dat de ResultSet cursor voor de eerste rij gaat staan.
- Boolean first(): Het zorgt ervoor dat de ResultSet cursor naar de eerste rij gaat. Het geeft True als de operatie succesvol is anders False.
- Booleaanse laatste(): Het zorgt ervoor dat de ResultSet cursor naar de laatste rij gaat. Het geeft True als de operatie succesvol is anders False.
- Boolean next(): Het zorgt ervoor dat de ResultSet cursor naar de volgende rij gaat. Het geeft True als er meer records zijn en False als er geen records meer zijn.
- Booleaanse vorige(): Het zorgt ervoor dat de ResultSet cursor naar de vorige rij gaat. Het geeft True terug als de operatie succesvol is anders False.
- Booleaanse relatief(): Het verplaatst de cursor naar het opgegeven aantal rijen in voorwaartse of achterwaartse richting.
- Int getRow(): Het geeft het huidige rijnummer waarnaar het ResultSet-object nu wijst.
- Void moveToCurrentRow(): Het verplaatst de cursor terug naar de huidige rij als deze zich momenteel in de invoegrij bevindt.
- Void moveToInsertRow(): Het verplaatst de cursor naar de specifieke rij om de rij in de database in te voegen. Het onthoudt de huidige cursorlocatie. We kunnen dus de methode moveToCurrentRow() gebruiken om de cursor na het invoegen naar de huidige rij te verplaatsen.
In deze tutorial zijn alle programma's geschreven in Java. We hebben Java 8 versie en Oracle DB gebruikt.
>>U kunt de Oracle software hier downloaden.
>>U kunt de Java versie 8 hier downloaden.
Het heeft het stap-voor-stap Java installatieproces.
JDBC ResultSet Voorbeeldprogramma: (Met behulp van navigatiemethoden)
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 { //DO Auto-gegenereerde methode stub //Selecteer query String select_query = "select * fromemployee_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) { //Creëren prepared Statement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); /Het verplaatsen van de cursor naar punt eerste rij rs.first();System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst();System.out.println("Cursor staat voor de eerste rij. Gebruik next() om vooruit te gaan"); //Verplaats de cursor naar de eerste rij met next() rs.next(); System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); /Verplaats de cursor naar de laatste rij rs.afterLast(); System.out.println("Cursorstaat na de laatste rij. Gebruik previous() om achteruit te gaan"); /De cursor naar de laatste rij verplaatsen met behulp van previous() rs.previous(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); /De cursor naar de derde rij verplaatsen rs.absolute(3); System.out.println("Cursor staat op de derde rij").rij"); System.out.println("THIRD ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); /Verplaats de cursor naar de vorige rij van de derde rij rs.relative(-1); System.out.println("Cursor wijst naar de 1 rij voorafgaand aan de 3e rij"); System.out.println("Second ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Verplaats de cursor naar de 4e rij na de 2e rij rs.relative(4); System.out.println("Cursor wijst naar de 4e rij na de 2e rij"); System.out.println("ZESDE RIJ \n EMP NUM = " + rs.getInt("empNum") +"\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Verplaats de cursor naar de huidige rij.System.out.println(" Huidige rij = " + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } }
OUTPUT:
Gegevens in de tabel Employee_details
Uitleg:
In het bovenstaande programma hebben we de methoden first(), last(), beforeFirst(), afterLast(), next(), previous(), absolute(), relative() en getRow() geïmplementeerd in ResultSet. Om deze methoden te gebruiken stellen we ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE waarden in de prepareStatement methode.
Vervolgens zullen we bespreken wat de Getter Methods in ResultSet zijn:
#2) Getter Methoden
ResultSet heeft de gegevens van de tabel uit de Database opgeslagen. Getter methods worden gebruikt om de waarden van de tabel in ResultSet te krijgen. Daarvoor moeten we ofwel de kolom Index waarde of Kolomnaam doorgeven.
Hieronder volgen de getter-methodes in ResultSet:
- int getInt(int ColumnIndex): Het wordt gebruikt om de waarde van de gespecificeerde kolom Index als een int gegevenstype te verkrijgen.
- float getFloat(int ColumnIndex): Het wordt gebruikt om de waarde van de gespecificeerde kolom Index te verkrijgen als een float gegevenstype.
- java.sql.date getDate(int ColumnIndex): Het wordt gebruikt om de waarde van de opgegeven kolom Index te verkrijgen als een datumwaarde.
- int getInt(String ColumnName): Het wordt gebruikt om de waarde van de opgegeven kolom te krijgen als een int datatype.
- float getFloat(String ColumnName): Het wordt gebruikt om de waarde van de gespecificeerde kolom te verkrijgen als een float gegevenstype.
- Java.sql.date getDate(String ColumnName): Het wordt gebruikt om de waarde van de opgegeven kolom als een datumwaarde te krijgen.
Er zijn getter-methoden voor alle primitieve datatypes (Boolean, long, double) en String ook in de ResultSet interface. We kunnen ook een array en binaire datatypes uit de Database halen. Daar heeft het ook methoden voor.
#3) Setter/Updater Methoden
We kunnen de waarde in de database bijwerken met behulp van ResultSet Updater methods. Het is vergelijkbaar met Getter methods, maar hier moeten we de waarden/gegevens doorgeven voor de specifieke kolom die we willen bijwerken in de database.
Hieronder volgen de bijwerkmethoden in ResultSet:
- void updateInt(int ColumnIndex, int Value): Het wordt gebruikt om de waarde van de gespecificeerde kolom Index bij te werken met een int waarde.
- void updateFloat(int ColumnIndex, float f): Het wordt gebruikt om de waarde van de gespecificeerde kolom Index bij te werken met de floatwaarde.
- void updateDate(int ColumnIndex, Date d): Het wordt gebruikt om de waarde van de opgegeven kolom Index bij te werken met de datumwaarde.
- void updateInt(String ColumnName, int Value): Het wordt gebruikt om de waarde van de opgegeven kolom bij te werken met de opgegeven int waarde.
- void updateFloat(String ColumnName, float f): Het wordt gebruikt om de waarde van de opgegeven kolom bij te werken met de opgegeven zwevende waarde.
- Java.sql.date getDate(String ColumnName): Het wordt gebruikt om de waarde van de opgegeven kolom bij te werken met de opgegeven datumwaarde.
Er zijn Updater methods voor alle primitieve datatypes (Boolean, long, double) en String ook in ResultSet interface.
Updater methods updaten alleen de gegevens in het ResultSet object. Waarden worden bijgewerkt in DB na het aanroepen van de insertRow of updateRow methode.
Een rij bijwerken:
We kunnen de gegevens in een rij bijwerken door de methode updateX() aan te roepen en de kolomnaam of index en de bij te werken waarden door te geven. We kunnen elk gegevenstype gebruiken in plaats van X in de methode updateX. Tot nu toe hebben we de gegevens in het object ResultSet bijgewerkt. Om de gegevens in de DB bij te werken, moeten we de methode updateRow() aanroepen.
Een rij invoegen:
We moeten moveToInsertRow() gebruiken om de cursor te verplaatsen om een nieuwe rij in te voegen. We hebben dit al behandeld in de sectie Navigatiemethoden. Vervolgens moeten we de methode updateX() aanroepen om de gegevens aan de rij toe te voegen. We moeten gegevens verstrekken voor alle kolommen, anders wordt de standaardwaarde van die specifieke kolom gebruikt.
Na het bijwerken van de gegevens moeten we de methode insertRow() aanroepen. Gebruik dan de methode moveToCurrentRow() om de cursorpositie terug te brengen naar de rij waar we waren voordat we een nieuwe rij gingen invoegen.
ResultSet Voorbeeld:
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-gegenereerde methode 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();/Controleert of het stuurprogramma scroll insensitive type en concur updatable ondersteunt boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { //Creëren prepared Statement PreparedStatement pstatemnt1 == true.conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); /Het verplaatsen van de cursor naar punt laatste rij van de tabel rs.last(); System.out.println("LAST ROW: Before inserting new Employee"); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\nLAST NAME = "+ rs.getString(2)+"\ FIRST NAME = " + rs.getString(3)); //De waarden instellen om in te voegen in de EMPLOYEE_DETAILS tabel //Verplaats de cursor om een rij in te voegen in de tabel rs.moveToInsertRow(); //Update EMPNUM waarde rs.updateInt(1, 1017); //Update LAST NAME waarde rs.updateString(2, "Bond"); //Update FIRST NAME waarde rs.updateString(3, "James"); //Insert een nieuwe rij rs.insertRow();/Het verplaatsen van de cursor naar punt 5e rij rs.absolute(5); System.out.println("Voor het bijwerken van EMPNUM van de 5e rij"); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); System.out.println(" Het bijwerken van EMP id van de 5e EMPLOYEE"); //Het bijwerken van EMPNUM van de 5e rij rs.updateInt(1,3005); rs.updateRow(); System.out.println("\n EMPNUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } }}
OUTPUT:
Uitleg:
In het bovenstaande programma hebben we eerst de gegevens van de tabel Employee_details opgeslagen in het object ResultSet met behulp van de SELECT-query. Vervolgens hebben we de gegevens van de laatste rij in de tabel employee_details weergegeven met behulp van de methode last() van ResultSet. Met de methode moveToInsertRow() wijst de cursor naar de huidige rij, nu is de huidige rij de laatste rij.
updateXXX() methoden gebruikt om de waarden in de rij bij te werken en insertRow() methode heeft de gegevens ingevoegd in een nieuwe rij. Met behulp van absolute() methode, maakten we de cursor te wijzen op de 5e rij. UpdateInt() methode is gebruikt om de EMPNUM bij te werken met een nieuwe id van de 5e werknemer in de tabel. Daarna weergegeven de gegevens om te controleren of de EMPNUM is bijgewerkt of niet.
De cursor naar de laatste rij van de tabel laten wijzen met last() en deze weergeven. Om de bovenstaande logica uit te voeren, moeten we de waarden ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE instellen in de methode prepareStatement.
#4) Diverse methoden
- void close(): Het wordt gebruikt om de instantie ResultSet te sluiten en de middelen vrij te maken die aan de instantie ResultSet zijn gekoppeld.
- ResultSetMetaData getMetaData(): Deze geeft de ResultSetMetaData Instance terug, met informatie over het type en de eigenschappen van de kolommen van de query-uitvoer. Wij zullen meer leren over ResultSetMetaData in de volgende sectie.
ResultSetMetaData
Wat zijn metadata?
Metadata betekent gegevens over gegevens. Met deze interface krijgen we meer informatie over ResultSet. Hij is beschikbaar in het java.sql pakket. Elk ResultSet object is geassocieerd met één ResultSetMetaData object.
Dit object bevat de details van de eigenschappen van de kolommen zoals datatype van de kolom, kolomnaam, aantal kolommen, tabelnaam, schema naam, enz. We kunnen het object ResultSetMetaData verkrijgen met de methode getMetaData() van ResultSet.
Syntaxis van de ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAILS"); ResultSetMetaData rsmd = rs.getMetaData();
Belangrijke methodes van de interface ResultSetMetaData:
Methode Naam | Beschrijving |
---|---|
String getColumnName(int column) | Het geeft de kolomnaam van de specifieke kolom |
String getColumnTypeName(int kolom) | Het geeft het datatype van de kolom die we als parameter hebben doorgegeven. |
String getTableName(int kolom) | Het geeft de tabelnaam van de kolom |
String getSchemaName(int kolom) | Het geeft de schemanaam van de tabel van de kolom. |
int getColumnCount() | Het geeft het aantal kolommen van de ResultSet terug |
boolean isAutoIncrement(int Kolom) | Het geeft true als de gegeven kolom Auto Increment is, anders false. |
boolean isCaseSensitive(int Kolom) | Het geeft waar als de gegeven kolom hoofdlettergevoelig is, anders onwaar. |
Voorbeeld van 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-gegenereerde methode stub String QUERY= " select * fromemployee_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 gebruiken 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)); } }.
OUTPUT:
Uitleg:
In het bovenstaande programma hebben we de methoden getColumnCount(), getColumnName(), getColumnTypeName(), getTableName() en getSchemaName() geïmplementeerd in de interface ResultSetMetaData.
DatabaseMetaData
De interface DatabaseMetaData geeft informatie over de Database zoals DatabaseNaam, Databaseversie, enzovoort.
Belangrijke methoden van de interface DatabaseMetaData:
Methode Naam | Beschrijving |
---|---|
String getDriverName() | Het geeft de naam van het JDBC-stuurprogramma dat we in ons Java-programma gebruiken. |
String getDriverVersion() | Het geeft het versienummer van het JDBC-stuurprogramma |
String getUserName() | Het geeft de gebruikersnaam van de Database die we gebruiken |
String getDatabaseProductName() | Het geeft de naam van de Database die we gebruiken |
String getDatabaseProductVersion() | Het geeft het versienummer van de database die we gebruiken. |
ResultSet getSchemas() | Het geeft de namen van de schema's die beschikbaar zijn in de verbonden Database |
String getStringFunctions() | Het geeft de lijst van stringfuncties die beschikbaar zijn in de verbonden Database |
String getTimeDateFunctions() | Het geeft de lijst van tijd- en datumfuncties die beschikbaar zijn in de verbonden Database. |
String getURL() | Het geeft de URL voor de database |
Boolean isReadOnly() | Het geeft terug of de database in read-only modus staat. |
Boolean ondersteuntBatchUpdates() | Het geeft terug of de database batch updates ondersteunt |
Boolean ondersteuntSpaarpunten() | Het geeft terug of de Database Bewaarpunten ondersteunt |
Boolean ondersteuntStatementPooling() | Geeft aan of de database Statement Pooling ondersteunt |
Boolean ondersteuntOpgeslagenProcedures() | Het geeft terug of de database opgeslagen procedures ondersteunt |
Boolean ondersteuntBuitensteAansluitingen() | Het geeft terug of de database Outer Join ondersteunt |
Hier hebben we enkele belangrijke methoden van de interface DatabaseMetaData opgesomd. U kunt de officiële site van de Oracle waar u alle methoden kunt zien die beschikbaar zijn in de interface DatabaseMetaData.
DatabaseMetaData Voorbeeld:
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-gegenereerde methode stubClass.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 theDatabase: " + dbmd.getUserName()); System.out.println("Database Product Name:" + dbmd.getDatabaseProductName()); System.out.println("Database Product Version: " + dbmd.getDatabaseProductVersion()); System.out.println("Lijst van String Functies in de Database: " + dbmd.getStringFunctions()); System.out.println("Lijst van Time & Date functies in de Database: " + dbmd.getTimeDateFunctions());System.out.println("URL van de Database: " + dbmd.getURL()); System.out.println("Database is read - only? " +dbmd.isReadOnly()); System.out.println("Ondersteuning Batch Updates? " + dbmd.supportsBatchUpdates()); System.out.println("Ondersteuning savepoints? " + dbmd.supportsSavepoints()); System.out.println("Ondersteuning Statement Pooling?"+ dbmd.supportsStatementPooling()); System.out.println("Ondersteuning StoredProcedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join?"+ dbmd.supportsOuterJoins()); } }.
OUTPUT:
Uitleg:
In het bovenstaande programma hebben we de methoden getDriverName(), getDriverVersion(), getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStoredProcedures() en supportsOuterJoins() gebruikt/geïmplementeerd in de DatabaseMetaData Interface.
Aandachtspunten:
- JDBC ResultSet interface wordt gebruikt om de gegevens van de database op te slaan en te gebruiken in ons Java Programma.
- We kunnen ResultSet ook gebruiken om de gegevens bij te werken met de updateXXX() methoden.
- ResultSet object plaatst de cursor vóór de eerste rij van de resultaatgegevens. Met de methode next() kunnen we door de ResultSet itereren.
- We hebben navigatiemethoden van ResultSet om verder te gaan in het ResultSet-object
- ResultMetaData wordt gebruikt om meer informatie te krijgen over de ResultSet, zoals kolomnaam, aantal kolommen, het datatype van de kolom, enz.
- DatabaseMetData wordt gebruikt om de informatie te krijgen over de database die we hebben aangesloten
Vaak gestelde vragen
V #1) Wat is het nut van ResultSet?
Antwoord: ResultSet wordt gebruikt om de gegevens op te slaan en op te halen uit de DB. Wanneer de executeQuery() methode is uitgevoerd, zal deze ResultSet object teruggeven. We kunnen dat ResultSet object gebruiken in ons programma om de logica uit te voeren.
Vraag 2) Hoe kan ik controleren of de ResultSet leeg is of niet?
Antwoord: Er zijn geen voorgedefinieerde methoden zoals lengte(), grootte() beschikbaar om de IsResultSet Leeg te controleren. We kunnen de methode next() gebruiken om te itereren en als het True retourneert, dan is het niet leeg, als het False retourneert betekent het dat de ResultSet leeg is.
V #3) Is het mogelijk dat ResultSet null is?
Antwoord: Nee, de methode executeQuery() retourneert het object ResultSet, dat nooit null mag zijn.
V4) Wat is een bijwerkbare ResultSet?
Antwoord: Een updatable ResultSet object wordt gebruikt om de gegevens in de kolom bij te werken, gegevens in te voegen in kolommen en rijen te verwijderen. Om een ResultSet updatable te maken, moeten we scroll type als sensitive of insensitive en CONCUR type als updatable maken.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
V #5) Hoe krijg ik de naam van de aangesloten Database?
Antwoord: Wij kunnen de methode getDatabaseProductName() van het object DatabaseMetaData gebruiken.
Conclusie
In deze tutorial hebben we besproken wat de interfaces ResultSet, ResultSetMetaData, en DatabaseMetaData zijn en hun belangrijke methoden die vaak gebruikt worden in de JDBC programma's. We hebben ook gezien hoe je gegevens in DB kunt bijwerken met behulp van ResultSet. ResultSetMetadata bevat informatie over ResultSet zoals Kolomnaam, Kolomtelling, enzovoort.
DatabaseMetaData bevat Database informatie.
<