jdbc resultset how use java resultset retrieve data
Цей підручник пояснює, як використовувати JDBC ResultSet для отримання даних. Ми також дізнаємося про інтерфейси ResultSetMetaData та DatabaseMetaData з прикладами:
В JDBC DriverManager підручник з Серія підручників JDBC , ми дізналися, як використовувати JDBC DriverManager та його методи, JDBC PreparedStatement у додатках Java.
У цьому підручнику ми обговоримо інші інтерфейси в JDBC. Ми розглядали інтерфейси Statement, PreparedStatement та CallableStatement у наших попередніх навчальних посібниках.
Тут ми дізнаємося про інтерфейси JDBC ResultSet, ResultSetMetaData та DatabaseMetaData, їх методи та способи використання методів у програмі Java.
Що ви дізнаєтесь:
Інтерфейс JDBC ResultSet
Інтерфейс ResultSet присутній у пакеті java.sql. Він використовується для зберігання даних, які повертаються з таблиці бази даних після виконання операторів SQL у програмі Java. Об'єкт ResultSet підтримує курсор на даних результату. За замовчуванням курсор розміщується перед першим рядком даних результатів.
Метод next () використовується для переміщення курсору в наступну позицію вперед. Поверне FALSE, якщо більше не буде записів. Він отримує дані, викликаючи метод executeQuery (), використовуючи будь-який з об'єктів оператора. Це може бути Statement або PreparedStatement або CallableStatement об’єкт. Інтерфейси PreparedStatement та CallableStatement - це підінтерфейси інтерфейсу Statement.
Інтерфейс заяви
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Інтерфейс PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Ми можемо використовувати метод getX () для отримання даних стовпців під час ітерації результатів, де X - це тип даних стовпця. Ми можемо використовувати імена стовпців, або індекс, щоб отримати значення за допомогою методів 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); }
Ми також можемо згадати індексний номер Стовпця замість Назва Стовпця в методах 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); }
ResultSet Типи
За замовчуванням ми можемо повторити дані / значення в ResultSet, які повернулися як вихідні дані виконаного оператора SQL у прямому напрямку. Ми можемо повторювати значення в інших напрямках, використовуючи Scrollable ResultSet. Ми можемо вказати тип і паралельність ResultSet під час створення об’єктів Statement, PreparedStatement та CallableStatement.
У ResultSet є 3 типи. Вони є:
- TYPE_FORWARD_ONLY: Це варіант за замовчуванням, коли курсор рухається від початку до кінця, тобто у напрямку вперед.
- TYPE_SCROLL_INSENSITIVE: У цьому типі курсор рухатиметься як вперед, так і назад. Якщо ми вносимо будь-які зміни в дані під час ітерації збережених даних, вони не оновлюватимуться в наборі даних, якщо хтось змінить дані в БД. Оскільки в наборі даних є дані з моменту, коли запит SQL повертає дані.
- TYPE_SCROLL_SENSITIVE: Це схоже на TYPE_SCROLL_INSENSITIVE, різниця полягає в тому, що якщо хтось оновлює дані після того, як SQL-запит повернув дані, в той час як ітерація відображатиме зміни в наборі даних.
ResultSet Паралельність
У ResultSet є 2 режими паралельності. Вони є:
- ResultSet.CONCUR_READ_ONLY: Це паралельний режим за замовчуванням. Ми можемо прочитати дані лише в ResultSet. Оновлення не застосовується.
- ResultSet.CONCUR_UPDATABLE: Ми можемо оновити дані в об’єкті ResultSet.
Деякі бази даних не підтримують режим паралельності для всіх типів ResultSet. У цьому випадку нам потрібно перевірити, чи підтримують вони наш бажаний тип і режим паралельності, використовуючи метод supportsResultSetConcurrency ().
Методи в інтерфейсі ResultSet
Існує 4 категорії методів ResultSet. Вони є:
- Навігаційні методи
- Методи Геттера
- Методи сетера
- Різні методи
Спочатку ми обговоримо навігаційні методи, а потім перейдемо далі.
# 1) Навігаційні методи
Цей метод використовується для переміщення курсору навколо набору даних.
- Логічний абсолют (int рядок): Застосовується для переміщення курсора до зазначеного рядка, згаданого в параметрі, і повернення істини, якщо операція успішна, інакше повернення false.
- Void afterLast (): Це робить курсор ResultSet переміщеним після останнього рядка.
- Void beforeFirst (): Це робить курсор ResultSet переміщеним перед першим рядком.
- Логічне спочатку (): Це робить курсор ResultSet переміщеним до першого рядка. Повертає значення True, якщо операція успішно виконана ще False.
- Логічне last (): Це робить курсор ResultSet переміщеним до останнього рядка. Повертає значення True, якщо операція успішно виконана ще False.
- Логічне next (): Це робить курсор ResultSet для переходу до наступного рядка. Повертає значення True, якщо записів більше, та False, якщо записів більше немає.
- Логічне попереднє (): Це робить курсор ResultSet для переходу до попереднього рядка. Повертає значення True, якщо операція успішно виконана ще False.
- Логічний відносний (): Він переміщує курсор на задану кількість рядків або вперед, або назад.
- Int getRow (): Повертає номер поточного рядка, на який вказує об’єкт ResultSet.
- Void moveToCurrentRow (): Він переміщує курсор назад до поточного рядка, якщо він зараз знаходиться у рядку вставки.
- Void moveToInsertRow (): Він переміщує курсор до певного рядка, щоб вставити рядок до бази даних. Він запам'ятовує поточне розташування курсору. Тож ми можемо використовувати метод moveToCurrentRow () для переміщення курсору до поточного рядка після вставки.
У цьому посібнику всі програми написані на Java. Ми використовували версію Java 8 та Oracle DB.
>> Ви можете завантажити програмне забезпечення Oracle з тут
>> Ви можете завантажити версію Java 8 з тут
Він має покроковий процес встановлення Java.
Приклад програми JDBC ResultSet: (за допомогою навігаційних методів)
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(); } } }
ВИХІД:
Дані в таблиці Employee_details
Пояснення:
У наведеній вище програмі ми реалізували в ResultSet методи first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () та getRow (). Для використання цих методів ми встановлюємо значення ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE у методі prepaStatement.
Далі ми обговоримо, які є методи Getter у ResultSet:
# 2) Методи отримання
ResultSet зберігає дані таблиці з бази даних. Методи отримання отримують значення таблиці в ResultSet. Для цього нам потрібно передати або значення індексу стовпця, або назву стовпця.
Нижче наведені методи отримання в ResultSet:
- int getInt (int ColumnIndex): Він використовується для отримання значення вказаного стовпця Index як тип даних int.
- float getFloat (int ColumnIndex): Він використовується для отримання значення вказаного стовпця Index як плаваючого типу даних.
- java.sql.date getDate (int ColumnIndex): Він використовується для отримання значення вказаного стовпця Index як значення дати.
- int getInt (String ColumnName): Він використовується для отримання значення вказаного стовпця як типу даних int.
- float getFloat (String ColumnName): Він використовується для отримання значення зазначеного стовпця як плаваючого типу даних.
- Java.sql.date getDate (Ім'я стовпця рядка): Він використовується для отримання значення вказаного стовпця як значення дати.
Існують методи отримання для всіх примітивних типів даних (логічний, довгий, подвійний) і String також в інтерфейсі ResultSet. Ми можемо отримати масив і двійковий тип даних також із бази даних. Для цього є методи.
# 3) Методи встановлення / оновлення
Ми можемо оновити значення в Базі даних за допомогою методів ResultSet Updater. Це схоже на методи Getter, але тут нам потрібно передати значення / дані для конкретного стовпця для оновлення в базі даних.
Нижче наведено методи оновлення в ResultSet:
- void updateInt (int ColumnIndex, int Value): Він використовується для оновлення значення вказаного стовпця Index з значенням int.
- void updateFloat (int ColumnIndex, float f): Застосовується для оновлення значення вказаного стовпця Index з плаваючим значенням.
- void updateDate (int ColumnIndex, Date d): Застосовується для оновлення значення зазначеного стовпця Індекс значенням дати.
- void updateInt (String ColumnName, int Value): Він використовується для оновлення значення вказаного стовпця заданим значенням int.
- void updateFloat (String ColumnName, float f): Застосовується для оновлення значення зазначеного стовпця заданим плаваючим значенням.
- Java.sql.date getDate (Ім'я стовпця рядка): Застосовується для оновлення значення зазначеного стовпця заданим значенням дати.
Існують методи оновлення для всіх примітивних типів даних (логічний, довгий, подвійний) і String також в інтерфейсі ResultSet.
Методи оновлення просто оновлюють дані в об’єкті ResultSet. Значення будуть оновлені в БД після виклику методу insertRow або updateRow.
Оновлення рядка:
Ми можемо оновлювати дані поспіль, викликаючи методи updateX (), передаючи ім’я або індекс стовпця та значення для оновлення. Ми можемо використовувати будь-який тип даних замість X у методі updateX. До цього часу ми оновили дані в об'єкті ResultSet. Щоб оновити дані в БД, ми повинні викликати метод updateRow ().
Вставка рядка:
Нам потрібно використовувати moveToInsertRow (), щоб перемістити курсор, щоб вставити новий рядок. Ми вже висвітлювали це в розділі Навігаційні методи. Далі нам потрібно викликати метод updateX (), щоб додати дані до рядка. Ми повинні надати дані для всіх стовпців, інакше він буде використовувати значення за замовчуванням для цього конкретного стовпця.
Після оновлення даних нам потрібно викликати метод insertRow (). Потім використовуйте метод moveToCurrentRow (), щоб повернути позицію курсора назад до того рядка, в якому ми знаходились до того, як ми почали вставляти новий рядок.
ResultSet Приклад:
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(); } } }
ВИХІД:
Пояснення:
У наведеній вище програмі те, що ми зробили спочатку, ми зберегли дані таблиці Employee_details в об’єкті ResultSet, використовуючи запит SELECT. Потім ми відобразили дані останнього рядка в таблиці worker_details за допомогою методу last () ResultSet. Метод moveToInsertRow () робить курсор вказівником на поточний рядок, тепер поточний рядок є останнім рядком.
Методи updateXXX (), що використовуються для оновлення значень у рядок, а метод insertRow () вставляє дані в новий рядок. Використовуючи метод absolute (), ми встановили курсор на 5горядок. Метод UpdateInt () був використаний для оновлення EMPNUM з новим ідентифікатором 5гопрацівник у таблиці. Після цього відображаються дані, щоб перевірити, чи оновлено EMPNUM чи ні.
Зробив курсор, щоб вказати останній рядок таблиці, використовуючи last () і відобразив його. Для виконання наведеної вище логіки нам потрібно встановити значення ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE у методі prepaStatement.
# 4) Різні методи
- void close (): Він використовується для закриття екземпляра ResultSet та звільнення ресурсів, пов’язаних з екземпляром ResultSet.
- ResultSetMetaData getMetaData (): Він повертає екземпляр ResultSetMetaData. Він містить інформацію про тип та властивість стовпців результату запиту. Ми дізнаємось більше про ResultSetMetaData в наступному розділі.
ResultSetMetaData
Що таке метадані?
Метадані означають дані про дані. Використовуючи цей інтерфейс, ми отримаємо більше інформації про ResultSet. Він доступний у пакеті java.sql. Кожен об'єкт ResultSet пов'язаний з одним об'єктом ResultSetMetaData.
Цей об'єкт матиме деталі властивостей стовпців, як тип даних стовпця, ім'я стовпця, кількість стовпців, ім'я таблиці, ім'я схеми тощо. Ми можемо отримати об'єкт ResultSetMetaData, використовуючи метод getMetaData () ResultSet.
Синтаксис ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Важливі методи інтерфейсу ResultSetMetaData:
Назва методу | Опис |
---|---|
boolean isCaseSensitive (int Column) | Повертає true, якщо вказаний стовпець чутливий до регістру, інакше false |
Рядок getColumnName (int стовпець) | Він повертає назву стовпця конкретного стовпця |
Рядок getColumnTypeName (стовпець int) | Він повертає тип даних конкретного стовпця, який ми передали як параметр |
Рядок getTableName (int стовпець) | Він повертає ім'я таблиці стовпця |
Рядок getSchemaName (стовпець int) | Він повертає ім’я схеми таблиці стовпця |
int getColumnCount () | Він повертає кількість стовпців ResultSet |
boolean isAutoIncrement (int стовпець) | Він повертає істину, якщо заданий стовпець є Автоінкрементом, інакше помилково |
Приклад 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)); } } }
ВИХІД:
Пояснення:
як створити проект в затемненні -
У наведеній вище програмі ми реалізували методи getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () та getSchemaName () в інтерфейсі ResultSetMetaData.
DatabaseMetaData
Інтерфейс DatabaseMetaData надає інформацію про базу даних, як-от DatabaseName, версія бази даних тощо.
Важливі методи інтерфейсу DatabaseMetaData:
Назва методу | Опис |
---|---|
Рядок getStringFunctions () | Він повертає список рядкових функцій, доступних у підключеній базі даних |
Рядок getDriverName () | Він поверне ім'я драйвера JDBC, який ми використовуємо в нашій програмі Java |
Рядок getDriverVersion () | Він повертає номер версії драйвера JDBC |
Рядок getUserName () | Він повертає ім’я користувача бази даних, яку ми використовуємо |
Рядок getDatabaseProductName () | Він повертає назву бази даних, яку ми використовуємо |
Рядок getDatabaseProductVersion () | Він повертає номер версії бази даних, яку ми використовуємо |
ResultSet getSchemas () | Він повертає імена схем, доступних у підключеній базі даних |
Рядок getTimeDateFunctions () | Він повертає список функцій часу та дати, доступних у підключеній базі даних |
Рядок getURL () | Він повертає URL-адресу бази даних |
Логічний isReadOnly () | Він повертає, чи база даних знаходиться в режимі лише для читання |
Булева підтримкаBatchUpdates () | Він повертає, чи підтримує база даних пакетне оновлення |
Логічна підтримка Savepoints () | Він повертає, чи підтримує база даних точки збереження |
Логічна supportsStatementPooling () | Він повертає, чи підтримує База даних об’єднання заяв |
Логічна підтримкаStoredProcedures () | Він повертає, чи підтримує база даних збережені процедури |
Булева підтримкаOuterJoins () | Він повертає, чи підтримує база даних Outer Join |
Тут ми перерахували деякі важливі методи інтерфейсу DatabaseMetaData. Ви можете звернутися до офіційного сайту Oracle де ви можете побачити всі методи, доступні в інтерфейсі DatabaseMetaData.
Приклад 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()); } }
ВИХІД:
Пояснення:
У вищевказаній програмі ми використовували / реалізовували getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadportsBatch ( , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () і supportsOuterJoins () методи в DatabaseMetaData Interface.
Бали, на які слід звернути увагу:
- Інтерфейс JDBC ResultSet використовується для зберігання даних із бази даних та використання їх у нашій програмі Java.
- Ми також можемо використовувати ResultSet для оновлення даних методами updateXXX ().
- Об’єкт ResultSet спрямовує курсор перед першим рядком даних результатів. Використовуючи метод next (), ми можемо здійснити ітерацію через ResultSet.
- У нас є навігаційні методи ResultSet для подальшого переміщення в об’єкті ResultSet
- ResultMetaData використовується для отримання додаткової інформації про ResultSet, як-от назва стовпця, кількість стовпців, тип даних стовпця тощо.
- DatabaseMetData використовується для отримання інформації про базу даних, яку ми підключили
Часті запитання
Q # 1) Яка користь ResultSet?
Відповідь: ResultSet використовується для зберігання та отримання даних з БД. Коли метод executeQuery () буде виконаний, він поверне об'єкт ResultSet. Ми можемо використовувати цей об’єкт ResultSet у нашій програмі для виконання логіки.
Q # 2) Як перевірити, чи є ResultSet порожнім чи ні?
Відповідь: Немає заздалегідь визначених методів, таких як length (), size (), доступних для перевірки IsResultSet Empty. Ми можемо використовувати метод next () для ітерації, і якщо він повертає True, тоді він не є порожнім, якщо повертає False, означає, що ResultSet порожній.
Q # 3) Чи можливо, що ResultSet може бути нульовим?
Відповідь: Ні, метод executeQuery () повертає об’єкт ResultSet, який ніколи не може бути нульовим.
Q # 4) Що таке оновлений ResultSet?
Відповідь: Оновлюваний об’єкт ResultSet використовується для оновлення даних у стовпці, вставки даних у стовпці та видалення рядків. Щоб зробити ResultSet як оновлюваний, нам потрібно зробити тип прокрутки настільки чутливим або нечутливим, а тип CONCUR настільки, що оновлюється.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q # 5) Як отримати підключене ім'я бази даних?
Відповідь: Ми можемо використовувати метод getDatabaseProductName () об'єкта DatabaseMetaData.
Висновок
У цьому підручнику ми обговорили, що таке інтерфейси ResultSet, ResultSetMetaData та DatabaseMetaData та їх важливі методи, які зазвичай використовуються в програмах JDBC. Ми також бачили, як оновлювати дані в БД за допомогою ResultSet. ResultSetMetadata містить інформацію про ResultSet, таку як Назва стовпця, Кількість стовпців тощо.
DatabaseMetaData містить інформацію про базу даних.
Рекомендована література
- JDBC DriverManager, JDBC PreparedStatement and Statement
- Підручник з Java JDBC: Що таке JDBC (підключення до бази даних Java)
- Управління транзакціями Java JDBC на прикладі
- Підручник з пакетної обробки та збережених процедур JDBC
- Підручник з підключення Java JDBC з прикладом програмування
- Порівнянні та порівняльні інтерфейси в Java
- Тестування бази даних селену (за допомогою WebDriver та JDBC API)
- Обробка винятків JDBC - Як обробляти винятки SQL