jdbc resultset how use java resultset retrieve data
Denne opplæringen forklarer hvordan du bruker JDBC ResultSet for å hente data. Vi vil også lære om ResultSetMetaData og DatabaseMetaData grensesnitt med eksempler:
I JDBC DriverManager opplæring av JDBC opplæringsserie , lærte vi hvordan vi bruker JDBC DriverManager og dets metoder, JDBC PreparedStatement i Java-applikasjoner.
I denne opplæringen vil vi diskutere de gjenværende grensesnittene i JDBC. Vi har dekket grensesnittene Statement, PreparedStatement og CallableStatement i våre tidligere veiledninger.
Her vil vi lære om JDBC ResultSet, ResultSetMetaData og DatabaseMetaData-grensesnitt, metodene deres og hvordan du bruker metodene i Java-programmet.
Hva du vil lære:
JDBC ResultSet-grensesnitt
ResultSet-grensesnitt er tilstede i pakken java.sql. Den brukes til å lagre dataene som returneres fra databasetabellen etter kjøring av SQL-setningene i Java-programmet. Objektet til ResultSet opprettholder markørpunktet på resultatdataene. Som standard plasseres markøren før den første raden med resultatdataene.
Den neste () metoden brukes til å flytte markøren til neste posisjon i fremoverretning. Det vil returnere FALSE hvis det ikke er flere poster. Den henter data ved å ringe til executeQuery () -metoden ved hjelp av noen av setningsobjektene. Det kan være Statement- eller PreparedStatement- eller CallableStatement-objekt. PreparedStatement og CallableStatement-grensesnitt er undergrensesnittene til Statement-grensesnittet.
Uttalelsesgrensesnitt
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement-grensesnitt
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Vi kan bruke getX () -metoden for å hente dataene til kolonnene mens det gjentas gjennom resultatene der X - er datatypen for kolonnen. Vi kan bruke enten kolonnenavn eller indeks for å få verdiene ved hjelp 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 også nevne indeksnummer på kolonnen i stedet for kolonnenavn i getX () -metodene.
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); }
ResultatSett typer
Som standard kan vi gjenta dataene / verdiene i ResultSet som har returnert som en utdata fra den utførte SQL-setningen i fremoverretningen. Vi kan gjenta verdiene i andre retninger ved hjelp av Scrollable ResultSet. Vi kan spesifisere typen og samtidigheten til ResultSet mens vi oppretter Statement, PreparedStatement og CallableStatement-objekter.
Det er 3 typer i ResultSet. De er:
- TYPE_FORWARD_ONLY: Det er standardalternativet, der markøren beveger seg fra start til slutt, dvs. i fremoverretningen.
- TYPE_SCROLL_INSENSITIVE: I denne typen vil den få markøren til å bevege seg både fremover og bakover. Hvis vi gjør endringer i dataene mens vi gjentar de lagrede dataene, oppdateres de ikke i datasettet hvis noen endrer dataene i DB. Fordi datasettet har dataene fra det tidspunktet SQL-spørringen returnerer dataene.
- TYPE_SCROLL_SENSITIVE: Det ligner på TYPE_SCROLL_INSENSITIVE, forskjellen er hvis noen oppdaterer dataene etter at SQL-spørringen har returnert dataene, mens den gjentas vil den gjenspeile endringene i datasettet.
ResultatSett samtidighet
Det er to moduser for samtidighet i ResultSet. De er:
- ResultSet.CONCUR_READ_ONLY: Det er standard samtidighetsmodus. Vi kan bare lese dataene i ResultSet. Oppdatering er ikke aktuelt.
- ResultSet.CONCUR_UPDATABLE: Vi kan oppdatere dataene i ResultSet-objektet.
Noen databaser støtter ikke samtidighetsmodus for alle ResultSet-typer. I så fall må vi sjekke om de støtter ønsket type og samtidighetsmodus ved hjelp av supportsResultSetConcurrency () -metoden.
Metoder i ResultSet-grensesnitt
Det er 4 kategorier av ResultSet-metoder. De er:
- Navigasjonsmetoder
- Getter Methods
- Setter Methods
- Diverse metoder
Først vil vi diskutere navigasjonsmetodene og deretter gå videre.
# 1) Navigasjonsmetoder
Denne metoden brukes til å flytte markøren rundt datasettet.
- Boolsk absolutt (int rad): Den brukes til å flytte markøren til den angitte raden som er nevnt i parameteren og returnere true hvis operasjonen lykkes ellers returner false.
- Ugyldig etterLast (): Det får ResultSet-markøren til å bevege seg etter siste rad.
- Gyldig førFirst (): Det får ResultSet-markøren til å bevege seg før første rad.
- Boolsk først (): Det gjør ResultSet-markøren til å flytte til første rad. Det returnerer sant hvis operasjonen er vellykket ellers Falsk.
- Boolsk sist (): Det gjør ResultSet-markøren til å flytte til siste rad. Det returnerer sant hvis operasjonen er vellykket ellers Falsk.
- Boolsk neste (): Det gjør ResultSet-markøren til å flytte til neste rad. Det returnerer True hvis det er flere poster og False hvis det ikke er flere poster.
- Boolsk forrige (): Det gjør ResultSet-markøren til å flytte til forrige rad. Det returnerer sant hvis operasjonen er vellykket ellers Falsk.
- Boolsk slektning (): Den beveger markøren til det angitte antall rader i fremover eller bakover retning.
- Int getRow (): Den returnerer gjeldende radnummer som ResultSet-objektet peker nå.
- Ugyldig moveToCurrentRow (): Den flytter markøren tilbake til gjeldende rad hvis den for øyeblikket er i innsettingsraden.
- Ugyldig moveToInsertRow (): Den flytter markøren til den spesifikke raden for å sette raden inn i databasen. Den husker gjeldende markørplassering. Så vi kan bruke moveToCurrentRow () -metoden til å flytte markøren til gjeldende rad etter innsettingen.
I denne opplæringen er alle programmene skrevet på Java. Vi har brukt Java 8-versjonen og Oracle DB.
>> Du kan laste ned Oracle-programvaren fra her
>> Du kan laste ned Java versjon 8 fra her
Den har trinnvis Java-installasjonsprosessen.
JDBC ResultSet eksempelprogram: (ved hjelp av navigasjonsmetoder)
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(); } } }
PRODUKSJON:
Data i tabellen Employee_details
Forklaring:
I det ovennevnte programmet har vi implementert den første (), siste (), førFirst (), etterLast (), neste (), forrige (), absolutte (), relative () og getRow () -metode i ResultSet. For å bruke disse metodene setter vi ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE verdier i preparStatement-metoden.
Deretter vil vi diskutere hva som er Getter-metodene i ResultSet:
# 2) Getter Methods
ResultSet har lagret dataene i tabellen fra databasen. Getter-metoder brukes til å hente verdiene til tabellen i ResultSet. For det må vi sende enten kolonneindeksverdi eller kolonnenavn.
Følgende er gettermetodene i ResultSet:
- int getInt (int ColumnIndex): Den brukes til å få verdien til den angitte kolonnen Indeks som en int-datatype.
- float getFloat (int ColumnIndex): Den brukes til å få verdien av den angitte kolonnen Indeks som en flytedatatype.
- java.sql.date getDate (int ColumnIndex): Den brukes til å få verdien til den angitte kolonnen Indeks som en datoverdi.
- int getInt (String ColumnName): Den brukes til å få verdien av den angitte kolonnen som en int-datatype.
- float getFloat (String ColumnName): Den brukes til å få verdien av den angitte kolonnen som en flytdatatype.
- Java.sql.date getDate (String ColumnName): Den brukes til å få verdien av den angitte kolonnen som en datoverdi.
Det er getter-metoder for alle primitive datatyper (boolsk, lang, dobbel) og streng også i ResultSet-grensesnittet. Vi kan skaffe en matrise og binær type data også fra databasen. Det har metoder også for det.
# 3) Metoder for Setter / Updater
Vi kan oppdatere verdien i databasen ved hjelp av ResultSet Updater-metoder. Det ligner på Getter-metoder, men her må vi sende verdiene / dataene for den aktuelle kolonnen for å oppdatere i databasen.
Følgende er oppdateringsmetodene i ResultSet:
- ugyldig updateInt (int ColumnIndex, int Verdi): Den brukes til å oppdatere verdien til den angitte kolonnen Indeks med en int-verdi.
- ugyldig oppdateringFloat (int ColumnIndex, float f): Den brukes til å oppdatere verdien til den angitte kolonnen Indeks med flyteverdien.
- ugyldig oppdateringsdato (int ColumnIndex, dato d): Den brukes til å oppdatere verdien til den angitte kolonnen Indeks med datoverdien.
- void updateInt (String ColumnName, int Value): Den brukes til å oppdatere verdien til den angitte kolonnen med den gitte int-verdien.
- ugyldig oppdateringFloat (String ColumnName, float f): Den brukes til å oppdatere verdien til den angitte kolonnen med den angitte flyteverdien.
- Java.sql.date getDate (String ColumnName): Den brukes til å oppdatere verdien til den angitte kolonnen med den angitte datoverdien.
Det er Updater-metoder for alle primitive datatyper (boolsk, lang, dobbel) og String også i ResultSet-grensesnittet.
Updater-metoder oppdaterer bare dataene i ResultSet-objektet. Verdiene oppdateres i DB etter å ha kalt metoden insertRow eller updateRow.
Oppdaterer en rad:
Vi kan oppdatere dataene på rad ved å ringe updateX () -metoder, sende kolonnenavnet eller indeksen og verdiene som skal oppdateres. Vi kan bruke hvilken som helst datatype i stedet for X i updateX-metoden. Til nå har vi oppdatert dataene i ResultSet-objektet. For å oppdatere dataene i DB, må vi ringe updateRow () -metoden.
Sette inn en rad:
Vi må bruke moveToInsertRow () for å flytte markøren for å sette inn en ny rad. Vi har allerede dekket dette i delen Navigasjonsmetoder. Deretter må vi ringe updateX () -metoden for å legge til dataene i raden. Vi bør gi data for alle kolonnene, ellers vil den bruke standardverdien for den aktuelle kolonnen.
Etter å ha oppdatert dataene, må vi ringe metoden insertRow (). Bruk deretter moveToCurrentRow () -metoden for å ta markørposisjonen tilbake til raden vi var på før vi begynte å sette inn en ny rad.
ResultSet Eksempel:
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(); } } }
PRODUKSJON:
Forklaring:
I det ovennevnte programmet, det vi har gjort er først, lagret vi dataene i tabellen Employee_details i ResultSet-objektet ved hjelp av SELECT-spørringen. Deretter viste vi dataene til den siste raden i tabellen med ansatt_detaljer ved å bruke den siste () metoden i ResultSet. moveToInsertRow () -metoden får markøren til å peke den nåværende raden, nå er den nåværende raden den siste raden.
updateXXX () -metoder som brukes til å oppdatere verdiene til raden og metoden insertRow () har satt inn dataene i en ny rad. Ved å bruke absolutt () -metoden, la vi markøren til å peke på 5thrad. UpdateInt () -metoden har blitt brukt til å oppdatere EMPNUM med en ny id på 5thansatt i tabellen. Deretter vises dataene for å sjekke om EMPNUM er oppdatert eller ikke.
Lagde markøren til å peke på den siste raden i tabellen ved å bruke siste () og viste den. For å utføre den ovennevnte logikken må vi sette verdier for ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE i preparStatement-metoden.
# 4) Diverse metoder
- ugyldig lukk (): Den brukes til å lukke ResultSet-forekomsten og frigjøre ressursene som er knyttet til ResultSet-forekomsten.
- ResultatSetMetaData getMetaData (): Den returnerer ResultSetMetaData-forekomsten. Den har informasjonen om typen og egenskapen til kolonnene i spørringsutgangen. Vi vil lære mer om ResultSetMetaData i neste avsnitt.
ResultatSetMetaData
Hva er metadata?
Metadata betyr data om data. Ved å bruke dette grensesnittet vil vi få mer informasjon om ResultSet. Den er tilgjengelig i java.sql-pakken. Hvert ResultatSet-objekt er knyttet til ett ResultatSetMetaData-objekt.
Dette objektet vil ha detaljer om egenskapene til kolonnene som datatype for kolonnen, kolonnenavn, antall kolonner, tabellnavn, skjemanavn, etc., Vi kan få ResultSetMetaData-objektet ved hjelp av getMetaData () -metoden til ResultSet.
Syntaks for ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Viktige metoder for ResultSetMetaData-grensesnittet:
Metodenavn | Beskrivelse |
---|---|
boolsk isCaseSensitive (int Column) | Det blir sant hvis den gitte kolonnen er mellom store og små bokstaver, ellers falsk |
String getColumnName (int-kolonne) | Den returnerer kolonnenavnet til den aktuelle kolonnen |
String getColumnTypeName (int-kolonne) | Den returnerer datatypen for den aktuelle kolonnen som vi har sendt som parameter |
String getTableName (int-kolonne) | Den returnerer tabellnavnet til kolonnen |
String getSchemaName (int-kolonne) | Den returnerer skjemanavnet til kolonnens tabell |
int getColumnCount () | Det returnerer antall kolonner i ResultSet |
boolsk isAutoIncrement (int Column) | Det blir sant hvis den gitte kolonnen er automatisk økning, ellers falsk |
ResultatSetMetaData Eksempel
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)); } } }
PRODUKSJON:
Forklaring:
falske e-post og passord som fungerer
I programmet ovenfor har vi implementert metodene getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () og getSchemaName () i ResultSetMetaData-grensesnittet.
DatabaseMetaData
DatabaseMetaData-grensesnittet gir informasjon om databasen som DatabaseName, Databaseversjon og så videre.
Viktige metoder for DatabaseMetaData-grensesnitt:
Metodenavn | Beskrivelse |
---|---|
String getStringFunctions () | Den returnerer listen over strengfunksjoner som er tilgjengelige i den tilkoblede databasen |
Streng getDriverName () | Det vil returnere navnet på JDBC-driveren som vi bruker i Java-programmet vårt |
String getDriverVersion () | Den returnerer JDBC-driverversjonsnummeret |
String getUserName () | Den returnerer brukernavnet til databasen vi bruker |
Streng getDatabaseProductName () | Den returnerer navnet på databasen som vi bruker |
Streng getDatabaseProductVersion () | Den returnerer versjonsnummeret til databasen som vi bruker |
ResultatSett getSchemas () | Den returnerer navnene på skjemaene som er tilgjengelige i den tilkoblede databasen |
Streng getTimeDateFunctions () | Den returnerer listen over tids- og datofunksjoner som er tilgjengelige i den tilkoblede databasen |
Streng getURL () | Den returnerer URL-en for databasen |
Boolsk isReadOnly () | Den returnerer om databasen er i skrivebeskyttet modus |
Boolske støtterBatchUpdates () | Den returnerer om databasen støtter batchoppdateringer |
Boolske støtterSavepoints () | Den returnerer om databasen støtter Savepoints |
Boolske støtterStatementPooling () | Det returnerer om databasen støtter Statement Pooling |
Boolske støtterStoredProcedures () | Den returnerer om databasen støtter lagrede prosedyrer |
Boolske støtterOuterJoins () | Den returnerer om databasen støtter Outer Join |
Her har vi listet opp noen viktige metoder for DatabaseMetaData-grensesnittet. Du kan henvise til det offisielle nettstedet til Oracle der du kan se alle metodene som er tilgjengelige i DatabaseMetaData-grensesnittet.
DatabaseMetaData Eksempel:
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()); } }
PRODUKSJON:
Forklaring:
I programmet ovenfor har vi brukt / implementert getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), supports , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () og supportsOuterJoins () metoder i DatabaseMetaData Interface.
Poeng å merke seg:
- JDBC ResultSet-grensesnitt brukes til å lagre dataene fra databasen og bruke dem i vårt Java-program.
- Vi kan også bruke ResultSet til å oppdatere dataene ved hjelp av updateXXX () -metoder.
- ResultSet-objekt peker markøren mot før første rad med resultatdata. Ved hjelp av neste () -metoden kan vi gjenta gjennom ResultSet.
- Vi har navigasjonsmetoder for ResultSet for å komme videre i ResultSet-objektet
- ResultMetaData brukes til å få mer informasjon om ResultSet som kolonnenavn, antall kolonner, datatypen til kolonnen, etc.
- DatabaseMetData brukes til å få informasjon om databasen som vi har koblet til
ofte stilte spørsmål
Q # 1) Hva er bruken av ResultSet?
Svar: ResultSet brukes til å lagre og hente dataene fra DB. Når executeQuery () -metoden er utført, returnerer den ResultSet-objektet. Vi kan bruke det ResultSet-objektet i vårt program til å utføre logikken.
Spørsmål 2) Hvordan sjekke om ResultSet er tomt eller ikke?
Svar: Det er ingen forhåndsdefinerte metoder som lengde (), størrelse () tilgjengelig for å sjekke IsResultSet Tom. Vi kan bruke neste () -metoden til å iterere, og hvis den returnerer True, er den ikke tom, hvis den returnerer False betyr at ResultSet er tomt.
Q # 3) Er det mulig at ResultSet kan være null?
Svar: Nei, metoden executeQuery () returnerer ResultSet-objektet som kanskje aldri er null.
Q # 4) Hva er ResultSet som kan oppdateres?
Svar: Et oppdaterbart ResultSet-objekt brukes til å oppdatere dataene i kolonnen, sette inn data i kolonner og slette rader. For å lage et ResultSet som en oppdaterbar, må vi gjøre rulletypen så sensitiv eller ufølsom og CONCUR-typen som kan oppdateres.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Sp # 5) Hvordan får jeg navnet på databasen som er koblet til?
Svar: Vi kan bruke getDatabaseProductName () -metoden til DatabaseMetaData-objektet.
Konklusjon
I denne opplæringen har vi diskutert hva som er grensesnittene ResultSet, ResultSetMetaData og DatabaseMetaData og deres viktige metoder som ofte brukes i JDBC-programmene. Vi har også sett hvordan du oppdaterer data i DB ved hjelp av ResultSet. ResultSetMetadata inneholder informasjon om ResultSet, for eksempel kolonnenavn, antall kolonner og så videre.
DatabaseMetaData inneholder databaseinformasjon.
Anbefalt lesing
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Java JDBC Tutorial: Hva er JDBC (Java Database Connectivity)
- Java JDBC-transaksjonsstyring med eksempel
- JDBC batchbehandling og lagret prosedyreveiledning
- Java JDBC-tilkoblingsveiledning med programmeringseksempel
- Sammenlignbare og komparatorgrensesnitt i Java
- Selenium Database Testing (Bruk WebDriver og JDBC API)
- JDBC Unntakshåndtering - Hvordan håndtere SQL-unntak