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”);
Interface на подготвената декларация
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 обекти.
Има 3 вида в ResultSet. Те са:
- TYPE_FORWARD_ONLY: Това е опцията по подразбиране, при която курсорът се движи от началото до края, т.е.по посока напред.
- TYPE_SCROLL_INSENSITIVE: При този тип той ще накара курсора да се движи както в посока напред, така и назад. Ако направим някакви промени в данните, докато итерираме съхранените данни, те няма да се актуализират в набора от данни, ако някой промени данните в DB. Тъй като наборът от данни съдържа данните от времето, когато SQL заявката връща данните.
- TYPE_SCROLL_SENSITIVE: Подобно е на TYPE_SCROLL_INSENSITIVE, разликата е, ако някой актуализира данните, след като SQL заявката върне данните, докато итерацията ще отразява промените в набора от данни.
ResultSet Concurrency
Има 2 режима на паралелност в ResultSet. Те са:
- Резултат.CONCUR_READ_ONLY: Това е режимът на паралелност по подразбиране. Можем да четем само данните в ResultSet. Актуализацията не е приложима.
- Резултат.CONCUR_UPDATABLE: Можем да актуализираме данните в обекта ResultSet.
Някои бази данни не поддържат паралелен режим за всички типове ResultSet. В този случай трябва да проверим дали те поддържат желания от нас тип и режим на паралелност, използвайки метода supportsResultSetConcurrency ().
Методи в интерфейса ResultSet
Има 4 категории методи ResultSet. Те са:
- Навигационни методи
- Getter методи
- Методи на сетера
- Разни методи
Първо ще обсъдим навигационните методи и след това ще продължим напред.
# 1) Навигационни методи
Този метод се използва за преместване на курсора около набора от данни.
- Булев абсолютен (int ред): Използва се за преместване на курсора в посочения ред, който е споменат в параметъра, и връща true, ако операцията е успешна, иначе return false.
- Void afterLast (): Това прави курсора ResultSet да се движи след последния ред.
- Void beforeFirst (): Това прави курсора ResultSet да се движи преди първия ред.
- Булево първо (): Това прави курсора ResultSet да се премести на първия ред. Връща True, ако операцията е успешна, иначе False.
- Boolean last (): Това прави курсора ResultSet да премине към последния ред. Връща True, ако операцията е успешна, иначе False.
- Boolean 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
Обяснение:
В горната програма сме внедрили методите first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () и getRow () в ResultSet. За да използваме тези методи, ние задаваме стойности ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE в метода prepaStatement.
След това ще обсъдим кои са методите на Getter в ResultSet:
# 2) Методи за получаване
ResultSet е съхранил данните на таблицата от базата данни. Getter методите се използват за получаване на стойностите на таблицата в ResultSet. За това трябва да предадем или стойността на индекса на колоната, или името на колоната.
Следват методите за получаване в ResultSet:
- int getInt (int ColumnIndex): Използва се за получаване на стойността на указаната колона Индекс като тип данни int.
- float getFloat (int ColumnIndex): Използва се за получаване на стойността на посочения индекс на колона като тип плаващ данни.
- java.sql.date getDate (int ColumnIndex): Използва се за получаване на стойността на посочената колона Индекс като стойност на датата.
- int getInt (String ColumnName): Използва се за получаване на стойността на посочената колона като тип данни int.
- float getFloat (String ColumnName): Използва се за получаване на стойността на посочената колона като тип плаващ данни.
- Java.sql.date getDate (String ColumnName): Използва се за получаване на стойността на посочената колона като стойност на датата.
Има getter методи за всички примитивни типове данни (Boolean, long, double) и String също в интерфейса ResultSet. Можем да получим масив и двоичен тип данни също от базата данни. Има методи и за това.
# 3) Методи за настройване / актуализиране
Можем да актуализираме стойността в базата данни, като използваме методи ResultSet Updater. Подобно е на методите на Getter, но тук трябва да предадем стойностите / данните за конкретната колона за актуализиране в базата данни.
Следват методите за актуализиране в ResultSet:
- void updateInt (int ColumnIndex, int Value): Използва се за актуализиране на стойността на указаната колона Индекс с стойност int.
- void updateFloat (int ColumnIndex, float f): Използва се за актуализиране на стойността на посочения индекс на колона с плаваща стойност.
- void updateDate (int ColumnIndex, Date d): Използва се за актуализиране на стойността на указаната колона Индекс със стойността на датата.
- void updateInt (String ColumnName, int Value): Използва се за актуализиране на стойността на посочената колона с дадената стойност int.
- void updateFloat (String ColumnName, float f): Използва се за актуализиране на стойността на посочената колона с дадената плаваща стойност.
- Java.sql.date getDate (String ColumnName): Използва се за актуализиране на стойността на посочената колона с дадената стойност на датата.
Има методи за актуализация за всички примитивни типове данни (булеви, дълги, двойни) и String също в интерфейса ResultSet.
Методите за актуализиране просто актуализират данните в обекта ResultSet. Стойностите ще бъдат актуализирани в DB след извикване на метода insertRow или updateRow.
Актуализиране на ред:
Можем да актуализираме данните подред, като извикаме методите updateX (), предадем името или индекса на колоната и стойностите за актуализиране. Можем да използваме всеки тип данни вместо X в метода updateX. Досега актуализирахме данните в обекта ResultSet. За да актуализираме данните в DB, трябва да извикаме метода 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 колона) | Връща true, ако дадената колона е чувствителна към регистъра, в противен случай е false |
Низ getColumnName (int колона) | Той връща името на колоната на конкретната колона |
String getColumnTypeName (int колона) | Той връща типа данни на конкретната колона, която сме предали като параметър |
String getTableName (int колона) | Връща името на таблицата на колоната |
String getSchemaName (int колона) | Той връща името на схемата на таблицата на колоната |
int getColumnCount () | Той връща броя на колоните на ResultSet |
boolean isAutoIncrement (int Column) | Връща true, ако дадената колона е Auto Increment, в противен случай е false |
Пример за 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)); } } }
ИЗХОД:
Обяснение:
инструмент за отстраняване на грешки за Windows 10
В горната програма внедрихме методите getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () и getSchemaName () в интерфейса ResultSetMetaData.
DatabaseMetaData
Интерфейсът DatabaseMetaData дава информация за базата данни, като DatabaseName, версия на базата данни и т.н.
Важни методи на интерфейса DatabaseMetaData:
Име на метода | Описание |
---|---|
String getStringFunctions () | Той връща списъка с низови функции, налични в свързаната база данни |
Низ getDriverName () | Той ще върне името на JDBC драйвера, който използваме в нашата програма Java |
Низ getDriverVersion () | Той връща номера на версията на драйвера JDBC |
Низ getUserName () | Той връща потребителското име на базата данни, която използваме |
Низ getDatabaseProductName () | Той връща името на базата данни, която използваме |
String getDatabaseProductVersion () | Той връща номера на версията на базата данни, която използваме |
Резултат Задайте getSchemas () | Той връща имената на схемите, налични в свързаната база данни |
String getTimeDateFunctions () | Той връща списъка с функции за час и дата, налични в свързаната база данни |
Низ getURL () | Той връща URL адреса на базата данни |
Булева isReadOnly () | Той връща дали базата данни е в режим само за четене |
Булева подкрепаBatchUpdates () | Той връща дали пакетната актуализация поддържа базата данни |
Булева подкрепаSavepoints () | Той връща дали базата данни поддържа точки за запис |
Булева подкрепаStatementPooling () | Той връща дали базата данни поддържа обединяване на изявления |
Булева поддръжкаStoredProcedures () | Той връща дали базата данни поддържа съхранени процедури |
Булева поддръжкаOuterJoins () | Той връща дали базата данни поддържа външно присъединяване |
Тук изброихме някои важни методи на интерфейса 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 се използва за получаване на информация за базата данни, която сме свързали
често задавани въпроси
В # 1) Каква е ползата от ResultSet?
Отговор: ResultSet се използва за съхраняване и извличане на данните от DB. Когато методът executeQuery () е изпълнен, той ще върне ResultSet обект. Можем да използваме този ResultSet обект в нашата програма, за да изпълним логиката.
В # 2) Как да проверите дали ResultSet е празен или не?
Отговор: Няма предварително дефинирани методи като length (), size () за проверка на IsResultSet Empty. Можем да използваме метода next () за итерация и ако връща True, тогава той не е празен, ако връща False, означава, че ResultSet е празен.
В # 3) Възможно ли е ResultSet да е нула?
Отговор: Не, методът executeQuery () връща обекта ResultSet, който никога не може да бъде нулев.
Въпрос # 4) Какво представлява обновяваният ResultSet?
Отговор: Обновяващ се обект ResultSet се използва за актуализиране на данните в колоната, вмъкване на данни в колони и изтриване на редове. За да направим ResultSet като актуализируем, трябва да направим типа превъртане като чувствителен или нечувствителен и тип CONCUR като актуализируем.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
В # 5) Как да получа името на базата данни, която е свързана?
Отговор: Можем да използваме метода getDatabaseProductName () на обекта DatabaseMetaData.
Заключение
В този урок обсъдихме кои са интерфейсите ResultSet, ResultSetMetaData и DatabaseMetaData и техните важни методи, често използвани в програмите JDBC. Видяхме също как да актуализираме данни в DB с помощта на ResultSet. ResultSetMetadata съдържа информация за ResultSet като име на колона, брой колони и т.н.
DatabaseMetaData съдържа информация за база данни.
Препоръчително четене
- JDBC DriverManager, JDBC PreparedStatement and Statement
- Java JDBC урок: Какво е JDBC (Java Database Connectivity)
- Управление на транзакции на Java JDBC с пример
- Урок за групова обработка на JDBC и съхранена процедура
- Урок за свързване на Java JDBC с пример за програмиране
- Сравними и сравнителни интерфейси в Java
- Тестване на база данни за селен (Използване на WebDriver и JDBC API)
- Обработка на изключения JDBC - Как да се справя с SQL изключенията