jdbc resultset how use java resultset retrieve data
W tym samouczku wyjaśniono, jak używać zestawu wyników JDBC do pobierania danych. Dowiemy się również o interfejsach ResultSetMetaData i DatabaseMetaData z przykładami:
w JDBC DriverManager samouczek Seria samouczków JDBC , dowiedzieliśmy się, jak używać JDBC DriverManager i jego metod, JDBC PreparedStatement w aplikacjach Java.
W tym samouczku omówimy pozostałe interfejsy w JDBC. W naszych poprzednich samouczkach omówiliśmy interfejsy Statement, PreparedStatement i CallableStatement.
Tutaj dowiemy się o interfejsach JDBC ResultSet, ResultSetMetaData i DatabaseMetaData, ich metodach oraz sposobie korzystania z metod w programie Java.
Czego się nauczysz:
Interfejs JDBC ResultSet
Interfejs ResultSet jest obecny w pakiecie java.sql. Służy do przechowywania danych, które są zwracane z tabeli bazy danych po wykonaniu instrukcji SQL w programie Java. Obiekt ResultSet utrzymuje kursor na danych wynikowych. Domyślnie kursor znajduje się przed pierwszym wierszem danych wynikowych.
Metoda next () służy do przenoszenia kursora na następną pozycję w kierunku do przodu. Zwróci FALSE, jeśli nie będzie więcej rekordów. Pobiera dane, wywołując metodę executeQuery () przy użyciu dowolnego obiektu instrukcji. Może to być obiekt typu Statement, PreparedStatement lub CallableStatement. Interfejsy PreparedStatement i CallableStatement to podinterfejsy interfejsu Statement.
Interfejs instrukcji
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”);
Możemy użyć metody getX (), aby uzyskać dane z kolumn podczas iteracji po wynikach, gdzie X - jest typem danych kolumny. Możemy użyć nazw kolumn lub indeksu, aby uzyskać wartości za pomocą metod getX ().
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); }
W metodach getX () możemy również podać numer indeksu kolumny zamiast nazwy kolumny.
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 zestawów wyników
Domyślnie możemy wykonać iterację danych / wartości w zestawie wyników, które wróciły jako wynik wykonania instrukcji SQL w kierunku do przodu. Możemy iterować wartości w innych kierunkach za pomocą przewijalnego zestawu wyników. Możemy określić typ i współbieżność elementu ResultSet podczas tworzenia obiektów Statement, PreparedStatement i CallableStatement.
W zestawie wyników są 3 typy. Oni są:
- TYPE_FORWARD_ONLY: Jest to opcja domyślna, w której kursor przesuwa się od początku do końca, czyli do przodu.
- TYPE_SCROLL_INSENSITIVE: W tym typie spowoduje to, że kursor będzie się poruszał zarówno do przodu, jak i do tyłu. Jeśli wprowadzimy jakiekolwiek zmiany w danych podczas iteracji przechowywanych danych, nie zaktualizujemy ich w zbiorze danych, jeśli ktoś zmieni dane w bazie danych. Ponieważ zestaw danych zawiera dane z czasu, gdy zapytanie SQL zwraca dane.
- TYPE_SCROLL_SENSITIVE: Jest podobny do TYPE_SCROLL_INSENSITIVE, różnica polega na tym, że ktoś aktualizuje dane po zwróceniu danych przez zapytanie SQL, podczas gdy iteracja będzie odzwierciedlać zmiany w zestawie danych.
Współbieżność zestawu wyników
W zestawie wyników dostępne są 2 tryby współbieżności. Oni są:
- Zestaw wyników.CONCUR_READ_ONLY: Jest to domyślny tryb współbieżności. Możemy tylko czytać dane w zestawie wyników. Aktualizacja nie ma zastosowania.
- Zestaw wyników.CONCUR_UPDATABLE: Możemy zaktualizować dane w obiekcie ResultSet.
Niektóre bazy danych nie obsługują trybu współbieżności dla wszystkich typów zestawów wyników. W takim przypadku musimy sprawdzić, czy obsługują nasz żądany typ i tryb współbieżności za pomocą metody supportResultSetConcurrency ().
Metody w interfejsie ResultSet
Istnieją 4 kategorie metod ResultSet. Oni są:
- Metody nawigacyjne
- Metody pobierania
- Metody ustawiające
- Różne metody
Najpierw omówimy metody nawigacyjne, a następnie przejdziemy dalej.
1) Metody nawigacyjne
Ta metoda służy do przesuwania kursora po zbiorze danych.
- Wartość logiczna bezwzględna (wiersz int): Służy do przesunięcia kursora do określonego wiersza, który jest wymieniony w parametrze i zwraca wartość true, jeśli operacja zakończy się powodzeniem, w przeciwnym razie zwróci false.
- Void afterLast (): Powoduje, że kursor ResultSet przesuwa się po ostatnim wierszu.
- Void beforeFirst (): Powoduje, że kursor zestawu wyników przesuwa się przed pierwszym wierszem.
- Pierwsza wartość logiczna (): Powoduje, że kursor zestawu wyników przesuwa się do pierwszego wiersza. Zwraca True, jeśli operacja się powiedzie, w przeciwnym razie False.
- Boolean last (): Sprawia, że kursor zestawu wyników przesuwa się do ostatniego wiersza. Zwraca True, jeśli operacja się powiedzie, w przeciwnym razie False.
- Boolean next (): Sprawia, że kursor zestawu wyników przesuwa się do następnego wiersza. Zwraca True, jeśli jest więcej rekordów i False, jeśli nie ma więcej rekordów.
- Boolean poprzedni (): Powoduje, że kursor ResultSet przechodzi do poprzedniego wiersza. Zwraca True, jeśli operacja się powiedzie, w przeciwnym razie False.
- Boolean względny (): Przesuwa kursor do określonej liczby wierszy w kierunku do przodu lub do tyłu.
- Int getRow (): Zwraca bieżący numer wiersza, na który wskazuje obiekt ResultSet.
- Void moveToCurrentRow (): Przenosi kursor z powrotem do bieżącego wiersza, jeśli znajduje się on obecnie w wierszu wstawiania.
- Void moveToInsertRow (): Przenosi kursor do określonego wiersza, aby wstawić wiersz do bazy danych. Zapamiętuje aktualne położenie kursora. Możemy więc użyć metody moveToCurrentRow (), aby przesunąć kursor do bieżącego wiersza po wstawieniu.
W tym samouczku wszystkie programy są napisane w języku Java. Użyliśmy wersji Java 8 i Oracle DB.
>> Oprogramowanie Oracle można pobrać pod adresem tutaj
>> Możesz pobrać wersję Java 8 z witryny tutaj
Posiada proces instalacji Java krok po kroku.
Przykładowy program zestawu wyników JDBC: (przy użyciu metod nawigacyjnych)
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(); } } }
WYNIK:
Dane w tabeli Employee_details
Wyjaśnienie:
W powyższym programie zaimplementowaliśmy metody first (), last (), beforeFirst (), afterLast (), next (), previous (), bezwzględne (), względne () i getRow () w zestawie wyników. Aby skorzystać z tych metod, ustawiamy wartości ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE w metodzie replaceStatement.
Następnie omówimy, jakie są metody pobierające w zestawie wyników:
# 2) Metody pobierania
Zestaw wyników przechował dane tabeli z bazy danych. Metody pobierające służą do pobierania wartości tabeli w zestawie wyników. W tym celu musimy przekazać wartość indeksu kolumny lub nazwę kolumny.
Poniżej przedstawiono metody pobierające w zestawie wyników:
- int getInt (int ColumnIndex): Służy do pobierania wartości określonej kolumny Index jako typu danych int.
- float getFloat (int ColumnIndex): Służy do pobierania wartości określonej kolumny Indeks jako zmiennoprzecinkowego typu danych.
- java.sql.date getDate (int ColumnIndex): Służy do pobrania wartości określonej kolumny Indeks jako wartości daty.
- int getInt (String ColumnName): Służy do pobierania wartości określonej kolumny jako typu danych int.
- float getFloat (String ColumnName): Służy do pobierania wartości określonej kolumny jako zmiennoprzecinkowego typu danych.
- Java.sql.date getDate (String ColumnName): Służy do pobrania wartości określonej kolumny jako wartości daty.
Istnieją metody pobierające dla wszystkich pierwotnych typów danych (Boolean, long, double), a także String w interfejsie ResultSet. Tablicę i typ danych binarnych możemy uzyskać również z Bazy Danych. Ma też na to metody.
# 3) Metody ustawiające / aktualizujące
Możemy zaktualizować wartość w Bazie Danych za pomocą metod ResultSet Updater. Jest podobny do metod Getter, ale tutaj musimy przekazać wartości / dane dla konkretnej kolumny do aktualizacji w Bazie Danych.
Poniżej przedstawiono metody aktualizacji w zestawie wyników:
- void updateInt (int ColumnIndex, int Value): Służy do aktualizowania wartości określonego indeksu kolumny o wartość int.
- void updateFloat (int ColumnIndex, float f): Służy do aktualizacji wartości określonego indeksu kolumny o wartość zmiennoprzecinkową.
- void updateDate (int ColumnIndex, Date d): Służy do aktualizacji wartości określonego indeksu kolumny o wartość daty.
- void updateInt (String ColumnName, int Value): Służy do aktualizacji wartości określonej kolumny o podaną wartość int.
- void updateFloat (String ColumnName, float f): Służy do aktualizacji wartości określonej kolumny o podaną wartość typu float.
- Java.sql.date getDate (String ColumnName): Służy do aktualizacji wartości określonej kolumny o podaną wartość daty.
Istnieją metody Updater dla wszystkich pierwotnych typów danych (Boolean, long, double) i String również w interfejsie ResultSet.
Metody Updater po prostu aktualizują dane w obiekcie ResultSet. Wartości zostaną zaktualizowane w DB po wywołaniu metody insertRow lub updateRow.
Aktualizacja wiersza:
Możemy zaktualizować dane w wierszu, wywołując metody updateX (), przekazując nazwę kolumny lub indeks oraz wartości do zaktualizowania. W metodzie updateX możemy użyć dowolnego typu danych zamiast X. Do tej pory zaktualizowaliśmy dane w obiekcie ResultSet. Aby zaktualizować dane w DB, musimy wywołać metodę updateRow ().
Wstawianie wiersza:
Musimy użyć moveToInsertRow (), aby przesunąć kursor i wstawić nowy wiersz. Omówiliśmy to już w sekcji Metody nawigacji. Następnie musimy wywołać metodę updateX (), aby dodać dane do wiersza. Powinniśmy podać dane dla wszystkich kolumn, w przeciwnym razie użyje domyślnej wartości tej konkretnej kolumny.
Po zaktualizowaniu danych musimy wywołać metodę insertRow (). Następnie użyj metody moveToCurrentRow (), aby przenieść kursor z powrotem do wiersza, w którym byliśmy przed rozpoczęciem wstawiania nowego wiersza.
Przykład zestawu wyników:
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(); } } }
WYNIK:
Wyjaśnienie:
W powyższym programie najpierw zapisaliśmy dane z tabeli Employee_details w obiekcie ResultSet za pomocą zapytania SELECT. Następnie wyświetliliśmy dane z ostatniego wiersza w tabeli Employer_details za pomocą metody last () elementu ResultSet. moveToInsertRow () sprawia, że kursor wskazuje bieżący wiersz, teraz bieżący wiersz jest ostatnim wierszem.
metody updateXXX () służące do aktualizacji wartości w wierszu, a metoda insertRow () wstawiła dane do nowego wiersza. Używając metody absolutnej (), ustawiliśmy kursor tak, aby wskazywał na 5thrząd. UpdateInt () została użyta do zaktualizowania EMPNUM o nowy identyfikator 5thpracownik w tabeli. Następnie wyświetlono dane, aby sprawdzić, czy EMPNUM jest aktualizowane, czy nie.
Ustawiono kursor tak, aby wskazywał ostatni wiersz tabeli za pomocą last () i wyświetlał go. Aby wykonać powyższą logikę, musimy ustawić wartości ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE w metodzie replaceStatement.
# 4) Różne metody
- void close (): Służy do zamykania instancji ResultSet i zwalniania zasobów skojarzonych z instancją ResultSet.
- ResultSetMetaData getMetaData (): Zwraca instancję ResultSetMetaData. Zawiera informacje o typie i właściwościach kolumn wyniku zapytania. Dowiemy się więcej o ResultSetMetaData w następnej sekcji.
ResultSetMetaData
Co to są metadane?
Metadane to dane o danych. Korzystając z tego interfejsu, uzyskamy więcej informacji o zestawie wyników. Jest dostępny w pakiecie java.sql. Każdy obiekt ResultSet jest powiązany z jednym obiektem ResultSetMetaData.
Obiekt ten będzie zawierał szczegóły właściwości kolumn, takie jak typ danych kolumny, nazwa kolumny, liczba kolumn, nazwa tabeli, nazwa schematu itp. Obiekt ResultSetMetaData możemy pobrać za pomocą metody getMetaData () funkcji ResultSet.
Składnia ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Ważne metody interfejsu ResultSetMetaData:
Nazwa metody | Opis |
---|---|
boolean isCaseSensitive (int Column) | Zwraca prawdę, jeśli dana kolumna rozróżnia wielkość liter, w przeciwnym razie fałsz |
Ciąg getColumnName (kolumna int) | Zwraca nazwę kolumny określonej kolumny |
Ciąg getColumnTypeName (kolumna int) | Zwraca typ danych określonej kolumny, którą przekazaliśmy jako parametr |
Ciąg getTableName (kolumna int) | Zwraca nazwę tabeli kolumny |
Ciąg getSchemaName (kolumna int) | Zwraca nazwę schematu tabeli kolumny |
int getColumnCount () | Zwraca liczbę kolumn zestawu wyników |
boolean isAutoIncrement (kolumna int) | Zwraca prawdę, jeśli dana kolumna jest automatycznym przyrostem, w przeciwnym razie fałsz |
Przykład ResultSetMetaData
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)); } } }
WYNIK:
Wyjaśnienie:
najlepsze oprogramowanie do monitorowania temperatury procesora i procesora graficznego
W powyższym programie zaimplementowaliśmy metody getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () i getSchemaName () w interfejsie ResultSetMetaData.
DatabaseMetaData
Interfejs DatabaseMetaData zawiera informacje o bazie danych, takie jak nazwa bazy danych, wersja bazy danych i tak dalej.
Ważne metody interfejsu DatabaseMetaData:
Nazwa metody | Opis |
---|---|
Ciąg getStringFunctions () | Zwraca listę funkcji tekstowych dostępnych w podłączonej bazie danych |
Ciąg getDriverName () | Zwróci nazwę sterownika JDBC, którego używamy w naszym programie Java |
Ciąg getDriverVersion () | Zwraca numer wersji sterownika JDBC |
Ciąg getUserName () | Zwraca nazwę użytkownika bazy danych, której używamy |
Ciąg getDatabaseProductName () | Zwraca nazwę bazy danych, której używamy |
Ciąg getDatabaseProductVersion () | Zwraca numer wersji bazy danych, której używamy |
Zestaw wyników getSchemas () | Zwraca nazwy schematów dostępnych w podłączonej bazie danych |
Ciąg getTimeDateFunctions () | Zwraca listę funkcji czasu i daty dostępnych w podłączonej bazie danych |
Ciąg getURL () | Zwraca adres URL bazy danych |
Boolean isReadOnly () | Zwraca, czy baza danych jest w trybie tylko do odczytu |
Boolean obsługuje BatchUpdates () | Zwraca, czy baza danych obsługuje aktualizacje wsadowe |
Boolean obsługuje Savepoints () | Zwraca, czy baza danych obsługuje punkty zapisu |
Boolean obsługujeStatementPooling () | Zwraca, czy baza danych obsługuje pule instrukcji |
Boolean obsługujeStoredProcedures () | Zwraca, czy baza danych obsługuje procedury składowane |
Boolean obsługujeOuterJoins () | Zwraca, czy baza danych obsługuje łączenie zewnętrzne |
Tutaj wymieniliśmy kilka ważnych metod interfejsu DatabaseMetaData. Możesz odnieść się do oficjalnej strony Wyrocznia gdzie możesz zobaczyć wszystkie metody dostępne w interfejsie DatabaseMetaData.
Przykład DatabaseMetaData:
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()); } }
WYNIK:
Wyjaśnienie:
W powyższym programie wykorzystaliśmy / zaimplementowaliśmy getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), isReadOnly () , SupportStatementPooling (), SupportSavepoints (), SupportStoredProcedures () i SupportOuterJoins () w interfejsie DatabaseMetaData.
Punkty, na które należy zwrócić uwagę:
- Interfejs JDBC ResultSet służy do przechowywania danych z bazy danych i wykorzystywania ich w naszym programie Java.
- Możemy również użyć zestawu wyników do aktualizacji danych za pomocą metod updateXXX ().
- Obiekt ResultSet wskazuje kursor przed pierwszym wierszem danych wynikowych. Korzystając z metody next (), możemy iterować przez zestaw wyników.
- Mamy metody nawigacyjne ResultSet, aby przejść dalej w obiekcie ResultSet
- WynikMetaData służy do uzyskania dodatkowych informacji o zestawie wyników, takich jak nazwa kolumny, liczba kolumn, typ danych kolumny itp.
- DatabaseMetData służy do uzyskania informacji o bazie danych, z którą się połączyliśmy
Często Zadawane Pytania
Pytanie 1) Jakie jest zastosowanie zestawu wyników?
Odpowiedź: Zestaw wyników służy do przechowywania i pobierania danych z bazy danych. Po wykonaniu metody executeQuery () zwróci ona obiekt ResultSet. Możemy użyć tego obiektu ResultSet w naszym programie do wykonania logiki.
P # 2) Jak sprawdzić, czy zestaw wyników jest pusty, czy nie?
Odpowiedź: Nie ma predefiniowanych metod, takich jak length (), size (), które sprawdzają wartość IsResultSet Empty. Możemy użyć metody next () do iteracji i jeśli zwraca True, to nie jest pusta, jeśli zwraca False oznacza, że ResultSet jest pusty.
P # 3) Czy jest możliwe, że zestaw wyników może mieć wartość NULL?
Odpowiedź: Nie, metoda executeQuery () zwraca obiekt ResultSet, który nigdy nie może mieć wartości null.
P # 4) Co to jest zestaw wyników, który można aktualizować?
Odpowiedź: Obiekt ResultSet, który można aktualizować, jest używany do aktualizacji danych w kolumnie, wstawiania danych do kolumn i usuwania wierszy. Aby ustawić zestaw wyników jako aktualizowalny, musimy ustawić typ przewijania jako wrażliwy lub niewrażliwy, a typ CONCUR jako aktualizowalny.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
P # 5) Jak uzyskać nazwę bazy danych, która została podłączona?
Odpowiedź: Możemy skorzystać z metody getDatabaseProductName () obiektu DatabaseMetaData.
Wniosek
W tym samouczku omówiliśmy, czym są interfejsy ResultSet, ResultSetMetaData i DatabaseMetaData oraz ich ważne metody powszechnie używane w programach JDBC. Widzieliśmy również, jak aktualizować dane w bazie danych za pomocą zestawu wyników. ResultSetMetadata zawiera informacje o ResultSet, takie jak nazwa kolumny, liczba kolumn i tak dalej.
DatabaseMetaData zawiera informacje o bazie danych.
rekomendowane lektury
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Samouczek Java JDBC: Co to jest JDBC (łączność z bazą danych Java)
- Zarządzanie transakcjami Java JDBC z przykładem
- JDBC Batch Processing and Stored Procedure Tutorial
- Samouczek dotyczący połączeń JDBC w języku Java z przykładem programowania
- Porównywalne i porównawcze interfejsy w Javie
- Testowanie bazy danych selenu (przy użyciu WebDriver i JDBC API)
- Obsługa wyjątków JDBC - jak obsługiwać wyjątki SQL