jdbc resultset how use java resultset retrieve data
Tento kurz vysvětluje, jak použít JDBC ResultSet k načtení dat. Dozvíme se také o rozhraních ResultSetMetaData a DatabaseMetaData s příklady:
V JDBC DriverManager návod na Série výukových programů JDBC , jsme se naučili používat JDBC DriverManager a jeho metody, JDBC PreparedStatement v aplikacích Java.
V tomto kurzu probereme zbývající rozhraní v JDBC. V našich předchozích kurzech jsme zahrnovali rozhraní Statement, PreparedStatement a CallableStatement.
Zde se dozvíme o rozhraních JDBC ResultSet, ResultSetMetaData a DatabaseMetaData, jejich metodách a způsobu použití metod v programu Java.
Co se naučíte:
Rozhraní JDBC ResultSet
Rozhraní ResultSet je přítomno v balíčku java.sql. Používá se k ukládání dat, která jsou vrácena z databázové tabulky po provedení příkazů SQL v programu Java. Objekt ResultSet udržuje kurzorový bod na výsledných datech. Ve výchozím nastavení se kurzor umístí před první řádek výsledkových dat.
Metoda next () se používá k přesunutí kurzoru na další pozici dopředu. Pokud již nejsou žádné záznamy, vrátí hodnotu FALSE. Načte data voláním metody executeQuery () pomocí kteréhokoli z příkazových objektů. Může to být objekt Statement nebo PreparedStatement nebo CallableStatement. Rozhraní PreparedStatement a CallableStatement jsou dílčí rozhraní rozhraní Statement.
Prohlášení rozhraní
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Rozhraní PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Můžeme použít metodu getX () k získání dat sloupců při iteraci výsledků, kde X - je datový typ sloupce. K získání hodnot pomocí metod getX () můžeme použít buď názvy sloupců, nebo index.
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); }
Můžeme také zmínit indexové číslo Sloupce místo Název Sloupce v metodách getX ().
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); }
Typy sady výsledků
Ve výchozím nastavení můžeme iterovat data / hodnoty v ResultSet, které se vrátily jako výstup provedeného příkazu SQL ve směru dopředu. Hodnoty můžeme iterovat v jiných směrech pomocí Scrollable ResultSet. Při vytváření objektů Statement, PreparedStatement a CallableStatement můžeme určit typ a souběžnost ResultSet.
V ResultSet jsou 3 typy. Oni jsou:
- TYPE_FORWARD_ONLY: Jedná se o výchozí možnost, kdy se kurzor pohybuje od začátku do konce, tj. Ve směru dopředu.
- TYPE_SCROLL_INSENSITIVE: V tomto typu způsobí, že se kurzor bude pohybovat vpřed i vzad. Pokud provedeme nějaké změny v datech při iteraci uložených dat, nebude se v datové sadě aktualizovat, pokud někdo změní data v DB. Protože datová sada obsahuje data z doby, kdy dotaz SQL vrátí Data.
- TYPE_SCROLL_SENSITIVE: Je to podobné jako TYPE_SCROLL_INSENSITIVE, rozdíl je, pokud kdokoli aktualizuje data poté, co SQL Query vrátil data, zatímco iterace bude odrážet změny v datové sadě.
Souběžnost ResultSet
V ResultSet jsou 2 režimy souběžnosti. Oni jsou:
- ResultSet.CONCUR_READ_ONLY: Je to výchozí režim souběžnosti. Můžeme číst pouze data v ResultSet. Aktualizace není použitelná.
- ResultSet.CONCUR_UPDATABLE: Můžeme aktualizovat data v objektu ResultSet.
Některé databáze nepodporují režim souběžnosti pro všechny typy ResultSet. V takovém případě musíme zkontrolovat, zda podporují náš požadovaný typ a režim souběžnosti pomocí metody supportsResultSetConcurrency ().
Metody v rozhraní ResultSet
Existují 4 kategorie metod ResultSet. Oni jsou:
- Navigační metody
- Metody získávání
- Nastavovací metody
- Různé metody
Nejprve probereme navigační metody a poté se přesuneme dále.
# 1) Navigační metody
Tato metoda se používá k pohybu kurzoru po datové sadě.
- Booleovský absolutní (int řádek): Používá se k přesunutí kurzoru na zadaný řádek, který je uveden v parametru, a návrat true, pokud je operace úspěšná, jinak návrat false.
- Zrušit afterLast (): Díky tomu se kurzor ResultSet přesune za poslední řádek.
- Zrušit beforeFirst (): Díky tomu se kurzor ResultSet přesune před první řádek.
- Booleovský první (): Díky tomu se kurzor ResultSet přesune do prvního řádku. Vrátí True, pokud je operace úspěšná, jinak False.
- Boolean last (): Díky tomu se kurzor ResultSet přesune na poslední řádek. Vrátí True, pokud je operace úspěšná, jinak False.
- Boolean next (): Díky tomu se kurzor ResultSet přesune na další řádek. Vrátí True, pokud existuje více záznamů, a False, pokud již žádné nejsou.
- Booleovský předchozí (): Díky tomu se kurzor ResultSet přesune na předchozí řádek. Vrátí True, pokud je operace úspěšná, jinak False.
- Booleovský relativní (): Přesune kurzor na daný počet řádků ve směru dopředu nebo dozadu.
- Int getRow (): Vrátí aktuální číslo řádku, na který nyní objekt ResultSet ukazuje.
- Zrušit moveToCurrentRow (): Přesune kurzor zpět na aktuální řádek, pokud je aktuálně ve vloženém řádku.
- Zrušit moveToInsertRow (): Přesune kurzor na konkrétní řádek a vloží řádek do databáze. Pamatuje si aktuální umístění kurzoru. Můžeme tedy použít metodu moveToCurrentRow () k přesunutí kurzoru na aktuální řádek po vložení.
V tomto výukovém programu jsou všechny programy napsány v jazyce Java. Použili jsme verzi Java 8 a Oracle DB.
>> Software Oracle si můžete stáhnout z tady
>> Java verzi 8 si můžete stáhnout z tady
Má postup instalace Java krok za krokem.
Ukázkový program JDBC ResultSet: (pomocí navigačních metod)
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(); } } }
VÝSTUP:
Data v tabulce Employee_details
Vysvětlení:
Ve výše uvedeném programu jsme v ResultSet implementovali metody first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () a getRow (). Chcete-li použít tyto metody, nastavíme v metodě PreparStatement hodnoty ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE.
Dále probereme, jaké jsou metody Getter v ResultSet:
# 2) Metody získávání
ResultSet uložila data tabulky z databáze. Metody Getter se používají k získání hodnot tabulky v ResultSet. K tomu musíme předat buď sloupec Hodnota indexu nebo Název sloupce.
Následují metody získání v ResultSet:
- int getInt (int ColumnIndex): Používá se k získání hodnoty zadaného sloupce Index jako datového typu int.
- float getFloat (int ColumnIndex): Používá se k získání hodnoty zadaného sloupce Index jako datového typu float.
- java.sql.date getDate (int ColumnIndex): Používá se k získání hodnoty zadaného sloupce Index jako hodnoty data.
- int getInt (String ColumnName): Používá se k získání hodnoty zadaného sloupce jako datového typu int.
- float getFloat (String ColumnName): Používá se k získání hodnoty zadaného sloupce jako datového typu float.
- Java.sql.date getDate (řetězec NázevSloupce): Používá se k získání hodnoty zadaného sloupce jako hodnoty data.
V rozhraní ResultSet existují metody getru pro všechny primitivní datové typy (Boolean, long, double) a String. Pole a binární typ dat můžeme získat také z databáze. Má také metody.
# 3) Metody nastavovače / aktualizátoru
Hodnotu v databázi můžeme aktualizovat pomocí metod nástroje ResultSet Updater. Je to podobné jako s metodami Getter, ale zde musíme předat hodnoty / data pro konkrétní sloupec, který se má aktualizovat v databázi.
Následují metody aktualizace v ResultSet:
- void updateInt (int ColumnIndex, int Value): Používá se k aktualizaci hodnoty zadaného sloupce Index o hodnotu int.
- void updateFloat (int ColumnIndex, float f): Používá se k aktualizaci hodnoty zadaného sloupce Index s plovoucí hodnotou.
- void updateDate (int ColumnIndex, Date d): Používá se k aktualizaci hodnoty zadaného sloupce Index o hodnotu data.
- void updateInt (String ColumnName, int Value): Slouží k aktualizaci hodnoty zadaného sloupce s danou hodnotou int.
- void updateFloat (String ColumnName, float f): Používá se k aktualizaci hodnoty zadaného sloupce s danou float hodnotou.
- Java.sql.date getDate (řetězec NázevSloupce): Používá se k aktualizaci hodnoty zadaného sloupce s danou hodnotou data.
K dispozici jsou metody Updater pro všechny primitivní datové typy (Boolean, long, double) a String také v rozhraní ResultSet.
Metody Updater pouze aktualizují data v objektu ResultSet. Hodnoty budou aktualizovány v DB po volání metody insertRow nebo updateRow.
Aktualizace řádku:
Data můžeme aktualizovat v řadě voláním metod updateX (), předáním názvu sloupce nebo indexu a hodnot k aktualizaci. V metodě updateX můžeme místo X použít jakýkoli datový typ. Doposud jsme aktualizovali data v objektu ResultSet. Chcete-li aktualizovat data v DB, musíme zavolat metodu updateRow ().
Vložení řádku:
K přesunutí kurzoru a vložení nového řádku musíme použít moveToInsertRow (). To jsme již popsali v části Metody navigace. Dále musíme zavolat metodu updateX () a přidat data do řádku. Měli bychom poskytnout data pro všechny sloupce, jinak použije výchozí hodnotu daného sloupce.
Po aktualizaci dat musíme zavolat metodu insertRow (). Poté použijte metodu moveToCurrentRow () k přesunutí pozice kurzoru zpět na řádek, ve kterém jsme byli, než jsme začali vkládat nový řádek.
Příklad sady výsledků:
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(); } } }
VÝSTUP:
Vysvětlení:
Ve výše uvedeném programu je to, co jsme udělali jako první, pomocí dotazu SELECT uložili jsme data tabulky Employee_details do objektu ResultSet. Poté jsme pomocí metody last () metody ResultSet zobrazili data posledního řádku v tabulce employee_details. Metoda moveToInsertRow () umožňuje, aby kurzor ukazoval na aktuální řádek, nyní je aktuální řádek posledním řádkem.
metody updateXXX () použité k aktualizaci hodnot na řádek a metoda insertRow () vložila data do nového řádku. Pomocí metody absolute () jsme nastavili kurzor tak, aby ukazoval na 5thřádek. K aktualizaci EMPNUM s novým ID 5 byla použita metoda UpdateInt ()thzaměstnanec v tabulce. Poté se zobrazí data a zkontroluje se, zda je číslo EMPNUM aktualizováno nebo ne.
Vytvořil kurzor tak, aby namířil poslední řádek tabulky pomocí last () a zobrazil jej. Abychom provedli výše uvedenou logiku, musíme v metodě PreparStatement nastavit hodnoty ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE.
# 4) Různé metody
- void close (): Používá se k uzavření instance ResultSet a uvolnění prostředků přidružených k instanci ResultSet.
- ResultSetMetaData getMetaData (): Vrátí instanci ResultSetMetaData. Obsahuje informace o typu a vlastnosti sloupců výstupu dotazu. Další informace o ResultSetMetaData se dozvíme v další části.
ResultSetMetaData
Co jsou metadata?
Metadata znamenají data o datech. Pomocí tohoto rozhraní získáme více informací o ResultSet. Je k dispozici v balíčku java.sql. Každý objekt ResultSet je přidružen k jednomu objektu ResultSetMetaData.
Tento objekt bude mít podrobnosti o vlastnostech sloupců, jako je datový typ sloupce, název sloupce, počet sloupců, název tabulky, název schématu atd., Objekt ResultSetMetaData můžeme získat pomocí metody getMetaData () ResultSet.
Syntaxe ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Důležité metody rozhraní ResultSetMetaData:
Název metody | Popis |
---|---|
boolean isCaseSensitive (int sloupec) | Vrací true, pokud je v daném sloupci velká a malá písmena, jinak false |
Řetězec getColumnName (int sloupec) | Vrátí název sloupce konkrétního sloupce |
Řetězec getColumnTypeName (int sloupec) | Vrátí datový typ konkrétního sloupce, který jsme předali jako parametr |
Řetězec getTableName (int sloupec) | Vrátí název tabulky sloupce |
Řetězec getSchemaName (int sloupec) | Vrátí název schématu tabulky sloupce |
int getColumnCount () | Vrátí počet sloupců ResultSet |
boolean isAutoIncrement (int sloupec) | Vrátí true, pokud je daný sloupec Auto Increment, else false |
ResultSetMetaData Příklad
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)); } } }
VÝSTUP:
Vysvětlení:
jak přidat hodnotu do pole java
Ve výše uvedeném programu jsme implementovali metody getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () a getSchemaName () v rozhraní ResultSetMetaData.
DatabaseMetaData
Rozhraní DatabaseMetaData poskytuje informace o databázi, jako je DatabaseName, verze databáze atd.
Důležité metody rozhraní DatabaseMetaData:
Název metody | Popis |
---|---|
Řetězec getStringFunctions () | Vrátí seznam řetězcových funkcí dostupných v připojené databázi |
Řetězec getDriverName () | Vrátí název ovladače JDBC, který používáme v našem programu Java |
Řetězec getDriverVersion () | Vrátí číslo verze ovladače JDBC |
Řetězec getUserName () | Vrátí uživatelské jméno databáze, kterou používáme |
Řetězec getDatabaseProductName () | Vrátí název databáze, kterou používáme |
Řetězec getDatabaseProductVersion () | Vrátí číslo verze databáze, kterou používáme |
ResultSet getSchemas () | Vrátí názvy schémat dostupných v připojené databázi |
Řetězec getTimeDateFunctions () | Vrátí seznam funkcí času a data dostupných v připojené databázi |
Řetězec getURL () | Vrátí adresu URL databáze |
Boolean isReadOnly () | Vrátí, zda je databáze v režimu jen pro čtení |
Boolean podporujeBatchUpdates () | Vrátí, zda databáze podporuje dávkové aktualizace |
Boolean podporujeSavepoints () | Vrátí, zda databáze podporuje Savepoints |
Boolean supportsStatementPooling () | Vrátí, zda databáze podporuje sdružování výpisů |
Boolean podporujeStoredProcedures () | Vrátí, zda databáze podporuje uložené procedury |
Boolean supportsOuterJoins () | Vrátí, zda databáze podporuje vnější připojení |
Zde jsme uvedli několik důležitých metod rozhraní DatabaseMetaData. Můžete se podívat na oficiální stránky Věštec kde můžete vidět všechny metody dostupné v rozhraní DatabaseMetaData.
DatabaseMetaData Příklad:
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()); } }
VÝSTUP:
Vysvětlení:
Ve výše uvedeném programu jsme použili / implementovali getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), podporujeBatch) podporuje metodyStatementPooling (), podporujeSavepoints (), podporujeStoredProcedures () a podporujeOuterJoins () v rozhraní DatabaseMetaData.
Je třeba poznamenat:
- Rozhraní JDBC ResultSet se používá k ukládání dat z databáze a jejich použití v našem programu Java.
- Můžeme také použít ResultSet k aktualizaci dat pomocí metod updateXXX ().
- Objekt ResultSet ukazuje kurzor na první řádek výsledných dat. Pomocí metody next () můžeme iterovat přes ResultSet.
- Pro navigaci v objektu ResultSet máme navigační metody ResultSet
- ResultMetaData se používá k získání více informací o ResultSet, jako je název sloupce, počet sloupců, datový typ sloupce atd.
- DatabaseMetData se používá k získání informací o databázi, kterou jsme připojili
Často kladené otázky
Otázka č. 1) Jaké je použití ResultSet?
Odpovědět: ResultSet se používá k ukládání a načítání dat z databáze. Po provedení metody executeQuery () vrátí objekt ResultSet. Tento objekt ResultSet můžeme v našem programu použít k provedení logiky.
Otázka 2) Jak zkontrolovat, zda je ResultSet prázdný nebo ne?
Odpovědět: Pro kontrolu IsResultSet Empty nejsou k dispozici žádné předdefinované metody jako length (), size (). Můžeme použít metodu next () k iteraci a pokud vrátí True, pak není prázdná, pokud vrátí False znamená, že ResultSet je prázdná.
Otázka č. 3) Je možné, že ResultSet může mít hodnotu null?
Odpovědět: Ne, metoda executeQuery () vrací objekt ResultSet, který nemusí mít nikdy hodnotu null.
Otázka č. 4) Co je aktualizovatelná ResultSet?
Odpovědět: Aktualizovatelný objekt ResultSet se používá k aktualizaci dat ve sloupci, vložení dat do sloupců a odstranění řádků. Abychom vytvořili ResultSet jako aktualizovatelný, musíme udělat typ posouvání jako citlivý nebo necitlivý a typ CONCUR jako aktualizovatelný.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Otázka č. 5) Jak získat připojený název databáze?
Odpovědět: Můžeme použít metodu getDatabaseProductName () objektu DatabaseMetaData.
Závěr
V tomto kurzu jsme diskutovali o tom, co jsou rozhraní ResultSet, ResultSetMetaData a DatabaseMetaData a jejich důležité metody běžně používané v programech JDBC. Také jsme viděli, jak aktualizovat data v DB pomocí ResultSet. ResultSetMetadata obsahuje informace o ResultSet, jako je název sloupce, počet sloupců atd.
DatabaseMetaData obsahuje informace o databázi.
Doporučené čtení
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Výukový program Java JDBC: Co je JDBC (Java Database Connectivity)
- Správa transakcí Java JDBC s příkladem
- Výukový program dávkového zpracování JDBC a uložených procedur
- Výukový program pro připojení Java JDBC s příkladem programování
- Srovnatelná a komparační rozhraní v Javě
- Testování databáze selenu (pomocí WebDriver a JDBC API)
- Zpracování výjimek JDBC - Jak zacházet s výjimkami SQL