jdbc resultset how use java resultset retrieve data
Tento výukový program vysvetľuje, ako používať JDBC ResultSet na načítanie údajov. Dozvieme sa tiež o rozhraniach ResultSetMetaData a DatabaseMetaData s príkladmi:
V JDBC DriverManager návod na Séria výukových programov JDBC , naučili sme sa, ako používať JDBC DriverManager a jeho metódy, JDBC PreparedStatement v aplikáciách Java.
V tomto výučbe sa budeme venovať zvyšným rozhraniam v JDBC. V našich predchádzajúcich kurzoch sme sa zaoberali rozhraniami Statement, PreparedStatement a CallableStatement.
Tu sa dozvieme o rozhraniach JDBC ResultSet, ResultSetMetaData a DatabaseMetaData, ich metódach a spôsobe použitia metód v programe Java.
Čo sa dozviete:
Rozhranie JDBC ResultSet
Rozhranie ResultSet je súčasťou balíka java.sql. Používa sa na ukladanie údajov, ktoré sa vrátia z databázovej tabuľky po vykonaní príkazov SQL v programe Java. Objekt ResultSet udržuje kurzorový bod na výsledných dátach. V predvolenom nastavení sa kurzor umiestňuje pred prvý riadok výsledných údajov.
Metóda next () sa používa na presun kurzora na nasledujúcu pozíciu vpred. Ak už neexistujú žiadne záznamy, vráti hodnotu FALSE. Načíta údaje volaním metódy executeQuery () pomocou ktoréhokoľvek z objektov výpisu. Môže to byť objekt Statement alebo PreparedStatement alebo CallableStatement. Rozhrania PreparedStatement a CallableStatement sú čiastkové rozhrania rozhrania Statement.
Vyhlásenie rozhranie
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Rozhranie PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Môžeme použiť metódu getX () na získanie údajov stĺpcov pri iterácii výsledkov, kde X - je dátový typ stĺpca. Na získanie hodnôt pomocou metód getX () môžeme použiť buď názvy stĺpcov, alebo 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 tiež spomenúť indexové číslo stĺpca namiesto názvu stĺpca v metódach 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 výsledkov
V predvolenom nastavení môžeme iterovať údaje / hodnoty v ResultSet, ktoré sa vrátili ako výstup vykonaného príkazu SQL v doprednom smere. Pomocou Scrollable ResultSet môžeme hodnoty iterovať inými smermi. Pri vytváraní objektov Statement, PreparedStatement a CallableStatement môžeme určiť typ a súbežnosť ResultSet.
V ResultSet sú 3 typy. Oni sú:
- TYPE_FORWARD_ONLY: Je to predvolená možnosť, keď sa kurzor pohybuje od začiatku po koniec, tj. Vpred.
- TYPE_SCROLL_INSENSITIVE: V tomto type prinúti kurzor pohybovať sa vpred aj vzad. Ak urobíme zmeny údajov v priebehu iterácie uložených údajov, neaktualizuje sa to v množine údajov, ak niekto zmení údaje v databáze. Pretože množina údajov obsahuje údaje od času, keď dotaz SQL vráti údaje.
- TYPE_SCROLL_SENSITIVE: Je to podobné ako TYPE_SCROLL_INSENSITIVE, rozdiel je v tom, ak ktokoľvek aktualizuje údaje po tom, ako SQL dotaz vrátil údaje, zatiaľ čo ich iterácia bude odrážať zmeny v množine údajov.
Výsledková množina súbežnosti
V ResultSet sú 2 režimy súbežnosti. Oni sú:
- ResultSet.CONCUR_READ_ONLY: Je to predvolený režim súbežnosti. Údaje môžeme čítať iba v súbore ResultSet. Aktualizácia nie je použiteľná.
- ResultSet.CONCUR_UPDATABLE: Môžeme aktualizovať údaje v objekte ResultSet.
Niektoré databázy nepodporujú režim súbežnosti pre všetky typy ResultSet. V takom prípade musíme skontrolovať, či podporujú náš požadovaný typ a režim súbežnosti pomocou metódy podporujeResultSetConcurrency ().
Metódy v rozhraní ResultSet
Existujú 4 kategórie metód ResultSet. Oni sú:
- Navigačné metódy
- Metódy Getter
- Nastavovacie metódy
- Rôzne metódy
Najskôr si rozoberieme navigačné metódy a potom sa posunieme ďalej.
# 1) Navigačné metódy
Táto metóda sa používa na pohyb kurzora okolo množiny údajov.
- Boolovská hodnota absolútna (riadok int): Používa sa na presun kurzora na zadaný riadok, ktorý je uvedený v parametri, a návrat true, ak je operácia úspešná, inak návrat false.
- Void afterLast (): To spôsobí, že sa kurzor ResultSet presunie za posledný riadok.
- Void beforeFirst (): Robí kurzor ResultSet tak, aby sa pohyboval pred prvým riadkom.
- Boolean first (): To spôsobí, že sa kurzor ResultSet presunie do prvého riadku. Vráti True, ak je operácia úspešná, inak False.
- Boolovská posledná (): To spôsobí, že sa kurzor ResultSet presunie do posledného riadku. Vráti True, ak je operácia úspešná, inak False.
- Boolean next (): Týmto sa kurzor ResultSet presunie na ďalší riadok. Vráti hodnotu True, ak existuje viac záznamov, a hodnotu False, ak už nie je k dispozícii viac záznamov.
- Booleovský predchádzajúci (): To spôsobí, že sa kurzor ResultSet presunie na predchádzajúci riadok. Vráti True, ak je operácia úspešná, inak False.
- Boolovský príbuzný (): Posunie kurzor na zadaný počet riadkov v smere dopredu alebo dozadu.
- Int getRow (): Vráti číslo aktuálneho riadku, na ktorý teraz smeruje objekt ResultSet.
- Zrušiť moveToCurrentRow (): Presunie kurzor späť na aktuálny riadok, ak je práve vo vloženom riadku.
- Zrušiť moveToInsertRow (): Presunie kurzor na konkrétny riadok a vloží ho do databázy. Pamätá si aktuálne umiestnenie kurzora. Môžeme teda použiť metódu moveToCurrentRow () na presun kurzora na aktuálny riadok po vložení.
V tejto príručke sú všetky programy napísané v jazyku Java. Použili sme verziu Java 8 a Oracle DB.
>> Softvér Oracle si môžete stiahnuť z tu
>> Java verziu 8 si môžete stiahnuť z tu
Má proces inštalácie Java krok za krokom.
Príklad programu JDBC ResultSet: (pomocou navigačných metód)
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ÝKON:
Údaje v tabuľke Employee_details
Vysvetlenie:
Vo vyššie uvedenom programe sme implementovali metódy first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () a getRow () v ResultSet. Na použitie týchto metód nastavíme v metóde PreparStatement hodnoty ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE.
Ďalej si povieme, čo sú metódy Getter v ResultSet:
# 2) Metódy získavania
ResultSet uložil údaje tabuľky z databázy. Na získanie hodnôt tabuľky v ResultSet sa používajú metódy Getter. Za týmto účelom musíme odovzdať buď stĺpec Hodnota indexu, alebo Názov stĺpca.
V súbore ResultSet sú nasledujúce metódy getter:
- int getInt (int ColumnIndex): Používa sa na získanie hodnoty zadaného stĺpca Index ako dátového typu int.
- float getFloat (int ColumnIndex): Používa sa na získanie hodnoty zadaného stĺpca Index ako údajového typu float.
- java.sql.date getDate (int ColumnIndex): Používa sa na získanie hodnoty zadaného stĺpca Index ako hodnoty dátumu.
- int getInt (String ColumnName): Používa sa na získanie hodnoty zadaného stĺpca ako dátového typu int.
- float getFloat (String ColumnName): Používa sa na získanie hodnoty zadaného stĺpca ako údajového typu float.
- Java.sql.date getDate (String ColumnName): Používa sa na získanie hodnoty zadaného stĺpca ako hodnoty dátumu.
Existujú getrové metódy pre všetky primitívne dátové typy (logické, dlhé, dvojité) a reťazec aj v rozhraní ResultSet. Pole a binárny typ údajov môžeme získať aj z databázy. Má aj na to metódy.
# 3) Metódy nastavovača / aktualizátora
Hodnotu v databáze môžeme aktualizovať pomocou metód nástroja ResultSet Updater. Je to podobné ako s metódami Getter, ale tu musíme odovzdať hodnoty / údaje pre konkrétny stĺpec, ktorý sa má aktualizovať v databáze.
Nasledujú metódy aktualizácie v ResultSet:
- void updateInt (int ColumnIndex, int hodnota): Používa sa na aktualizáciu hodnoty zadaného stĺpca Index o hodnotu int.
- void updateFloat (int ColumnIndex, float f): Používa sa na aktualizáciu hodnoty zadaného stĺpca Index s float hodnotou.
- void updateDate (int ColumnIndex, Date d): Používa sa na aktualizáciu hodnoty zadaného stĺpca Index o hodnotu dátumu.
- void updateInt (String ColumnName, int hodnota): Slúži na aktualizáciu hodnoty zadaného stĺpca s danou hodnotou int.
- void updateFloat (String ColumnName, float f): Slúži na aktualizáciu hodnoty zadaného stĺpca danou float hodnotou.
- Java.sql.date getDate (String ColumnName): Slúži na aktualizáciu hodnoty zadaného stĺpca o zadanú hodnotu dátumu.
Existujú metódy Updater pre všetky primitívne dátové typy (boolovské, dlhé, dvojité) a reťazec aj v rozhraní ResultSet.
Metódy aktualizátora iba aktualizujú údaje v objekte ResultSet. Hodnoty sa v DB aktualizujú po vyvolaní metódy insertRow alebo updateRow.
Aktualizácia riadku:
Údaje môžeme aktualizovať v rade tak, že zavoláme metódy updateX (), odovzdáme názov alebo index stĺpca a hodnoty, ktoré sa majú aktualizovať. Namiesto metódy X môžeme v metóde updateX použiť akýkoľvek dátový typ. Doteraz sme aktualizovali údaje v objekte ResultSet. Ak chcete aktualizovať údaje v databáze DB, musíme zavolať metódu updateRow ().
Vloženie riadku:
Na presunutie kurzora na vloženie nového riadku musíme použiť moveToInsertRow (). Tomu sme sa už venovali v sekcii Navigačné metódy. Ďalej musíme zavolať metódu updateX () na pridanie údajov do riadku. Mali by sme poskytnúť údaje pre všetky stĺpce, inak bude používať predvolenú hodnotu konkrétneho stĺpca.
Po aktualizácii údajov musíme zavolať metódu insertRow (). Potom pomocou metódy moveToCurrentRow () posuňte pozíciu kurzora späť na riadok, v ktorom sme sa nachádzali, než sme začali vkladať nový riadok.
ResultSet Príklad:
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ÝKON:
Vysvetlenie:
Vo vyššie uvedenom programe je najskôr to, čo sme pomocou dotazu SELECT uložili údaje tabuľky Employee_details do objektu ResultSet. Potom sme pomocou metódy last () metódy ResultSet zobrazili údaje posledného riadku v tabuľke employee_details. Metóda moveToInsertRow () umožňuje, aby kurzor ukazoval na aktuálny riadok, teraz je aktuálny riadok posledným riadkom.
metódy updateXXX () použité na aktualizáciu hodnôt do riadku a metóda insertRow () vložila údaje do nového riadku. Pomocou metódy absolute () sme nastavili kurzor tak, aby ukazoval na 5thriadok. Na aktualizáciu EMPNUM novým identifikátorom 5 sa použila metóda UpdateInt ()thzamestnanec v tabuľke. Potom sa zobrazia údaje, aby sa skontrolovalo, či je EMPNUM aktualizované alebo nie.
Pomocou kurzora last () umiestnite kurzor na nasmerovanie posledného riadku tabuľky a zobrazte ho. Aby sme vykonali vyššie uvedenú logiku, musíme v metóde prepareStatement nastaviť hodnoty ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE.
# 4) Rôzne metódy
- void close (): Používa sa na zatvorenie inštancie ResultSet a na uvoľnenie prostriedkov spojených s inštanciou ResultSet.
- ResultSetMetaData getMetaData (): Vráti inštanciu ResultSetMetaData. Obsahuje informácie o type a vlastnosti stĺpcov výstupu dotazu. Viac sa o ResultSetMetaData dozvieme v nasledujúcej časti.
ResultSetMetaData
Čo sú metadáta?
Metadáta znamenajú údaje o údajoch. Pomocou tohto rozhrania získame viac informácií o ResultSet. Je k dispozícii v balíku java.sql. Každý objekt ResultSet je priradený k jednému objektu ResultSetMetaData.
Tento objekt bude obsahovať podrobnosti o vlastnostiach stĺpcov, ako je dátový typ stĺpca, názov stĺpca, počet stĺpcov, názov tabuľky, názov schémy atď. Objekt ResultSetMetaData môžeme získať metódou getMetaData () v ResultSet.
Syntax ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Dôležité metódy rozhrania ResultSetMetaData:
Názov metódy | Popis |
---|---|
boolean isCaseSensitive (int stĺpec) | Vráti hodnotu true, ak daný stĺpec rozlišuje veľké a malé písmená, inak hodnotu false |
Reťazec getColumnName (int stĺpec) | Vráti názov stĺpca konkrétneho stĺpca |
Reťazec getColumnTypeName (int stĺpec) | Vráti údajový typ konkrétneho stĺpca, ktorý sme odovzdali ako parameter |
Reťazec getTableName (int stĺpec) | Vráti názov tabuľky stĺpca |
Reťazec getSchemaName (int stĺpec) | Vráti názov schémy tabuľky stĺpca |
int getColumnCount () | Vráti počet stĺpcov ResultSet |
boolean isAutoIncrement (int stĺpec) | Vráti true, ak je daný stĺpec Auto Increment, inak false |
ResultSetMetaData Prí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ÝKON:
Vysvetlenie:
najlepší odstraňovač spywaru pre Windows 10
Vo vyššie uvedenom programe sme do rozhrania ResultSetMetaData implementovali metódy getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () a getSchemaName ().
DatabaseMetaData
Rozhranie DatabaseMetaData poskytuje informácie o databáze ako DatabaseName, verzia databázy atď.
Dôležité metódy rozhrania DatabaseMetaData:
Názov metódy | Popis |
---|---|
Reťazec getStringFunctions () | Vráti zoznam reťazcových funkcií dostupných v pripojenej databáze |
Reťazec getDriverName () | Vráti názov ovládača JDBC, ktorý používame v našom programe Java |
Reťazec getDriverVersion () | Vráti číslo verzie ovládača JDBC |
Reťazec getUserName () | Vráti používateľské meno databázy, ktorú používame |
Reťazec getDatabaseProductName () | Vráti názov databázy, ktorú používame |
Reťazec getDatabaseProductVersion () | Vráti číslo verzie databázy, ktorú používame |
ResultSet getSchemas () | Vráti názvy schém, ktoré sú k dispozícii v pripojenej databáze |
Reťazec getTimeDateFunctions () | Vráti zoznam funkcií času a dátumu dostupných v pripojenej databáze |
Reťazec getURL () | Vráti adresu URL databázy |
Boolean isReadOnly () | Vráti, či je databáza v režime iba na čítanie |
Boolean podporujeBatchUpdates () | Vráti, či databáza podporuje dávkové aktualizácie |
Boolean podporujeSavepoints () | Vráti, či databáza podporuje body Savepoints |
Boolean supportsStatementPooling () | Vráti, či databáza podporuje združovanie výpisov |
Boolean podporujeStoredProcedures () | Vráti, či databáza podporuje uložené procedúry |
Boolean podporujeOuterJoins () | Vráti, či databáza podporuje Outer Join |
Tu sme uviedli niekoľko dôležitých metód rozhrania DatabaseMetaData. Môžete sa obrátiť na oficiálnu stránku servera Oracle kde môžete vidieť všetky metódy dostupné v rozhraní DatabaseMetaData.
DatabaseMetaData Prí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ÝKON:
Vysvetlenie:
Vo vyššie uvedenom programe sme použili / implementovali funkcie getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), supportBatch) , podporuje metódyStatementPooling (), podporujeSavepoints (), podporujeStoredProcedures () a podporujeOuterJoins () v rozhraní DatabaseMetaData.
Je potrebné poznamenať:
- Rozhranie JDBC ResultSet sa používa na ukladanie údajov z databázy a na ich použitie v našom Java programe.
- Môžeme tiež použiť ResultSet na aktualizáciu údajov pomocou metód updateXXX ().
- Objekt ResultSet ukazuje kurzor na prvý riadok výsledných údajov. Pomocou metódy next () môžeme iterovať cez ResultSet.
- Máme navigačné metódy ResultSet na ďalší posun v objekte ResultSet
- ResultMetaData sa používa na získanie ďalších informácií o súbore ResultSet, ako je názov stĺpca, počet stĺpcov, dátový typ stĺpca atď.
- DatabaseMetData sa používa na získanie informácií o databáze, ktorú sme pripojili
často kladené otázky
Otázka č. 1) Na čo sa používa ResultSet?
Odpoveď: ResultSet sa používa na ukladanie a načítanie údajov z databázy DB. Po vykonaní metódy executeQuery () vráti objekt ResultSet. Tento objekt ResultSet môžeme v našom programe použiť na vykonanie logiky.
Otázka 2) Ako skontrolovať, či je sada výsledkov prázdna alebo nie?
Odpoveď: Na kontrolu IsResultSet Empty nie sú k dispozícii žiadne preddefinované metódy ako dĺžka (), veľkosť (). Na iteráciu môžeme použiť metódu next () a ak vráti True, potom nie je prázdna, ak vráti False, znamená to, že ResultSet je prázdny.
Otázka 3) Je možné, že ResultSet môže byť nulový?
Odpoveď: Nie, metóda executeQuery () vráti objekt ResultSet, ktorý nemusí mať nikdy hodnotu null.
Otázka č. 4) Čo je aktualizovateľný ResultSet?
Odpoveď: Aktualizovateľný objekt ResultSet sa používa na aktualizáciu údajov v stĺpci, vkladanie údajov do stĺpcov a mazanie riadkov. Ak chcete vytvoriť ResultSet ako aktualizovateľný, musíme urobiť typ rolovania ako citlivý alebo necitlivý a typ CONCUR ako aktualizovateľný.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Otázka č. 5) Ako získať pripojený názov databázy?
Odpoveď: Môžeme použiť metódu getDatabaseProductName () objektu DatabaseMetaData.
Záver
V tomto tutoriáli sme diskutovali o tom, čo sú rozhrania ResultSet, ResultSetMetaData a DatabaseMetaData a ich dôležité metódy bežne používané v programoch JDBC. Tiež sme videli, ako aktualizovať údaje v DB pomocou ResultSet. ResultSetMetadata obsahuje informácie o ResultSet, napríklad názov stĺpca, počet stĺpcov atď.
DatabaseMetaData obsahuje informácie o databáze.
Odporúčané čítanie
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Výukový program Java JDBC: Čo je JDBC (pripojenie k databáze Java)
- Správa transakcií Java JDBC s príkladom
- Výukový program pre dávkové spracovanie JDBC a uloženú procedúru
- Výukový program pre pripojenie Java JDBC s príkladom programovania
- Porovnateľné a porovnávacie rozhrania v Jave
- Testovanie databázy selénu (pomocou WebDriver a JDBC API)
- Spracovanie výnimiek JDBC - Ako zaobchádzať s výnimkami SQL