Бұл оқулық деректерді шығарып алу үшін JDBC ResultSet пайдалану жолын түсіндіреді. Сондай-ақ біз мысалдар арқылы ResultSetMetaData және DatabaseMetaData интерфейстері туралы білеміз:
JDBC DriverManager оқулығында JDBC оқулық сериясының , біз JDBC пайдалану жолын білдік. DriverManager және оның әдістері, Java қолданбаларындағы JDBC PreparedStatement.
Бұл оқулықта біз JDBC ішіндегі қалған интерфейстерді талқылаймыз. Біз алдыңғы оқулықтарымызда Statement, PreparedStatement және CallableStatement интерфейстерін қарастырдық.
Мұнда біз JDBC ResultSet, ResultSetMetaData және DatabaseMetaData интерфейстері, олардың әдістері және Java бағдарламасындағы әдістерді пайдалану жолы туралы білеміз.
JDBC ResultSet интерфейсі
ResultSet интерфейсі java.sql бумасында бар. Ол Java бағдарламасында SQL операторларын орындағаннан кейін деректер қоры кестесінен қайтарылатын деректерді сақтау үшін қолданылады. ResultSet нысаны нәтиже деректерінде курсор нүктесін сақтайды. Әдепкіде курсор нәтиже деректерінің бірінші жолының алдында орналасады.
Келесі() әдісі курсорды алға бағытта келесі орынға жылжыту үшін қолданылады. Басқа жазбалар болмаса, ол FALSE қайтарады. Ол кез келген мәлімдеме нысандарын пайдаланып executeQuery() әдісін шақыру арқылы деректерді шығарады. Бұл мәлімдеме немесе PreparedStatement немесе CallableStatement нысаны болуы мүмкін. PreparedStatement жәнебаған кестесінің схема атауын қайтарады
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, Database нұсқасы және т>
Осы жерде 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()); } }
OUTPUT:
Түсіндіру:
Жоғарыда аталған бағдарламада біз getDriverName(), getDriverVersion() қолдандық/енгіздік. , getUserName(), getDatabaseProductVersion(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStored(J)Pro және әдістері DatabaseMetaData интерфейсі.
Ескерту керек нүктелер:
- JDBC ResultSet интерфейсі дерекқордағы деректерді сақтау және оны біздің Java бағдарламамызда пайдалану үшін пайдаланылады.
- Сондай-ақ updateXXX() әдістерін пайдаланып деректерді жаңарту үшін ResultSet пайдалана аламыз.
- ResultSet нысаны курсорды нәтиже деректерінің бірінші жолының алдында көрсетеді. Next() әдісін қолдану арқылы біз ResultSet арқылы қайталай аламыз.
- ResultSet нысанында әрі қарай жылжу үшін бізде ResultSet навигациялық әдістері бар
- ResultMetaData сияқты ResultSet туралы қосымша ақпарат алу үшін пайдаланылады. баған атауы, бағандар саны, бағанның деректер түрі және т.б.
- DatabaseMetData біз қосылған дерекқор туралы ақпаратты алу үшін пайдаланылады
Жиі қойылатын сұрақтар
1-сұрақ) Нені пайдаланадыResultSet?
Жауап: ResultSet ДБ-дан деректерді сақтау және алу үшін қолданылады. executeQuery() әдісі орындалса, ол ResultSet нысанын қайтарады. Логиканы орындау үшін бағдарламамызда сол ResultSet объектісін пайдалана аламыз.
2-сұрақ) ResultSet бос немесе бос емес екенін қалай тексеруге болады?
Жауап: IsResultSet Empty параметрін тексеру үшін length(), size() сияқты алдын ала анықталған әдістер жоқ. Қайталау үшін next() әдісін пайдалана аламыз және егер ол True мәнін қайтарса, онда ол бос емес, егер ол False мәнін қайтарса, ResultSet бос дегенді білдіреді.
Q #3) ResultSet болуы мүмкін бе? нөл болуы мүмкін бе?
Жауап: Жоқ, executeQuery() әдісі ешқашан нөл болмауы мүмкін ResultSet нысанын қайтарады.
4-сұрақ) Жаңартылатын ResultSet дегеніміз не?
Жауап: Жаңартылатын ResultSet нысаны бағандағы деректерді жаңарту, бағандарға деректерді енгізу және жолдарды жою үшін пайдаланылады. ResultSet-ті жаңартылатын етіп жасау үшін, біз айналдыру түрін сезімтал немесе сезімтал емес етіп, ал CONCUR түрін жаңартылатын етіп жасауымыз керек.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
С №5) Қосылған дерекқор атауын қалай алуға болады?
Жауап: Біз DatabaseMetaData нысанының getDatabaseProductName() әдісін пайдалана аламыз.
Қорытынды
Осы оқулықта біз не екенін талқыладық. ResultSet, ResultSetMetaData және DatabaseMetaData интерфейстері және олардың JDBC бағдарламаларында жиі қолданылатын маңызды әдістері. Біз де көрдік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 түрлері
Әдепкіде біз алға бағытта орындалған SQL мәлімдемесінің шығысы ретінде қайтарылған ResultSet ішіндегі деректерді/мәндерді қайталай аламыз. Біз Scrollable ResultSet көмегімен мәндерді басқа бағытта қайталай аламыз. Біз Statement, PreparedStatement және CallableStatement нысандарын жасау кезінде ResultSet түрі мен параллельділігін көрсете аламыз.
ReultSet-те 3 түрі бар. Олар:
- ТЕК_АЛҒА_ТҮР: Бұл курсор басынан аяғына, яғни алға бағытта қозғалатын әдепкі опция.
- TYPE_SCROLL_INSENSITIVE: Бұл түрде ол курсорды алға және кері бағытта жылжытады. Сақталған деректерді итерациялау кезінде деректерге қандай да бір өзгерістер енгізсек, егер біреу ДБ-дағы деректерді өзгертсе, ол деректер жинағында жаңартылмайды. Деректер жиынында SQL сұрауы қайтарған кезден бастап деректер болғандықтанДеректер.
- TYPE_SCROLL_SENSITIVE: Ол TYPE_SCROLL_INSENSITIVE сияқты, айырмашылығы SQL сұрауы деректерді қайтарғаннан кейін деректерді кез келген адам жаңарса, қайталау кезінде деректер жиынындағы өзгерістер көрсетіледі.
ResultSet Concurrency
ReultSet ішінде параллельділіктің 2 режимі бар. Олар:
- ResultSet.CONCUR_READ_ONLY: Бұл әдепкі параллельдік режим. Біз тек ResultSet ішіндегі деректерді оқи аламыз. Жаңарту қолданылмайды.
- ResultSet.CONCUR_UPDATABLE: Біз ResultSet нысанындағы деректерді жаңарта аламыз.
Кейбір дерекқорлар барлығы үшін параллельдік режимін қолдамайды. ResultSet түрлері. Бұл жағдайда supportsResultSetConcurrency() әдісі арқылы олардың қалаған түрін және параллельділік режимін қолдайтынын тексеру керек.
ResultSet интерфейсіндегі әдістер
ResultSet әдістерінің 4 санаты бар. Олар:
- Навигациялық әдістер
- Гетер әдістері
- Сетер әдістері
- Әртүрлі әдістер
Алдымен біз Навигациялық әдістерді талқылаймыз, содан кейін әрі қарай жылжимыз.
#1) Навигациялық әдістер
Бұл әдіс курсорды деректер жиынының айналасында жылжыту үшін қолданылады.
- Логикалық абсолютті(int row): Ол курсорды параметрде айтылған көрсетілген жолға жылжыту үшін пайдаланылады және операция сәтті орындалса, шын мәнін қайтарады, әйтпесе жалған мәнін қайтарады.
- ЖарамсызafterLast(): Ол ResultSet курсорын соңғы жолдан кейін жылжытады.
- Void beforeFirst(): Ол ResultSet курсорын бірінші жолдың алдына жылжытады.
- Логикалық бірінші(): Ол ResultSet курсорын бірінші жолға жылжытады. Егер операция сәтті орындалса, ол True мәнін қайтарады, әйтпесе False.
- Логикалық last(): Бұл нәтиже жиынының курсорын соңғы жолға жылжытады. Әрекет сәтті орындалса, ол True мәнін қайтарады, әйтпесе False.
- Логикалық келесі(): Ол нәтиже жиынын курсорды келесі жолға жылжытуға мүмкіндік береді. Ол көп жазбалар болса, True мәнін, ал басқа жазбалар жоқ болса, False мәнін қайтарады.
- Логикалық алдыңғы(): Ол нәтижелер жиынын курсорды алдыңғы жолға жылжытады. Операция сәтті орындалса, ол True мәнін қайтарады, әйтпесе False.
- Логикалық салыстырмалы(): Ол курсорды алға немесе кері бағытта берілген жолдар санына жылжытады.
- Int getRow(): Ол қазір ResultSet нысаны көрсетіп тұрған ағымдағы жол нөмірін қайтарады.
- Void moveToCurrentRow(): Ол курсорды кері орынға жылжытады. ағымдағы жол, егер ол қазір кірістіру жолында болса.
- Void moveToInsertRow(): Ол жолды Дерекқорға кірістіру үшін курсорды арнайы жолға жылжытады. Ол курсордың ағымдағы орнын есте сақтайды. Енгізілгеннен кейін курсорды ағымдағы жолға жылжыту үшін moveToCurrentRow() әдісін пайдалана аламыз.
Бұл оқулықта,барлық бағдарламалар Java тілінде жазылған. Біз Java 8 нұсқасын және Oracle DB қолдандық.
>>Осы жерден Oracle бағдарламалық құралын жүктеп алуға болады
>>Жаваның 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 \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(); } } }
OUTPUT:
Қызметкерлер_мәліметтері кестесіндегі деректер
Түсіндіру:
Жоғарыдағы бағдарламада біз first(), last(), beforeFirst(), afterLast(), next( орындадық. ), ResultSet ішіндегі алдыңғы(), абсолютті(), салыстырмалы() және getRow() әдістері. Бұл әдістерді қолдану үшін preparStatement әдісінде ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE мәндерін орнатамыз.
Одан кейін ResultSet ішіндегі Getter әдістерінің не екенін талқылаймыз:
#2) Getter Methods
ResultSet деректер қорынан кестенің деректерін сақтады. Getter әдістері ResultSet ішіндегі кестенің мәндерін алу үшін қолданылады. Ол үшін бағанның Индекс мәнін немесе Баған атауын беруіміз керек.
Төмендегілер ResultSet ішіндегі алу әдістері:
- int getInt (int ColumnIndex): Ол Index көрсетілген бағанның мәнін int деректер түрі ретінде алу үшін қолданылады.
- float getFloat(int ColumnIndex): Ол алу үшін пайдаланылады. қалқымалы деректер түрі ретінде көрсетілген индекс бағанының мәні.
- java.sql.dategetDate(int ColumnIndex): Ол күн мәні ретінде көрсетілген Индекс бағанының мәнін алу үшін пайдаланылады.
- int getInt(String ColumnName): Ол алу үшін пайдаланылады. int деректер түрі ретінде көрсетілген бағанның мәні.
- float getFloat(String ColumnName): Ол қалқымалы деректер түрі ретінде көрсетілген бағанның мәнін алу үшін пайдаланылады.
- Java.sql.date getDate(String ColumnName): Ол көрсетілген бағанның мәнін күн мәні ретінде алу үшін пайдаланылады.
Гетер әдістері бар. барлық қарабайыр деректер түрлеріне (логикалық, ұзын, қос) және жолға, сонымен қатар 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): Ол берілген күн мәнімен көрсетілген бағанның мәнін жаңарту үшін пайдаланылады.
Барлық қарапайым деректер түрлері (логикалық, ұзын, қос) және жол үшін Жаңартқыш әдістері бар сонымен қатар ResultSet интерфейсінде.
Жаңарту әдістері тек ResultSet нысанындағы деректерді жаңартады. Мәндер DB-де insertRow немесе updateRow әдісін шақырғаннан кейін жаңартылады.
Жолды жаңарту:
Біз updateX() әдістерін шақыру арқылы қатардағы деректерді жаңарта аламыз. , баған атауын немесе индексін және жаңартылатын мәндерді беру. updateX әдісінде X орнына кез келген деректер түрін пайдалана аламыз. Осы уақытқа дейін біз 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("\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(); } } }
ШЫҒЫС:
Түсіндіру:
Жоғарыдағы бағдарламада біз бірінші орындаған нәрсе, біз сақтадық. ТАҢДАУ сұрауы арқылы ResultSet нысанындағы Employee_details кестесінің деректері. Содан кейін біз ResultSet бағдарламасының last() әдісін қолданып, соңғы жолдың деректерін staff_details кестесінде көрсеттік. moveToInsertRow() әдісі курсорды ағымдағы жолды меңзейді, енді ағымдағы жол соңғы жол болып табылады.
updateXXX() жолға мәндерді жаңарту үшін пайдаланылады және insertRow() әдісі деректерді кірістірілген жаңа қатар. Absolyut() әдісін қолданып, курсорды 5-ші жолды көрсететін етіп жасадық. UpdateInt() әдісі EMPNUM-ді кестедегі 5-ші қызметкердің жаңа идентификаторымен жаңарту үшін пайдаланылды. Осыдан кейін EMPNUM жаңартылғанын немесе жаңартылмағанын тексеру үшін деректер көрсетілді.
Last() арқылы курсорды кестенің соңғы жолын көрсететін етіп жасап, оны көрсетті. Жоғарыда келтірілген логиканы орындау үшін, prepreStatement әдісінде ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE мәндерін орнату керек.
№4) Әртүрлі әдістер
- void close(): Ол ResultSet данасын жабу және босату үшін пайдаланыладыResultSet данасына байланысты ресурстар.
- ResultSetMetaData getMetaData(): Ол ResultSetMetaData данасын қайтарады. Онда сұрау шығысының бағандарының түрі мен сипаты туралы ақпарат бар. Келесі бөлімде ResultSetMetaData туралы көбірек білеміз.
ResultSetMetaData
Метадеректер дегеніміз не?
Метадеректер деректер туралы деректерді білдіреді. Бұл интерфейсті пайдалану арқылы біз ResultSet туралы қосымша ақпарат аламыз. Ол java.sql бумасында қол жетімді. Әрбір ResultSet нысаны бір ResultSetMetaData нысанымен байланысты.
Бұл нысанда бағанның деректер түрі, баған атауы, бағандар саны, кесте аты, схема атауы және т.б. сияқты бағандардың сипаттары туралы мәліметтер болады. ResultSetMetaData нысанын ResultSet бағдарламасының getMetaData() әдісі арқылы ала аламыз.
ResultSetMetaData синтаксисі:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData интерфейсінің маңызды әдістері:
Әдіс атауы | Сипаттама |
---|---|
GetColumnName(int баған) жолы | Ол белгілі бір бағанның баған атын қайтарады |
GetColumnTypeName(int баған) жолы | Ол бағанның деректер түрін қайтарады. біз параметр ретінде өткізген белгілі бір баған |
GetTableName(int баған) жолы | Ол бағанның кесте атын қайтарады |
GetSchemaName жолы(int бағаны) | Ол |