jdbc resultset how use java resultset retrieve data
Denna handledning förklarar hur man använder JDBC ResultSet för att hämta data. Vi kommer också att lära oss om ResultSetMetaData och DatabaseMetaData gränssnitt med exempel:
I JDBC DriverManager handledning av JDBC-handledningsserie , vi lärde oss hur man använder JDBC DriverManager och dess metoder, JDBC PreparedStatement i Java-applikationer.
I den här handledningen kommer vi att diskutera de återstående gränssnitten i JDBC. Vi har täckt uttalanden, PreparedStatement och CallableStatement-gränssnitt i våra tidigare självstudier.
Här lär vi oss om JDBC ResultSet, ResultSetMetaData och DatabaseMetaData-gränssnitt, deras metoder och hur man använder metoderna i Java-programmet.
Vad du kommer att lära dig:
JDBC ResultSet-gränssnitt
ResultSet Interface finns i paketet java.sql. Den används för att lagra data som returneras från databastabellen efter körningen av SQL-satserna i Java-programmet. Objektet för ResultSet behåller markörpunkten på resultatdata. Som standard placeras markören före den första raden med resultatdata.
Nästa () metod används för att flytta markören till nästa position framåt. Det kommer att returnera FALSE om det inte finns fler poster. Den hämtar data genom att anropa metoden executeQuery () med något av uttalandeobjekten. Det kan vara Statement- eller PreparedStatement- eller CallableStatement-objekt. PreparedStatement- och CallableStatement-gränssnitt är delgränssnitt för Statement-gränssnittet.
Uttalningsgränssnitt
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement-gränssnitt
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Vi kan använda getX () -metoden för att hämta data från kolumnerna medan det går igenom resultaten där X - är kolumnens datatyp. Vi kan använda antingen kolumnnamn eller index för att få värdena med hjälp av getX () -metoder.
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); }
Vi kan också nämna kolumnens indexnummer istället för Kolumnnamn i getX () -metoderna.
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-typer
Som standard kan vi iterera data / värden i ResultSet som har returnerats som en utdata från det körda SQL-uttalandet i riktning framåt. Vi kan iterera värdena i andra riktningar med hjälp av Scrollable ResultSet. Vi kan ange typen och samtidigheten för ResultSet när vi skapar Statement-, PreparedStatement- och CallableStatement-objekt.
Det finns tre typer i ResultSet. Dom är:
- TYPE_FORWARD_ONLY: Det är standardalternativet, där markören rör sig från start till slut, dvs. i framåtriktningen.
- TYPE_SCROLL_INSENSITIVE: I den här typen kommer markören att röra sig både framåt och bakåt. Om vi gör några ändringar i data under iterering av den lagrade informationen uppdateras den inte i datasetet om någon ändrar data i DB. Eftersom datamängden har data från den tidpunkt då SQL-frågan returnerar data.
- TYPE_SCROLL_SENSITIVE: Det liknar TYPE_SCROLL_INSENSITIVE, skillnaden är om någon uppdaterar data efter att SQL-frågan har returnerat data, medan den itererar kommer den att återspegla ändringarna i datasetet.
ResultSet Concurrency
Det finns två lägen för samtidighet i ResultSet. Dom är:
- ResultSet.CONCUR_READ_ONLY: Det är standardläget för samtidighet. Vi kan bara läsa informationen i ResultSet. Uppdatering är inte tillämplig.
- ResultSet.CONCUR_UPDATABLE: Vi kan uppdatera data i ResultSet-objektet.
Vissa databaser stöder inte samtidighetsläge för alla ResultSet-typer. I så fall måste vi kontrollera om de stöder vår önskade typ och samtidighet med hjälp av supportResultSetConcurrency () -metoden.
Metoder i ResultSet-gränssnittet
Det finns fyra kategorier av ResultSet-metoder. Dom är:
- Navigationsmetoder
- Getter Methods
- Setter Methods
- Diverse metoder
Först kommer vi att diskutera navigationsmetoderna och sedan gå vidare.
# 1) Navigationsmetoder
Denna metod används för att flytta markören runt datasetet.
- Boolesk absolut (intrad): Den används för att flytta markören till den angivna raden som nämns i parametern och returnera true om operationen lyckas annars returnerar false.
- Ogiltig afterLast (): Det gör att ResultSet-markören rör sig efter den sista raden.
- Gäller föreFirst (): Det gör att ResultSet-markören rör sig före första raden.
- Boolean först (): Det gör att ResultSet-markören flyttar till första raden. Det returnerar True om operationen lyckas annars False.
- Boolean sista (): Det gör att ResultSet-markören går till den sista raden. Det returnerar True om operationen lyckas annars False.
- Boolean nästa (): Det gör att ResultSet-markören går till nästa rad. Det returnerar True om det finns fler poster och False om det inte finns fler poster.
- Boolean föregående (): Det gör ResultSet-markören för att flytta till föregående rad. Det returnerar True om operationen lyckas annars False.
- Boolean släkting (): Den flyttar markören till det angivna antalet rader antingen framåt eller bakåt.
- Int getRow (): Det returnerar det aktuella radnumret som ResultSet-objektet pekar nu.
- Ogiltig moveToCurrentRow (): Den flyttar markören tillbaka till aktuell rad om den för närvarande finns i infoga rad.
- Ogiltigt moveToInsertRow (): Den flyttar markören till den specifika raden för att infoga raden i databasen. Den kommer ihåg den aktuella markörplatsen. Så vi kan använda metoden moveToCurrentRow () för att flytta markören till aktuell rad efter infogningen.
I denna handledning är alla program skrivna i Java. Vi har använt Java 8-versionen och Oracle DB.
>> Du kan ladda ner Oracle-programvaran från här
>> Du kan ladda ner Java version 8 från här
Den har den stegvisa Java-installationsprocessen.
JDBC ResultSet Exempelprogram: (Använda navigationsmetoder)
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(); } } }
PRODUKTION:
Data i tabellen Employee_details
Förklaring:
I programmet ovan har vi implementerat metoderna första (), sista (), föreFörsta (), efterLast (), nästa (), föregående (), absoluta (), relativa () och getRow () i ResultSet. För att använda dessa metoder ställer vi in ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE värden i preparStatement-metoden.
Därefter kommer vi att diskutera vad som är Getter-metoderna i ResultSet:
# 2) Getter-metoder
ResultSet har lagrat data i tabellen från databasen. Getter-metoder används för att få värdena i tabellen i ResultSet. För det måste vi skicka antingen kolumnindexvärde eller kolumnnamn.
Följande är gettermetoderna i ResultSet:
- int getInt (int ColumnIndex): Den används för att få värdet för den angivna kolumnen Index som int-datatyp.
- float getFloat (int ColumnIndex): Den används för att få värdet för den angivna kolumnen Index som en flytdatatyp.
- java.sql.date getDate (int ColumnIndex): Den används för att få värdet för den angivna kolumnen Index som ett datumvärde.
- int getInt (String ColumnName): Det används för att få värdet för den angivna kolumnen som en int-datatyp.
- float getFloat (String ColumnName): Det används för att få värdet för den angivna kolumnen som en flytdatatyp.
- Java.sql.date getDate (String ColumnName): Den används för att få värdet för den angivna kolumnen som ett datumvärde.
Det finns getter-metoder för alla primitiva datatyper (Boolean, long, double) och String också i ResultSet-gränssnittet. Vi kan få en matris och binär typ av data också från databasen. Det har metoder också för det.
# 3) Metoder för Setter / Updater
Vi kan uppdatera värdet i databasen med resultatSet Updater-metoder. Det liknar Getter-metoder, men här måste vi skicka värden / data för den specifika kolumnen att uppdatera i databasen.
Följande är uppdateringsmetoderna i ResultSet:
- void updateInt (int ColumnIndex, int Value): Den används för att uppdatera värdet för den angivna kolumnen Index med ett int-värde.
- void updateFloat (int ColumnIndex, float f): Den används för att uppdatera värdet för den angivna kolumnen Index med flottörvärdet.
- void updateDate (int ColumnIndex, Date d): Den används för att uppdatera värdet för den angivna kolumnen Index med datumvärdet.
- void updateInt (String ColumnName, int Value): Den används för att uppdatera värdet för den angivna kolumnen med det angivna int-värdet.
- void updateFloat (String ColumnName, float f): Den används för att uppdatera värdet för den angivna kolumnen med det angivna flottörvärdet.
- Java.sql.date getDate (String ColumnName): Den används för att uppdatera värdet för den angivna kolumnen med det angivna datumvärdet.
Det finns Updater-metoder för alla primitiva datatyper (Boolean, long, double) och String också i ResultSet-gränssnittet.
Updater-metoder uppdaterar bara data i ResultSet-objektet. Värden uppdateras i DB efter att ha anropat metoden insertRow eller updateRow.
Uppdaterar en rad:
Vi kan uppdatera data i rad genom att anropa updateX () -metoder, skicka kolumnnamnet eller indexet och värden som ska uppdateras. Vi kan använda vilken datatyp som helst i stället för X i updateX-metoden. Hittills har vi uppdaterat data i ResultSet-objektet. För att uppdatera data i DB måste vi anropa metoden updateRow ().
Infoga en rad:
Vi måste använda moveToInsertRow () för att flytta markören för att infoga en ny rad. Vi har redan täckt detta i avsnittet Navigationsmetoder. Därefter måste vi anropa updateX () -metoden för att lägga till data i raden. Vi bör tillhandahålla data för alla kolumner, annars kommer det att använda standardvärdet för den specifika kolumnen.
Efter att ha uppdaterat data måste vi ringa metoden insertRow (). Använd sedan moveToCurrentRow () -metoden för att ta markörpositionen tillbaka till raden vi befann oss innan vi började infoga en ny rad.
ResultSet Exempel:
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(); } } }
PRODUKTION:
Förklaring:
I ovanstående program är vad vi har gjort först, lagrade vi data i tabellen Employee_details i ResultSet-objektet med SELECT-frågan. Sedan visade vi data för den sista raden i tabellen med anställda_detaljer med den senaste metoden () i ResultSet. moveToInsertRow () -metoden gör att markören pekar på den aktuella raden, nu är den aktuella raden den sista raden.
updateXXX () -metoder som används för att uppdatera värdena till raden och metoden insertRow () har infogat data i en ny rad. Med absolut () -metoden gjorde vi markören för att peka på 5thrad. UpdateInt () -metoden har använts för att uppdatera EMPNUM med ett nytt id för 5thanställd i tabellen. Därefter visade data för att kontrollera om EMPNUM är uppdaterad eller inte.
Gjorde markören för att peka på den sista raden i tabellen med last () och visade den. För att utföra ovanstående logik måste vi ställa in värdena ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE i preparStatement-metoden.
# 4) Diverse metoder
- ogiltigt stänga (): Det används för att stänga ResultSet-instansen och frigöra resurserna som är associerade med ResultSet-instansen.
- ResultSetMetaData getMetaData (): Den returnerar ResultSetMetaData-instansen. Den har informationen om typen och egenskapen för kolumnerna i frågan. Vi kommer att lära dig mer om ResultSetMetaData i nästa avsnitt.
ResultSetMetaData
Vad är metadata?
Metadata betyder data om data. Med detta gränssnitt får vi mer information om ResultSet. Den finns i paketet java.sql. Varje ResultatSet-objekt är associerat med ett ResultSetMetaData-objekt.
Detta objekt kommer att ha detaljer om egenskaperna för kolumnerna som datatyp för kolumnen, kolumnnamn, antal kolumner, tabellnamn, schemanamn etc. Vi kan få ResultSetMetaData-objektet med metoden getMetaData () i ResultSet.
Syntax för ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Viktiga metoder för ResultSetMetaData-gränssnittet:
Metodens namn | Beskrivning |
---|---|
boolean isCaseSensitive (int Column) | Det blir sant om den angivna kolumnen är skiftlägeskänslig, annars falsk |
Sträng getColumnName (int-kolumn) | Det returnerar kolumnnamnet för den specifika kolumnen |
String getColumnTypeName (int-kolumn) | Den returnerar datatypen för den specifika kolumnen som vi har skickat som en parameter |
Sträng getTableName (int-kolumn) | Det returnerar kolumnens tabellnamn |
Sträng getSchemaName (int-kolumn) | Det returnerar schemans namn på kolumnens tabell |
int getColumnCount () | Det returnerar antalet kolumner i ResultSet |
boolean isAutoIncrement (int Column) | Det returnerar sant om den angivna kolumnen är automatisk ökning, annars falsk |
ResultSetMetaData Exempel
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)); } } }
PRODUKTION:
Förklaring:
online backup-programvara för tjänsteleverantörer
I ovanstående program har vi implementerat getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () och getSchemaName () metoder i ResultSetMetaData-gränssnittet.
DatabaseMetaData
DatabaseMetaData-gränssnittet ger information om databasen som DatabaseName, databasversion och så vidare.
Viktiga metoder för DatabaseMetaData-gränssnittet:
Metodens namn | Beskrivning |
---|---|
String getStringFunctions () | Den returnerar listan över strängfunktioner som är tillgängliga i den anslutna databasen |
Sträng getDriverName () | Det returnerar namnet på JDBC-drivrutinen som vi använder i vårt Java-program |
Sträng getDriverVersion () | Den returnerar JDBC-drivrutinsversionens nummer |
Sträng getUserName () | Det returnerar användarnamnet för den databas som vi använder |
Sträng getDatabaseProductName () | Det returnerar namnet på den databas som vi använder |
Sträng getDatabaseProductVersion () | Det returnerar versionsnumret för databasen som vi använder |
ResultSet getSchemas () | Den returnerar namnen på de scheman som är tillgängliga i den anslutna databasen |
Sträng getTimeDateFunctions () | Den returnerar listan över tillgängliga tid- och datumfunktioner i den anslutna databasen |
Sträng getURL () | Den returnerar webbadressen för databasen |
Boolean isReadOnly () | Den returnerar om databasen är i skrivskyddat läge |
Boolean supportsBatchUpdates () | Det returnerar om databasen stöder batchuppdateringar |
Boolean supportsSavepoints () | Det returnerar om databasen stöder Savepoints |
Booleska supportStatementPooling () | Den returnerar om databasen stöder Statement Pooling |
Boolean supportsStoredProcedures () | Det returnerar om databasen stöder lagrade procedurer |
Booleska stöderOuterJoins () | Den returnerar om databasen stöder yttre anslutning |
Här listade vi några viktiga metoder för DatabaseMetaData-gränssnittet. Du kan hänvisa till den officiella webbplatsen för Orakel där du kan se alla tillgängliga metoder i DatabaseMetaData-gränssnittet.
DatabaseMetaData Exempel:
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()); } }
PRODUKTION:
Förklaring:
I ovanstående program har vi använt / implementerat getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), supports , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () och supportsOuterJoins () -metoder i DatabaseMetaData Interface.
Poäng att notera:
- JDBC ResultSet-gränssnitt används för att lagra data från databasen och använda den i vårt Java-program.
- Vi kan också använda ResultSet för att uppdatera data med metoderna updateXXX ().
- ResultSet-objektet pekar på markören före den första raden med resultatdata. Med hjälp av nästa () -metod kan vi iterera genom ResultSet.
- Vi har navigationsmetoder för ResultSet för att gå längre i ResultSet-objektet
- ResultMetaData används för att få mer information om ResultSet som kolumnnamn, antal kolumner, datatypen för kolumnen etc.
- DatabaseMetData används för att få information om databasen som vi har anslutit
Vanliga frågor
F # 1) Vad är användningen av ResultSet?
Svar: ResultSet används för att lagra och hämta data från DB. När executeQuery () -metoden har körts returnerar den ResultSet-objektet. Vi kan använda det ResultSet-objektet i vårt program för att utföra logiken.
F # 2) Hur kontrollerar jag om ResultSet är tomt eller inte?
Svar: Det finns inga fördefinierade metoder som längd (), storlek () tillgängliga för att kontrollera IsResultSet Tom. Vi kan använda nästa () -metod för att itera och om den returnerar True är den inte tom, om den returnerar Falsk betyder ResultSet är tom.
F # 3) Är det möjligt att ResultSet kan vara null?
Svar: Nej, metoden executeQuery () returnerar ResultSet-objektet som kanske aldrig är null.
F # 4) Vad är ResultSet som kan uppdateras?
Svar: Ett uppdaterbart ResultSet-objekt används för att uppdatera data i kolumnen, infoga data i kolumner och radera rader. För att göra en ResultSet som en uppdaterbar, måste vi göra bläddringstyp så känslig eller okänslig och CONCUR-typen som uppdaterbar.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
F # 5) Hur får jag det databasnamn som har anslutits?
Svar: Vi kan använda getDatabaseProductName () -metoden för DatabaseMetaData-objektet.
Slutsats
I denna handledning har vi diskuterat vad som är gränssnitten ResultSet, ResultSetMetaData och DatabaseMetaData och deras viktiga metoder som vanligtvis används i JDBC-programmen. Vi har också sett hur man uppdaterar data i DB med ResultatSet. ResultSetMetadata innehåller information om ResultSet, såsom kolumnnamn, kolumnantal, och så vidare.
DatabaseMetaData innehåller databasinformation.
Rekommenderad läsning
- JDBC DriverManager, JDBC PreparedStatement and Statement
- Java JDBC-handledning: Vad är JDBC (Java Database Connectivity)
- Java JDBC-transaktionshantering med exempel
- JDBC Batchbehandling och lagrad procedurhandledning
- Java JDBC-anslutningshandledning med programmeringsexempel
- Jämförbara och komparatorgränssnitt i Java
- Selen Database Testing (med WebDriver och JDBC API)
- JDBC Undantagshantering - Hur man hanterar SQL-undantag