jdbc resultset how use java resultset retrieve data
Denne vejledning forklarer, hvordan du bruger JDBC ResultSet til at hente data. Vi lærer også om ResultSetMetaData- og DatabaseMetaData-grænseflader med eksempler:
I JDBC DriverManager tutorial af JDBC tutorial-serie , lærte vi, hvordan man bruger JDBC DriverManager og dets metoder, JDBC PreparedStatement i Java-applikationer.
I denne vejledning diskuterer vi de resterende grænseflader i JDBC. Vi har dækket grænsefladerne Statement, PreparedStatement og CallableStatement i vores tidligere tutorials.
Her vil vi lære om JDBC ResultSet, ResultSetMetaData og DatabaseMetaData-grænseflader, deres metoder og hvordan man bruger metoderne i Java-programmet.
Hvad du lærer:
JDBC ResultSet-interface
ResultSet-interface findes i java.sql-pakken. Det bruges til at gemme de data, der returneres fra databasetabellen efter udførelsen af SQL-sætningerne i Java-programmet. Objektet med ResultSet opretholder markørpunktet ved resultatdataene. Som standard placeres markøren før den første række med resultatdataene.
Den næste () metode bruges til at flytte markøren til den næste position i en fremadgående retning. Det returnerer FALSE, hvis der ikke er flere poster. Det henter data ved at kalde metoden executeQuery () ved hjælp af et af sætningsobjekterne. Det kan være Statement eller PreparedStatement eller CallableStatement-objekt. PreparedStatement og CallableStatement-grænseflader er undergrænsefladerne til Statement-grænsefladen.
Erklæringsgrænseflade
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement-interface
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Vi kan bruge getX () -metoden til at hente dataene i kolonnerne, mens det gentages gennem resultaterne, hvor X - er datatypen for kolonnen. Vi kan bruge enten søjlenavne eller indeks til at hente værdierne ved hjælp af 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å nævne indeksnummer for søjlen i stedet for søjlenavn i getX () -metoderne.
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 gentage de data / værdier i ResultSet, som er returneret som et output af den udførte SQL-sætning i fremadgående retning. Vi kan gentage værdierne i andre retninger ved hjælp af Scrollable ResultSet. Vi kan specificere typen og samtidigheden af ResultSet, mens vi opretter Statement, PreparedStatement og CallableStatement-objekter.
Der er 3 typer i ResultSet. De er:
- TYPE_FORWARD_ONLY: Det er standardindstillingen, hvor markøren bevæger sig fra start til slut, dvs. i fremadgående retning.
- TYPE_SCROLL_INSENSITIVE: I denne type får den markøren til at bevæge sig i både fremad og bagud. Hvis vi foretager ændringer i dataene, mens de gentagne lagrede data gentages, opdateres de ikke i datasættet, hvis nogen ændrer dataene i DB. Fordi datasættet har dataene fra det tidspunkt, hvor SQL-forespørgslen returnerer dataene.
- TYPE_SCROLL_SENSITIVE: Det svarer til TYPE_SCROLL_INSENSITIVE, forskellen er, hvis nogen opdaterer dataene, efter at SQL-forespørgslen har returneret dataene, mens det gentages afspejler ændringerne i datasættet.
ResultSet samtidighed
Der er 2 tilstande af samtidighed i ResultSet. De er:
- ResultSet.CONCUR_READ_ONLY: Det er standardtilstanden samtidig. Vi kan kun læse dataene i ResultSet. Opdatering er ikke relevant.
- ResultSet.CONCUR_UPDATABLE: Vi kan opdatere dataene i ResultSet-objektet.
Nogle databaser understøtter ikke samtidighedstilstand for alle ResultSet-typer. I så fald skal vi kontrollere, om de understøtter vores ønskede type og samtidighedstilstand ved hjælp af metoden supportResultSetConcurrency ().
Metoder i ResultSet-interface
Der er 4 kategorier af ResultSet-metoder. De er:
- Navigationsmetoder
- Getter Metoder
- Setter Metoder
- Diverse metoder
Først vil vi diskutere navigationsmetoderne og derefter gå videre.
# 1) Navigationsmetoder
Denne metode bruges til at flytte markøren rundt i datasættet.
- Boolsk absolut (int række): Det bruges til at flytte markøren til den angivne række, der er nævnt i parameteren og returnere true, hvis operationen er vellykket ellers returner false.
- Annulleres efterLast (): Det får ResultSet-markøren til at bevæge sig efter den sidste række.
- Gyldig førFørst (): Det får ResultSet-markøren til at bevæge sig før første række.
- Boolsk først (): Det gør ResultSet-markøren til at flytte til første række. Det returnerer sandt, hvis operationen er vellykket ellers Falsk.
- Boolsk sidste (): Det gør ResultSet-markøren til at flytte til den sidste række. Det returnerer sandt, hvis operationen er vellykket ellers Falsk.
- Boolsk næste (): Det gør ResultSet-markøren til at flytte til næste række. Det returnerer sandt, hvis der er flere poster og falsk, hvis der ikke er flere poster.
- Boolsk forrige (): Det gør ResultSet-markøren til at flytte til forrige række. Det returnerer sandt, hvis operationen er vellykket ellers Falsk.
- Boolsk slægtning (): Den bevæger markøren til det givne antal rækker enten fremad eller bagud.
- Int getRow (): Det returnerer det aktuelle række nummer, som ResultSet-objektet peger nu.
- Ugyldig moveToCurrentRow (): Det flytter markøren tilbage til den aktuelle række, hvis den i øjeblikket er i indsætningsrække.
- Ugyldig moveToInsertRow (): Den flytter markøren til den specifikke række for at indsætte rækken i databasen. Det husker den aktuelle markørplacering. Så vi kan bruge metoden moveToCurrentRow () til at flytte markøren til den aktuelle række efter indsættelsen.
I denne vejledning er alle programmer skrevet i Java. Vi har brugt Java 8-versionen og Oracle DB.
>> Du kan downloade Oracle-softwaren fra her
>> Du kan downloade Java version 8 fra her
Det har den trinvise Java-installationsproces.
JDBC ResultSet Eksempelprogram: (Brug af 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
Forklaring:
I ovenstående program har vi implementeret de første (), sidste (), beforeFirst (), afterLast (), næste (), forrige (), absolutte (), relative () og getRow () metoder i ResultSet. For at bruge disse metoder indstiller vi ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE værdier i preparStatement-metoden.
Dernæst vil vi diskutere, hvad der er Getter-metoderne i ResultSet:
# 2) Getter-metoder
ResultSet har gemt dataene i tabellen fra databasen. Getter-metoder bruges til at hente værdierne i tabellen i ResultSet. Til det er vi nødt til at videregive enten kolonneindeksværdi eller kolonnenavn.
Følgende er gettermetoderne i ResultSet:
- int getInt (int ColumnIndex): Det bruges til at få værdien af den angivne kolonne Indeks som int-datatype.
- float getFloat (int ColumnIndex): Det bruges til at få værdien af den angivne kolonne Indeks som en floatdatatype.
- java.sql.date getDate (int ColumnIndex): Det bruges til at få værdien af den angivne kolonne Indeks som en datoværdi.
- int getInt (String ColumnName): Det bruges til at få værdien af den angivne kolonne som en int-datatype.
- float getFloat (String ColumnName): Det bruges til at få værdien af den angivne kolonne som en float-datatype.
- Java.sql.date getDate (String ColumnName): Det bruges til at få værdien af den angivne kolonne som en datoværdi.
Der er getter-metoder til alle primitive datatyper (boolsk, lang, dobbelt) og streng også i ResultSet-grænsefladen. Vi kan hente en matrix og binær type data også fra databasen. Det har også metoder til det.
# 3) Setter / Updater-metoder
Vi kan opdatere værdien i databasen ved hjælp af ResultSet Updater-metoder. Det ligner Getter-metoder, men her skal vi videregive værdierne / dataene for den bestemte kolonne, der skal opdateres i databasen.
Følgende er opdateringsmetoderne i ResultSet:
- ugyldig updateInt (int ColumnIndex, int Værdi): Det bruges til at opdatere værdien for den angivne kolonne Indeks med en int-værdi.
- ugyldig opdateringFloat (int ColumnIndex, float f): Det bruges til at opdatere værdien af den angivne kolonne Indeks med floatværdien.
- ugyldig opdateringsdato (int ColumnIndex, dato d): Det bruges til at opdatere værdien af den angivne kolonne Indeks med datoværdien.
- ugyldig updateInt (String ColumnName, int Value): Det bruges til at opdatere værdien i den angivne kolonne med den givne int-værdi.
- ugyldig updateFloat (String ColumnName, float f): Det bruges til at opdatere værdien i den angivne kolonne med den givne flydeværdi.
- Java.sql.date getDate (String ColumnName): Det bruges til at opdatere værdien i den angivne kolonne med den givne datoværdi.
Der er Updater-metoder til alle primitive datatyper (boolsk, lang, dobbelt) og String også i ResultSet-grænsefladen.
Updater-metoder opdaterer bare dataene i ResultSet-objektet. Værdier opdateres i DB efter at have kaldt insertRow eller updateRow-metoden.
Opdatering af en række:
Vi kan opdatere dataene i træk ved at kalde updateX () -metoder, videregive kolonnenavn eller indeks og værdier, der skal opdateres. Vi kan bruge enhver datatype i stedet for X i updateX-metoden. Indtil nu har vi opdateret dataene i ResultSet-objektet. For at opdatere dataene i DB er vi nødt til at kalde metoden updateRow ().
Indsættelse af en række:
Vi skal bruge moveToInsertRow () til at flytte markøren for at indsætte en ny række. Vi har allerede dækket dette i afsnittet Navigationsmetoder. Dernæst skal vi kalde updateX () -metoden for at tilføje dataene til rækken. Vi skal levere data til alle kolonnerne, ellers bruger den standardværdien for den pågældende kolonne.
Efter opdatering af dataene er vi nødt til at kalde metoden insertRow (). Brug derefter moveToCurrentRow () -metoden til at tage markørpositionen tilbage til den række, vi var i, før vi begyndte at indsætte en ny række.
ResultatSæt 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(); } } }
PRODUKTION:
Forklaring:
I ovenstående program er det, vi har gjort, først, at vi lagrede dataene i tabellen Employee_details i ResultSet-objektet ved hjælp af SELECT-forespørgslen. Derefter viste vi dataene i den sidste række i tabellen medarbejder_detaljer ved hjælp af den sidste () metode i ResultSet. moveToInsertRow () -metoden får markøren til at pege på den aktuelle række, nu er den aktuelle række den sidste række.
updateXXX () -metoder, der bruges til at opdatere værdierne til rækken og insertRow () -metoden har indsat dataene i en ny række. Ved hjælp af absolut () -metoden fik vi markøren til at pege på 5thrække. Metoden UpdateInt () er blevet brugt til at opdatere EMPNUM med en ny id på 5thmedarbejder i tabellen. Derefter vises dataene for at kontrollere, om EMPNUM er opdateret eller ej.
Lavede markøren til at pege på den sidste række i tabellen ved hjælp af sidste () og viste den. For at udføre ovenstående logik skal vi indstille værdierne ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE i preparStatement-metoden.
# 4) Diverse metoder
- ugyldigt tæt (): Det bruges til at lukke ResultSet-forekomsten og frigøre de ressourcer, der er knyttet til ResultSet-forekomsten.
- ResultSetMetaData getMetaData (): Det returnerer ResultSetMetaData-forekomsten. Det har oplysninger om typen og egenskaben for kolonner i forespørgselsoutputtet. Vi lærer mere om ResultSetMetaData i næste afsnit.
ResultSetMetaData
Hvad er metadata?
Metadata betyder data om data. Ved hjælp af denne grænseflade får vi flere oplysninger om ResultSet. Det er tilgængeligt i pakken java.sql. Hvert ResultatSet-objekt er knyttet til et ResultatSetMetaData-objekt.
Dette objekt vil have detaljerne om kolonnernes egenskaber som datatype for kolonnen, kolonnenavn, antal kolonner, tabelnavn, skemanavn osv. Vi kan få ResultSetMetaData-objektet ved hjælp af 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();
Vigtige metoder til ResultSetMetaData-interface:
Metodenavn | Beskrivelse |
---|---|
boolsk isCaseSensitive (int Column) | Det returnerer sandt, hvis den givne kolonne er store og små bogstaver, ellers falsk |
String getColumnName (int-kolonne) | Det returnerer kolonnenavnet på den bestemte kolonne |
String getColumnTypeName (int-kolonne) | Det returnerer datatypen for den bestemte kolonne, som vi har sendt som parameter |
String getTableName (int-kolonne) | Det returnerer kolonnens tabelnavn |
String getSchemaName (int-kolonne) | Det returnerer skemanavnet på kolonnens tabel |
int getColumnCount () | Det returnerer antallet af kolonner i ResultSet |
boolean isAutoIncrement (int Column) | Det returnerer sandt, hvis den givne kolonne er automatisk stigning, 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)); } } }
PRODUKTION:
Forklaring:
vent ++ i sekunder
I ovenstående program har vi implementeret metoder til getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () og getSchemaName () i ResultSetMetaData-grænsefladen.
DatabaseMetaData
DatabaseMetaData-grænsefladen giver oplysninger om databasen som DatabaseName, databaseversion osv.
Vigtige metoder til DatabaseMetaData interface:
Metodenavn | Beskrivelse |
---|---|
String getStringFunctions () | Den returnerer listen over strengfunktioner, der er tilgængelige i den tilsluttede database |
String getDriverName () | Det returnerer navnet på JDBC-driveren, som vi bruger i vores Java-program |
String getDriverVersion () | Det returnerer JDBC-driverversionens nummer |
String getUserName () | Det returnerer brugernavnet på den database, som vi bruger |
String getDatabaseProductName () | Det returnerer navnet på den database, som vi bruger |
String getDatabaseProductVersion () | Det returnerer versionsnummeret på den database, som vi bruger |
ResultSet getSchemas () | Det returnerer navnene på de skemaer, der er tilgængelige i den tilsluttede database |
String getTimeDateFunctions () | Den returnerer listen over tids- og datofunktioner, der er tilgængelige i den tilsluttede database |
String getURL () | Den returnerer URL'en til databasen |
Boolsk isReadOnly () | Den returnerer, om databasen er i skrivebeskyttet tilstand |
Boolske understøtterBatchUpdates () | Det returnerer om databasen understøtter batchopdateringer |
Boolske understøttelserSavepoints () | Det returnerer, om databasen understøtter Savepoints |
Boolske understøtterStatementPooling () | Det returnerer, om databasen understøtter sætningspooling |
Boolske understøttelserStoredProcedures () | Det returnerer, om databasen understøtter lagrede procedurer |
Boolske understøtterOuterJoins () | Den returnerer, om databasen understøtter Outer Join |
Her har vi listet nogle vigtige metoder til DatabaseMetaData-grænsefladen. Du kan henvise til det officielle websted for Oracle hvor du kan se alle tilgængelige metoder i DatabaseMetaData-grænsefladen.
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()); } }
PRODUKTION:
Forklaring:
I ovenstående program har vi brugt / implementeret getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), supports , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () og supportsOuterJoins () metoder i DatabaseMetaData Interface.
Punkter, der skal bemærkes:
- JDBC ResultSet-interface bruges til at gemme dataene fra databasen og bruge dem i vores Java-program.
- Vi kan også bruge ResultSet til at opdatere data ved hjælp af updateXXX () -metoder.
- ResultSet-objekt peger på markøren før den første række med resultatdataene. Ved hjælp af den næste () metode kan vi gentage gennem ResultSet.
- Vi har navigationsmetoder til ResultSet for at komme videre i ResultSet-objektet
- ResultMetaData bruges til at få mere information om ResultSet som kolonnenavn, antal kolonner, kolonnens datatype osv.
- DatabaseMetData bruges til at få de oplysninger om den database, som vi har tilsluttet
Ofte stillede spørgsmål
Q # 1) Hvad er brugen af ResultSet?
Svar: ResultSet bruges til at gemme og hente dataene fra DB. Når executeQuery () -metoden er udført, returnerer den ResultSet-objekt. Vi kan bruge det ResultatSet-objekt i vores program til at udføre logikken.
Spørgsmål nr. 2) Hvordan kontrolleres det, om ResultSet er tomt eller ej?
Svar: Der er ingen foruddefinerede metoder som længde (), størrelse () tilgængelige for at kontrollere IsResultSet Tom. Vi kan bruge den næste () metode til at gentage, og hvis den returnerer Sand, er den ikke tom, hvis den returnerer Falsk betyder, at ResultSet er tom.
Q # 3) Er det muligt, at ResultSet kan være null?
Svar: Nej, executeQuery () -metoden returnerer ResultSet-objektet, der muligvis aldrig er nul.
Spørgsmål nr. 4) Hvad er ResultSet, der kan opdateres?
Svar: Et opdaterbart ResultSet-objekt bruges til at opdatere dataene i kolonnen, indsætte data i kolonner og slette rækker. For at lave et ResultSet som en opdaterbar, skal vi gøre rulletype så følsom eller ufølsom og CONCUR-type som opdaterbar.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Spørgsmål nr. 5) Hvordan får jeg det databasenavn, der er tilsluttet?
Svar: Vi kan bruge getDatabaseProductName () -metoden til DatabaseMetaData-objekt.
Konklusion
I denne vejledning har vi diskuteret, hvad der er grænsefladerne ResultSet, ResultSetMetaData og DatabaseMetaData og deres vigtige metoder, der ofte bruges i JDBC-programmerne. Vi har også set, hvordan man opdaterer data i DB ved hjælp af ResultSet. ResultSetMetadata indeholder oplysninger om ResultSet, såsom kolonnenavn, kolonneantal osv.
DatabaseMetaData indeholder databaseoplysninger.
Anbefalet læsning
- JDBC DriverManager, JDBC Forberedt Erklæring og erklæring
- Java JDBC Tutorial: Hvad er JDBC (Java Database Connectivity)
- Java JDBC-transaktionsstyring med eksempel
- JDBC batchbehandling og lagret procedurevejledning
- Java JDBC-forbindelsesvejledning med programmeringseksempel
- Sammenlignelige og komparatorgrænseflader i Java
- Selenium Database Testing (Brug af WebDriver og JDBC API)
- JDBC-undtagelseshåndtering - Sådan håndteres SQL-undtagelser