jdbc resultset how use java resultset retrieve data
In deze zelfstudie wordt uitgelegd hoe u JDBC ResultSet gebruikt om gegevens op te halen. We zullen ook leren over ResultSetMetaData en DatabaseMetaData interfaces met voorbeelden:
In de JDBC DriverManager tutorial 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 Statement-, PreparedStatement- en CallableStatement-interfaces behandeld in onze vorige tutorials.
Hier zullen we leren over JDBC ResultSet, ResultSetMetaData en DatabaseMetaData-interfaces, hun methoden en hoe de methoden in het Java-programma te gebruiken.
Wat je leert:
JDBC ResultSet-interface
ResultSet-interface is aanwezig in het pakket java.sql. Het wordt gebruikt om de gegevens op te slaan die worden geretourneerd uit de databasetabel na het uitvoeren van de SQL-instructies in het Java-programma. Het object van ResultSet handhaaft de cursor op de resultaatgegevens. Standaard staat de cursor voor de eerste rij met de resultaatgegevens.
De volgende () 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 methode executeQuery () aan te roepen met een van de instructieobjecten. Het kan een Statement, PreparedStatement of CallableStatement-object zijn. PreparedStatement- en CallableStatement-interfaces zijn de subinterfaces van de Statement-interface.
Statement-interface
PreparedStatement-interface
We kunnen de methode getX () gebruiken om de gegevens van de kolommen op te halen terwijl we de resultaten doorlopen, waarbij X - het datatype van de kolom is. We kunnen kolomnamen of index gebruiken om de waarden op te halen met behulp van getX () - methoden.
We kunnen ook het indexnummer van de kolom vermelden in plaats van de kolomnaam in de getX () - methoden.
ResultSet-typen
Standaard kunnen we de gegevens / waarden in ResultSet die zijn geretourneerd als uitvoer van de uitgevoerde SQL-instructie in voorwaartse richting herhalen. We kunnen de waarden in andere richtingen herhalen met Scrollable ResultSet. We kunnen het type en de gelijktijdigheid van ResultSet specificeren tijdens het maken van Statement-, PreparedStatement- en CallableStatement-objecten.
Er zijn 3 soorten in ResultSet. Zij zijn:
- TYPE_FORWARD_ONLY: Het is de standaardoptie, waarbij de cursor van begin naar eind beweegt, d.w.z. in voorwaartse richting.
- TYPE_SCROLL_INSENSITIVE: In dit type zorgt het ervoor dat de cursor zowel voorwaarts als achterwaarts beweegt. Als we wijzigingen aanbrengen in de gegevens tijdens het herhalen van de opgeslagen gegevens, wordt deze niet bijgewerkt in de dataset als iemand de gegevens in DB wijzigt. Omdat de dataset de gegevens bevat van het moment dat de SQL-query de Data.
- TYPE_SCROLL_SENSITIVE: Het is vergelijkbaar met TYPE_SCROLL_INSENSITIVE, het verschil is of iemand de gegevens bijwerkt nadat de SQL-query de gegevens heeft geretourneerd, terwijl het itereren de wijzigingen in de gegevensset weerspiegelt.
ResultSet Concurrency
Er zijn 2 manieren van gelijktijdigheid in ResultSet. Zij zijn:
- ResultSet.CONCUR_READ_ONLY: Het is de standaard gelijktijdigheidsmodus. We kunnen alleen de gegevens in de ResultSet lezen. Updaten is niet van toepassing.
- ResultSet.CONCUR_UPDATABLE: We kunnen de gegevens in het ResultSet-object bijwerken.
Sommige databases ondersteunen de gelijktijdigheidsmodus niet voor alle ResultSet-typen. In dat geval moeten we controleren of ze ons gewenste type en gelijktijdigheidsmodus ondersteunen met behulp van de methode supportsResultSetConcurrency ().
Methoden in ResultSet-interface
Er zijn 4 categorieën ResultSet-methoden. Zij zijn:
- Navigatiemethoden
- Getter-methoden
- Setter-methoden
- Diverse methoden
Eerst zullen we de navigatiemethoden bespreken en dan verder gaan.
# 1) Navigatiemethoden
Deze methode wordt gebruikt om de cursor door de dataset te verplaatsen.
- Booleaanse absolute (int rij): Het wordt gebruikt om de cursor naar de opgegeven rij te verplaatsen die wordt vermeld in de parameter en true te retourneren als de bewerking succesvol is, anders retourneert false.
- Ongeldig afterLast (): Het zorgt ervoor dat de ResultSet-cursor na de laatste rij beweegt.
- Ongeldig beforeFirst (): Het zorgt ervoor dat de ResultSet-cursor voor de eerste rij beweegt.
- Booleaanse eerste (): Het zorgt ervoor dat de ResultSet-cursor naar de eerste rij gaat. Het retourneert True als de bewerking is geslaagd, anders False.
- Booleaanse laatste (): Het zorgt ervoor dat de ResultSet-cursor naar de laatste rij gaat. Het retourneert True als de bewerking is geslaagd, anders False.
- Booleaanse volgende (): Het zorgt ervoor dat de ResultSet-cursor naar de volgende rij gaat. Het retourneert 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 retourneert True als de bewerking is geslaagd, anders False.
- Booleaans relatief (): Het verplaatst de cursor naar het opgegeven aantal rijen in voorwaartse of achterwaartse richting.
- Int getRow (): Het retourneert het huidige rijnummer waarnaar het ResultSet-object nu verwijst.
- Ongeldige 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 de Java 8-versie en Oracle DB gebruikt.
>> U kunt de Oracle-software downloaden van hier
>> U kunt de Java-versie 8 downloaden van hier
Het heeft het stapsgewijze Java-installatieproces.
JDBC ResultSet-voorbeeldprogramma: (met behulp van navigatiemethoden)
UITGANG:
Gegevens in de tabel Employee_details
Uitleg:
In het bovenstaande programma hebben we de methoden first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relatieve () en getRow () geïmplementeerd in ResultSet. Om deze methoden te gebruiken, stellen we ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE waarden in in de methode preparStatement.
Vervolgens zullen we bespreken wat de Getter-methoden in ResultSet zijn:
# 2) Getter-methoden
ResultSet heeft de gegevens van de tabel uit de database opgeslagen. Getter-methoden worden gebruikt om de waarden van de tabel in ResultSet op te halen. Daarvoor moeten we een kolomindexwaarde of kolomnaam doorgeven.
Dit zijn de getter-methoden in ResultSet:
- int getInt(int ColumnIndex): Het wordt gebruikt om de waarde van de opgegeven kolom Index op te halen als een int-gegevenstype.
- float getFloat (int ColumnIndex): Het wordt gebruikt om de waarde van de opgegeven kolomindex op te halen als een zwevend gegevenstype.
- java.sql.date getDate (int ColumnIndex): Het wordt gebruikt om de waarde van de opgegeven kolom Index als een datumwaarde op te halen.
- int getInt(String ColumnName): Het wordt gebruikt om de waarde van de opgegeven kolom op te halen als een int-gegevenstype.
- float getFloat (String ColumnName): Het wordt gebruikt om de waarde van de opgegeven kolom op te halen als een zwevend gegevenstype.
- Java.sql.date getDate (String ColumnName): Het wordt gebruikt om de waarde van de opgegeven kolom als een datumwaarde op te halen.
Er zijn getter-methoden voor alle primitieve gegevenstypen (Boolean, lang, dubbel) en String ook in de ResultSet-interface. We kunnen ook een array en binair gegevenstype verkrijgen uit de database. Daar heeft het ook methoden voor.
# 3) Setter / Updater-methoden
We kunnen de waarde in de database bijwerken met behulp van de ResultSet Updater-methoden. Het is vergelijkbaar met de Getter-methoden, maar hier moeten we de waarden / gegevens voor de specifieke kolom doorgeven om bij te werken in de database.
Dit zijn de updater-methoden in ResultSet:
- void updateInt (int ColumnIndex, int Value): Het wordt gebruikt om de waarde van de opgegeven kolom Index bij te werken met een int-waarde.
- ongeldig updateFloat (int ColumnIndex, float f): Het wordt gebruikt om de waarde van de opgegeven kolomindex bij te werken met de zwevende waarde.
- ongeldig 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 float-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-methoden voor alle primitieve gegevenstypen (Boolean, lang, dubbel) en String ook in de ResultSet-interface.
Updater-methoden werken gewoon de gegevens in het ResultSet-object bij. Waarden worden bijgewerkt in DB nadat de methode insertRow of updateRow is aangeroepen.
Een rij bijwerken:
We kunnen de gegevens in een rij bijwerken door de methoden updateX () aan te roepen, de kolomnaam of index door te geven en waarden die moeten worden bijgewerkt. We kunnen elk gegevenstype gebruiken in plaats van X in de updateX-methode. Tot nu toe hebben we de gegevens in het ResultSet-object bijgewerkt. Om de gegevens in DB bij te werken, moeten we de updateRow () - methode 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 vervolgens de methode moveToCurrentRow () om de cursorpositie terug te brengen naar de rij waar we waren voordat we begonnen met het invoegen van een nieuwe rij.
ResultSet Voorbeeld:
UITGANG:
Uitleg:
In het bovenstaande programma hebben we eerst de gegevens van de tabel Employee_details in het ResultSet-object opgeslagen 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. De methode moveToInsertRow () zorgt ervoor dat de cursor naar de huidige rij wijst, nu is de huidige rij de laatste rij.
updateXXX () methoden die worden gebruikt om de waarden naar de rij bij te werken en de methode insertRow () heeft de gegevens in een nieuwe rij ingevoegd. Met de methode absolute () hebben we de cursor naar de 5 laten wijzenthrij. De methode UpdateInt () is gebruikt om het EMPNUM bij te werken met een nieuwe id van de 5thwerknemer in de tafel. Daarna worden de gegevens weergegeven om te controleren of het EMPNUM is bijgewerkt of niet.
De cursor met last () naar de laatste rij van de tabel laten wijzen en deze weergeven. Om de bovenstaande logica uit te voeren, moeten we ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE -waarden instellen in de methode preparStatement.
# 4) Diverse methoden
- leegte sluiten (): Het wordt gebruikt om de ResultSet-instantie te sluiten en de bronnen vrij te maken die zijn gekoppeld aan de ResultSet-instantie.
- ResultSetMetaData getMetaData (): Het retourneert de ResultSetMetaData-instantie. Het bevat de informatie over het type en de eigenschap van kolommen van de query-uitvoer. In de volgende sectie zullen we meer leren over ResultSetMetaData.
ResultSetMetaData
Wat is metadata?
Metadata betekent data over data. Met behulp van deze interface krijgen we meer informatie over ResultSet. Het is beschikbaar in het pakket java.sql. Elk ResultSet-object is gekoppeld aan één ResultSetMetaData-object.
Dit object heeft de details van de eigenschappen van de kolommen, zoals datatype van de kolom, kolomnaam, aantal kolommen, tabelnaam, schemanaam, enz. We kunnen het ResultSetMetaData-object verkrijgen met behulp van de getMetaData () - methode van ResultSet.
Syntaxis van de ResultSetMetaData:
Belangrijke methoden van ResultSetMetaData-interface:
Methode naam | Omschrijving |
---|---|
boolean isCaseSensitive (int Column) | Het retourneert true als de opgegeven kolom hoofdlettergevoelig is, anders false |
String getColumnName (int kolom) | Het retourneert de kolomnaam van de specifieke kolom |
String getColumnTypeName (int kolom) | Het retourneert het datatype van de specifieke kolom die we hebben doorgegeven als parameter |
String getTableName (int kolom) | Het retourneert de tabelnaam van de kolom |
String getSchemaName (int kolom) | Het retourneert de schemanaam van de kolomtabel |
int getColumnCount () | Het retourneert het aantal kolommen van de ResultSet |
boolean isAutoIncrement (int Column) | Het retourneert true als de opgegeven kolom Auto Increment is, anders false |
ResultSetMetaData-voorbeeld
UITGANG:
Uitleg:
hoe open je xml-bestanden
In het bovenstaande programma hebben we de methoden getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () en getSchemaName () geïmplementeerd in de ResultSetMetaData-interface.
DatabaseMetaData
De DatabaseMetaData-interface geeft informatie over de database, zoals databasenaam, databaseversie, enzovoort.
Belangrijke methoden van DatabaseMetaData-interface:
Methode naam | Omschrijving |
---|---|
Tekenreeks getStringFunctions () | Het retourneert de lijst met stringfuncties die beschikbaar zijn in de verbonden database |
Tekenreeks getDriverName () | Het retourneert de naam van de JDBC-driver die we gebruiken in ons Java-programma |
Tekenreeks getDriverVersion () | Het retourneert het versienummer van het JDBC-stuurprogramma |
Tekenreeks getUserName () | Het retourneert de gebruikersnaam van de database die we gebruiken |
Tekenreeks getDatabaseProductName () | Het retourneert de naam van de database die we gebruiken |
Tekenreeks getDatabaseProductVersion () | Het retourneert het versienummer van de database die we gebruiken |
ResultSet getSchemas () | Het retourneert de namen van de schema's die beschikbaar zijn in de verbonden database |
Tekenreeks getTimeDateFunctions () | Het retourneert de lijst met tijd- en datumfuncties die beschikbaar zijn in de verbonden database |
Tekenreeks getURL () | Het retourneert de URL voor de database |
Boolean isReadOnly () | Het geeft aan of de database in de alleen-lezen modus is |
Booleaanse supportsBatchUpdates () | Het geeft aan of de database batchupdates ondersteunt |
Boolean supportsSavepoints () | Het geeft aan of de database Savepoints ondersteunt |
Boolean supportsStatementPooling () | Het geeft aan of de database Statement Pooling ondersteunt |
Boolean supportsStoredProcedures () | Het geeft aan of de database opgeslagen procedures ondersteunt |
Booleaanse supportsOuterJoins () | Het geeft aan of de database Outer Join ondersteunt |
Hier hebben we enkele belangrijke methoden van de DatabaseMetaData-interface opgesomd. U kunt verwijzen naar de officiële site van het Orakel waar u alle methoden kunt zien die beschikbaar zijn in de DatabaseMetaData-interface.
DatabaseMetaData Voorbeeld:
UITGANG:
Uitleg:
In het bovenstaande programma hebben we de getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), ondersteunt () gebruikt / geïmplementeerd , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () en supportsOuterJoins () -methoden in de DatabaseMetaData-interface.
Aandachtspunten:
- De JDBC ResultSet-interface wordt gebruikt om de gegevens uit 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 methode updateXXX ().
- ResultSet-object wijst de cursor naar vóór de eerste rij van de resultaatgegevens. Met behulp van de methode next () kunnen we de ResultSet herhalen.
- 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, etc.
- DatabaseMetData wordt gebruikt om de informatie op te halen over de database die we hebben aangesloten
Veel Gestelde Vragen
Q # 1) Wat is het gebruik van ResultSet?
Antwoord: ResultSet wordt gebruikt om de gegevens op te slaan en op te halen uit DB. Wanneer de methode executeQuery () is uitgevoerd, retourneert deze het ResultSet-object. We kunnen dat ResultSet-object in ons programma gebruiken om de logica uit te voeren.
Q # 2) Hoe controleer ik of de ResultSet leeg is of niet?
Antwoord: Er zijn geen vooraf gedefinieerde methoden zoals length (), size () beschikbaar om de IsResultSet Empty 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 dit dat de ResultSet leeg is.
V # 3) Is het mogelijk dat ResultSet null is?
Antwoord: Nee, de methode executeQuery () retourneert het ResultSet-object dat nooit null mag zijn.
V # 4) Wat kan ResultSet worden bijgewerkt?
Antwoord: Een bijwerkbaar ResultSet-object wordt gebruikt om de gegevens in de kolom bij te werken, gegevens in kolommen in te voegen en rijen te verwijderen. Om een ResultSet te maken die kan worden bijgewerkt, moeten we het scrolltype als gevoelig of ongevoelig maken en het CONCUR-type als bij te werken.
V # 5) Hoe krijg ik de databasenaam die is verbonden?
Antwoord: We kunnen de methode getDatabaseProductName () van het DatabaseMetaData-object gebruiken.
Gevolgtrekking
In deze tutorial hebben we besproken wat de ResultSet-, ResultSetMetaData- en DatabaseMetaData-interfaces zijn en hun belangrijke methoden die vaak worden gebruikt in de JDBC-programma's. We hebben ook gezien hoe u gegevens in DB kunt bijwerken met ResultSet. ResultSetMetadata bevat informatie over ResultSet, zoals de kolomnaam, het aantal kolommen, enzovoort.
DatabaseMetaData bevat database-informatie.
Aanbevolen literatuur
- JDBC DriverManager, JDBC PreparedStatement en Statement
- Java JDBC-zelfstudie: wat is JDBC (Java Database Connectivity)
- Java JDBC-transactiebeheer met voorbeeld
- Zelfstudie over JDBC-batchverwerking en opgeslagen procedure
- Zelfstudie voor Java JDBC-verbinding met programmeervoorbeeld
- Vergelijkbare en vergelijkende interfaces in Java
- Selenium Database Testing (met behulp van WebDriver en JDBC API)
- Afhandeling van JDBC-uitzonderingen - Hoe om te gaan met SQL-uitzonderingen