Овој туторијал објаснува како да се користи 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() користејќи кој било од објектите на изјавата. Тоа може да биде објект Изјава или PreparedStatement или CallableStatement. Подготвена Изјава иго враќа името на шемата на табелата на колоната
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 дава информации за интерфејсот на DatabaseMetaData DatabaseName, верзија на базата на податоци и така натаму.
Важни методи на интерфејсот DatabaseMetaData:
Име на методот | Опис |
---|---|
String getDriverName() | Ќе го врати името на драјверот JDBC што го користиме во нашата Java програма |
String getDriverVersion() | Го враќа бројот на верзијата на драјверот JDBC |
String getUserName() | Го враќа корисничкото име на базата на податоци што ја користиме |
String getDatabaseProductName() | Се враќа името на Базата на податоци што сме ниекористејќи |
String getDatabaseProductVersion() | Го враќа бројот на верзијата на базата на податоци што ја користиме |
ResultSet getSchemas() | Ги враќа имињата на шемите достапни во поврзаната база на податоци |
String getStringFunctions() | Го враќа списокот со функции на низа достапни во поврзаната база на податоци |
String getTimeDateFunctions() | Тоа ја враќа листата на функции за време и датум достапни во поврзаната база на податоци |
String getURL() | Ја враќа URL-то за базата на податоци |
Boolean isReadOnly() | Враќа дали базата на податоци е во режим само за читање |
Boolean supportsBatchUpdates() | Враќа дали базата на податоци поддржува сериски ажурирања |
Boolean supportsSavepoints() | Враќа дали базата на податоци поддржува Savepoints |
Boolean supportsStatementPooling() | Враќа дали базата на податоци поддржува здружување изјави |
Boolean supportsStoredProcedures() | Враќа дали базата на податоци поддржува складирани процедури |
Boolean supportsOuterJoins() | Враќа дали базата на податоци поддржува 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(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStoredProcedures() and supportsOuterJoins() methods in 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 е празен.
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. Видовме и ниекако да ги ажурирате податоците во DB користејќи ResultSet. ResultSetMetadata содржи информации за ResultSet како што се Име на колона, број на колони и така натаму.
DatabaseMetaData содржи информации за базата на податоци.
Интерфејс за изјава
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.
Има 3 типа во ResultSet. Тие се:
- TYPE_FORWARD_ONLY: Тоа е стандардна опција, каде што курсорот се движи од почеток до крај, односно во насока напред.
- TYPE_SCROLL_INSENSITIVE: Во овој тип, ќе го натера курсорот да се движи и во насоки напред и назад. Ако направиме какви било промени во податоците додека ги повторуваме зачуваните податоци, тие нема да се ажурираат во базата на податоци доколку некој ги промени податоците во DB. Бидејќи сетот ги има податоците од времето кога SQL барањето го враќаПодатоци.
- TYPE_SCROLL_SENSITIVE: Слично е на TYPE_SCROLL_INSENSITIVE, разликата е ако некој ги ажурира податоците откако SQL Query ќе ги врати податоците, додека нивното повторување ќе ги одрази промените во базата на податоци.
ResultSet Concurrency
Постојат 2 начини на Concurrency во ResultSet. Тие се:
- ResultSet.CONCUR_READ_ONLY: Тоа е стандардниот режим на истовременост. Можеме да ги читаме податоците само во ResultSet. Ажурирањето не е применливо.
- ResultSet.CONCUR_UPDATABLE: Можеме да ги ажурираме податоците во објектот ResultSet.
Некои бази на податоци не поддржуваат истовремено режим за сите Типови на ResultSet. Во тој случај, треба да провериме дали тие го поддржуваат нашиот посакуван тип и режим на истовременост користејќи го методот supportsResultSetConcurrency().
Методи во интерфејсот ResultSet
Постојат 4 категории на методи ResultSet. Тие се:
- Прво, ќе разговараме за методите за навигација, а потоа ќе продолжиме понатаму.
- Булова апсолутна(int row): Се користи за поместување на курсорот до наведениот ред кој е споменат во параметарот и се враќа true доколку операцијата е успешна, else return false.
- НеважечкиafterLast(): Го прави курсорот ResultSet да се движи по последниот ред.
- Неважечки предFirst(): Го прави курсорот ResultSet да се движи пред првиот ред.
- Булова прва (): Го прави курсорот ResultSet да се премести во првиот ред. Се враќа Точно ако операцијата е успешна, друго Неточно.
- Булова последна(): Го прави курсорот ResultSet да се премести во последниот ред. Се враќа Точно ако операцијата е успешна, друго Неточно.
- Булова следно(): Го прави курсорот ResultSet да се премести во следниот ред. Се враќа True ако има повеќе записи и False ако нема повеќе записи.
- Boolean previous(): Го прави курсорот ResultSet да се премести во претходниот ред. Се враќа Точно ако операцијата е успешна, друго Неточно.
- Булова релативна(): Го поместува курсорот до дадениот број редови или во насока напред или назад.
- Int getRow(): Го враќа тековниот број на ред што објектот ResultSet го покажува сега.
- Void moveToCurrentRow(): Го поместува курсорот назад во тековниот ред ако моментално е во редот за вметнување.
- Void moveToInsertRow(): Го поместува курсорот до конкретниот ред за да го вметне редот во базата на податоци. Се сеќава на моменталната локација на курсорот. Така, можеме да го користиме методот moveToCurrentRow() за да го преместиме курсорот во тековниот ред по вметнувањето.
- int getInt (int ColumnIndex): Се користи за да се добие вредноста на наведената колона Index како тип на податоци int.
- float getFloat(int ColumnIndex): Се користи за да се добие вредноста на наведената колона Индекс како пловечки тип на податок.
- java.sql.dategetDate(int ColumnIndex): Се користи за да се добие вредноста на наведената колона Index како вредност на датумот.
- int getInt(String ColumnName): Се користи за да се добие вредноста на наведената колона како тип на податоци int.
- float getFloat(String ColumnName): Се користи за да се добие вредноста на наведената колона како float тип на податоци.
- Java.sql.date getDate(String ColumnName): Се користи за да се добие вредноста на наведената колона како вредност на датумот.
- void updateInt(int ColumnIndex, int Value): Се користи за ажурирање на вредноста на наведената колона Индекс со int вредност.
- void updateFloat(int ColumnIndex, float f): Се користи за ажурирање на вредноста на наведената колона Index со float вредност.
- void updateDate(int ColumnIndex, Date d): Се користи за ажурирање на вредноста на наведената колона Индекссо вредност на датумот.
- void updateInt(String ColumnName, int Value): Се користи за ажурирање на вредноста на наведената колона со дадената int вредност.
- void updateFloat(String ColumnName, float f): Се користи за ажурирање на вредноста на наведената колона со дадената float вредност.
- Java.sql.date getDate(String ColumnName): Се користи за ажурирање на вредноста на наведената колона со дадената вредност на датумот.
- void close(): Се користи за затворање на примерокот ResultSet и ослободување наресурси поврзани со примерот ResultSet.
- ResultSetMetaData getMetaData(): Ја враќа инстанцата ResultSetMetaData. Има информации за видот и својството на колоните од излезот на барањето. Ќе дознаеме повеќе за ResultSetMetaData во следниот дел.
#1) Навигациски методи
Овој метод се користи за движење на курсорот околу базата на податоци.
Во ова упатство,сите програми се напишани во Java. Ја користевме верзијата Java 8 и Oracle DB.
>>Можете да го преземете софтверот Oracle од овде
>>Можете да ја преземете верзијата 8 на Java од овде
Таа го има чекор-по-чекор процесот на инсталација на 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point current row System.out.println(" Current Row = " + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
ИЗЛЕЗ:
Податоци во табелата со детали за вработениот
Објаснување:
Во горната програма ја имплементиравме првата(), last(), beforeFirst(), afterLast(), next( ), претходни(), апсолутни(), релативни() и getRow() методи во ResultSet. За да ги користиме овие методи, ги поставивме вредностите ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE во методот PredeStatement.
Следно, ќе разговараме за тоа кои се методите на Getter во ResultSet:
#2) Getter Methods
ResultSet ги зачува податоците од табелата од базата на податоци. Методите на Getter се користат за да се добијат вредностите на табелата во ResultSet. За тоа, треба да ја пренесеме или вредноста на индексот на колоната или Името на колоната.
Следниве се методите за добивање во ResultSet:
Постојат методи за добивање за сите примитивни типови на податоци (булови, долги, двојни) и String исто така во интерфејсот ResultSet. Можеме да добиеме низа и бинарен тип на податоци, исто така, од Базата на податоци. Има методи и за тоа.
#3) Методи за поставување/надградувач
Можеме да ја ажурираме вредноста во базата на податоци користејќи методи на ResultSet Updater. Слично е на методите на Getter, но тука треба да ги пренесеме вредностите/податоците за одредената колона за ажурирање во базата на податоци.
Следниве се методите за ажурирање во ResultSet:
Постојат методи за ажурирање за сите примитивни типови податоци (булова, долга, двојна) и Стринг исто така во интерфејсот 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("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
ИЗЛЕЗ:
Објаснување:
Во горната програма она што го направивме е прво, складиравме податоците од табелата Employee_details во објектот ResultSet користејќи го барањето SELECT. Потоа, ги прикажавме податоците од последниот ред во табелата со вработени_детали користејќи го методот last() на ResultSet. Методот moveToInsertRow() го прави курсорот да го насочи тековниот ред, сега тековниот ред е последниот ред.
updateXXX()methods што се користат за ажурирање на вредностите на редот и методот insertRow() ги вметнува податоците во нов ред. Користејќи го методот absolute(), го направивме курсорот да покажува на 5-тиот ред. Употребен е методот UpdateInt() за ажурирање на EMPNUM со нов ID на петтиот вработен во табелата. После тоа, се прикажуваат податоците за да се провери дали EMPNUM е ажуриран или не.
Направете го курсорот да го насочи последниот ред од табелата користејќи last() и го прикажа. За да ја извршиме горната логика, треба да ги поставиме вредностите ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE во методот preparateStatement.
#4) Разни методи
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:
Име на методот | Опис |
---|---|
Низа getColumnName(int колона) | Го враќа името на колоната на одредената колона |
Низа getColumnTypeName(int колона) | Го враќа типот на податоци на одредена колона што ја доневме како параметар |
String getTableName(int колона) | Го враќа името на табелата на колоната |
Стринг getSchemaName(int колона) | Тоа |