Այս ձեռնարկը բացատրում է, թե ինչպես օգտագործել JDBC ResultSet տվյալները առբերելու համար: Մենք նաև կիմանանք ResultSetMetaData և DatabaseMetaData ինտերֆեյսների մասին օրինակներով.
JDBC ուսուցողական շարքի JDBC DriverManager ձեռնարկում մենք սովորեցինք, թե ինչպես օգտագործել JDBC-ն: DriverManager-ը և դրա մեթոդները, JDBC PreparedStatement Java հավելվածներում:
Այս ձեռնարկում մենք կքննարկենք JDBC-ի մնացած ինտերֆեյսները: Մեր նախորդ ձեռնարկներում մենք անդրադարձել ենք Statement, PreparedStatement և CallableStatement ինտերֆեյսներին:
Այստեղ մենք կծանոթանանք JDBC ResultSet, ResultSetMetaData և DatabaseMetaData ինտերֆեյսներին, դրանց մեթոդներին և ինչպես օգտագործել մեթոդները Java ծրագրում:
JDBC ResultSet ինտերֆեյս
ResultSet ինտերֆեյսը առկա է java.sql փաթեթում: Այն օգտագործվում է այն տվյալների պահպանման համար, որոնք վերադարձվում են տվյալների բազայի աղյուսակից Java ծրագրում SQL հայտարարությունների կատարումից հետո: ResultSet-ի օբյեկտը պահպանում է կուրսորի կետը արդյունքի տվյալների վրա: Լռելյայնորեն, կուրսորը տեղադրվում է արդյունքների տվյալների առաջին տողից առաջ:
Next() մեթոդն օգտագործվում է կուրսորը հաջորդ դիրք տեղափոխելու համար դեպի առաջ ուղղությամբ: Այն կվերադարձնի FALSE, եթե այլևս գրառումներ չլինեն: Այն առբերում է տվյալները՝ կանչելով executeQuery() մեթոդը՝ օգտագործելով հայտարարության օբյեկտներից որևէ մեկը։ Այն կարող է լինել Statement կամ 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)); } } }
ԱՐԴՅՈՒՆՔ:
Բացատրություն`
Վերոնշյալ ծրագրում, մենք ResultSetMetaData ինտերֆեյսում ներդրել ենք getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() և getSchemaName() մեթոդները:
DatabaseMetaData
DatabaseMetaData տվյալների բազայի ինտերֆեյսը տալիս է նման տեղեկատվություն տվյալների բազայի մասին: DatabaseName, Database տարբերակը և այլն:
DatabaseMetaData ինտերֆեյսի կարևոր մեթոդներ.
Մեթոդի անվանումը | Նկարագրություն |
---|---|
String getDriverName() | Այն կվերադարձնի JDBC վարորդի անունը, որը մենք օգտագործում ենք մեր Java ծրագրում |
String getDriverVersion() | Այն վերադարձնում է JDBC վարորդի տարբերակի համարը |
String getUserName() | Այն վերադարձնում է տվյալների բազայի օգտանունը, որը մենք օգտագործում ենք |
String getDatabaseProductName() | Վերադարձնում է տվյալների բազայի անվանումը, որը մենք ենքօգտագործելով |
String getDatabaseProductVersion() | Այն վերադարձնում է տվյալների բազայի տարբերակի համարը, որը մենք օգտագործում ենք |
ResultSet getSchemas() | Այն վերադարձնում է միացված տվյալների բազայում հասանելի սխեմաների անունները |
String getStringFunctions() | Այն վերադարձնում է միացված տվյալների բազայում հասանելի տողային ֆունկցիաների ցանկը |
String getTimeDateFunctions() | Այն վերադարձնում է միացված տվյալների բազայում հասանելի ժամի և ամսաթվի գործառույթների ցանկը |
String getURL() | Վերադարձնում է տվյալների բազայի URL-ը |
Բուլյան isReadOnly() | Վերադարձնում է արդյոք տվյալների բազան միայն կարդալու ռեժիմում է |
Boolean supportsBatchUpdates() | Այն ցույց է տալիս, թե արդյոք տվյալների բազան աջակցում է խմբաքանակի թարմացումներին |
Boolean supportsSavepoints() | Վերադարձնում է արդյոք տվյալների բազան աջակցում է Savepoints |
Boolean supportsStatementPooling() | Նա վերադարձնում է արդյոք տվյալների բազան աջակցում է հայտարարությունների միավորում |
Boolean supportsStoredProcedures() | Այն ցույց է տալիս, թե արդյոք տվյալների բազան աջակցում է Պահված ընթացակարգերը |
Բուլյան 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()); } }
OUTPUT:
Բացատրություն.
Վերոնշյալ ծրագրում մենք օգտագործել/իրագործել ենք getDriverName(), getDriverVersion() , Getusername (), GetDatabaseProductname (), GetDatabaseProductsion (), Getstring գործառույթներ (), gettimeDatefuncts (), supportsbatchupdates (), supportsaveatspooling (), supportsavePooling (), supportsserpointures () մեթոդներ DatabaseMetaData ինտերֆեյս:
Ուշադրության արժանի կետեր.
- JDBC ResultSet ինտերֆեյսը օգտագործվում է տվյալների բազայից տվյալները պահելու և դրանք մեր Java ծրագրում օգտագործելու համար:
- Մենք կարող ենք նաև օգտագործել ResultSet տվյալները թարմացնելու համար՝ օգտագործելով updateXXX() մեթոդները:
- ResultSet օբյեկտը ցույց է տալիս կուրսորը արդյունքների տվյալների առաջին տողից առաջ: Օգտագործելով next() մեթոդը, մենք կարող ենք կրկնել ResultSet-ի միջոցով:
- Մենք ResultSet-ի նավիգացիոն մեթոդներ ունենք ResultSet օբյեկտում ավելի առաջ շարժվելու համար
- ResultMetaData-ն օգտագործվում է ResultSet-ի մասին ավելի շատ տեղեկություններ ստանալու համար, ինչպես օրինակ. սյունակի անվանումը, սյունակների քանակը, սյունակի տվյալների տեսակը և այլն:
- DatabaseMetData-ն օգտագործվում է տվյալների բազայի մասին տեղեկատվություն ստանալու համար, որը մենք կապել ենք
Հաճախակի տրվող հարցեր
Հ #1) Ինչի՞ օգուտն էResultSet?
Պատասխան. ResultSet-ն օգտագործվում է DB-ից տվյալները պահելու և առբերելու համար: Երբ 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) Ինչպե՞ս ստանալ տվյալների բազայի անունը, որը միացված է:
Պատասխան. Մենք կարող ենք օգտագործել DatabaseMetaData օբյեկտի getDatabaseProductName() մեթոդը:
Եզրակացություն
Այս ձեռնարկում մենք քննարկել ենք, թե որոնք են ResultSet, ResultSetMetaData և DatabaseMetaData միջերեսները և դրանց կարևոր մեթոդները, որոնք սովորաբար օգտագործվում են JDBC ծրագրերում: Մենք էլ ենք տեսելինչպես թարմացնել տվյալները DB-ում ResultSet-ի միջոցով: ResultSetMetadata-ն պարունակում է տեղեկատվություն ResultSet-ի մասին, ինչպիսիք են Սյունակի անունը, սյունակների քանակը և այլն:
DatabaseMetaData-ն պարունակում է տվյալների բազայի տեղեկատվություն:
Statement Interface
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement Interface
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Մենք կարող ենք օգտագործեք 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. Այս տեսակի դեպքում այն կստիպի կուրսորը շարժվել ինչպես առաջ, այնպես էլ հետընթաց ուղղությամբ: Եթե մենք որևէ փոփոխություն կատարենք տվյալների մեջ՝ պահպանված տվյալները կրկնելիս, այն չի թարմացվի տվյալների հավաքածուում, եթե որևէ մեկը փոխի տվյալները DB-ում: Քանի որ տվյալների բազան ունի տվյալներ այն պահից, երբ SQL հարցումը վերադարձնում էՏվյալներ:
- TYPE_SCROLL_SENSITIVE. Այն նման է TYPE_SCROLL_INSENSITIVE-ին, տարբերությունն այն է, որ որևէ մեկը թարմացնում է տվյալները SQL հարցումից հետո տվյալները վերադարձնելուց հետո, մինչդեռ դրանք կրկնելը կարտացոլի տվյալների հավաքածուի փոփոխությունները:
ResultSet Concurrency
ResultSet-ում կա միաժամանակության 2 եղանակ: Դրանք են՝
- ResultSet.CONCUR_READ_ONLY: Դա կանխադրված համաժամանակյա ռեժիմն է: Մենք կարող ենք կարդալ միայն ResultSet-ի տվյալները: Թարմացումը կիրառելի չէ:
- ResultSet.CONCUR_UPDATABLE: Մենք կարող ենք թարմացնել ResultSet օբյեկտի տվյալները:
Որոշ տվյալների բազաներ չեն աջակցում համաժամանակյա ռեժիմը բոլորի համար: ResultSet տեսակները. Այդ դեպքում մենք պետք է ստուգենք՝ արդյոք նրանք աջակցում են մեր ցանկալի տիպին և միաժամանակյա ռեժիմին՝ օգտագործելով supportsResultSetConcurrency() մեթոդը:
Մեթոդներ ResultSet ինտերֆեյսում
Կա ResultSet մեթոդների 4 կատեգորիա: Դրանք են՝
- Նավիգացիոն մեթոդներ
- Գեթերի մեթոդներ
- Սեթերի մեթոդներ
- Տարբեր մեթոդներ
Նախ, մենք կքննարկենք նավիգացիոն մեթոդները, այնուհետև կշարժվենք հետագա:
#1) Նավիգացիոն մեթոդներ
Այս մեթոդը օգտագործվում է կուրսորը տվյալների բազայի շուրջ տեղափոխելու համար:
- Բուլյան բացարձակ (int տող): Այն օգտագործվում է կուրսորը տեղափոխելու համար նշված տող, որը նշված է պարամետրում և վերադարձնում է true, եթե գործողությունը հաջող է, այլապես վերադարձը false:
- ԱնվավերafterLast(): Այն ստիպում է ResultSet կուրսորը տեղափոխել վերջին տողից հետո:
- Vid beforeFirst(): Այն ստիպում է ResultSet կուրսորը տեղափոխել առաջին տողից առաջ:
- Բուլյան առաջին (): Այն ստիպում է ResultSet կուրսորը տեղափոխել առաջին տող: Այն վերադարձնում է True, եթե գործողությունը հաջող է, այլապես False:
- Boolean last(): Այն ստիպում է ResultSet կուրսորը տեղափոխել վերջին տող: Այն վերադարձնում է True, եթե գործողությունը հաջող է, այլապես False:
- Բուլյան հաջորդ(): Այն ստիպում է 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 \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:
Տվյալներ Employee_details աղյուսակում
Բացատրություն.
Վերոնշյալ ծրագրում մենք իրականացրել ենք first(), last(), beforeFirst(), afterLast(), next( ), նախորդ(), բացարձակ(), հարաբերական() և getRow() մեթոդներ ResultSet-ում: Այս մեթոդներն օգտագործելու համար մենք նախադրել ենք ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE արժեքները նախապատրաստման մեթոդում:
Այնուհետև մենք կքննարկենք, թե որոնք են Getter մեթոդները ResultSet-ում.
#2) Getter Methods
ResultSet-ը պահել է աղյուսակի տվյալները Տվյալների բազայից: Ստացողի մեթոդներն օգտագործվում են ResultSet-ում աղյուսակի արժեքները ստանալու համար: Դրա համար մենք պետք է փոխանցենք կամ սյունակի ինդեքսի արժեքը կամ սյունակի անունը:
Հետևյալը ResultSet-ում ստացող մեթոդներն են.
- int getInt (int ColumnIndex): Այն օգտագործվում է նշված սյունակի Index արժեքը ստանալու համար որպես int տվյալների տեսակ:
- float getFloat(int ColumnIndex): Այն օգտագործվում է ստանալու համար: նշված սյունակի Index արժեքը որպես float տվյալների տեսակ:
- java.sql.dategetDate(int ColumnIndex): Այն օգտագործվում է նշված սյունակի Index արժեքը ստանալու համար որպես ամսաթվի արժեք:
- int getInt(String ColumnName): Այն օգտագործվում է ստանալու համար: նշված սյունակի արժեքը որպես int տվյալների տեսակ:
- float getFloat(String ColumnName): Այն օգտագործվում է նշված սյունակի արժեքը որպես float տվյալների տեսակ ստանալու համար:
- Java.sql.date getDate(String ColumnName): Այն օգտագործվում է նշված սյունակի արժեքը որպես ամսաթվի արժեք ստանալու համար:
Կան ստացողի մեթոդներ բոլոր պարզունակ տվյալների տեսակների համար (բուլյան, երկար, կրկնակի) և String նաև ResultSet ինտերֆեյսում: Տվյալների զանգված և երկուական տեսակ կարող ենք ստանալ նաև Տվյալների բազայից։ Այն ունի նաև դրա համար մեթոդներ:
#3) Setter/Updater Methods
Մենք կարող ենք թարմացնել արժեքը տվյալների բազայում՝ օգտագործելով ResultSet Updater մեթոդները: Այն նման է Getter մեթոդներին, բայց այստեղ մենք պետք է փոխանցենք արժեքները/տվյալները տվյալ սյունակի համար տվյալների բազայում թարմացնելու համար:
Հետևյալն են ResultSet-ի թարմացման մեթոդները.
- void updateInt(int ColumnIndex, int Value): Այն օգտագործվում է նշված սյունակի Index արժեքը int արժեքով թարմացնելու համար:
- void updateFloat(int ColumnIndex, float f): Այն օգտագործվում է նշված սյունակի Index արժեքը float արժեքով թարմացնելու համար:
- void updateDate(int ColumnIndex, Date d): Այն օգտագործվում է նշված սյունակի Index-ի արժեքը թարմացնելու համարամսաթվի արժեքով:
- void updateInt(String ColumnName, int Value): Այն օգտագործվում է նշված սյունակի արժեքը տվյալ int արժեքով թարմացնելու համար:
- void updateFloat(String ColumnName, float f): Այն օգտագործվում է նշված սյունակի արժեքը տվյալ float արժեքով թարմացնելու համար:
- Java.sql.date getDate(String ColumnName): Այն օգտագործվում է նշված սյունակի արժեքը տվյալ ամսաթվի արժեքով թարմացնելու համար:
Կան թարմացնող մեթոդներ բոլոր պարզունակ տվյալների տեսակների համար (բուլյան, երկար, կրկնակի) և լարային: նաև ResultSet միջերեսում:
Updater մեթոդները պարզապես թարմացնում են ResultSet օբյեկտի տվյալները: Արժեքները կթարմացվեն DB-ում insertRow կամ updateRow մեթոդը կանչելուց հետո:
Տողերի թարմացում.
Մենք կարող ենք անընդմեջ թարմացնել տվյալները՝ զանգահարելով updateX() մեթոդները: , փոխանցելով սյունակի անունը կամ ինդեքսը և արժեքները թարմացնելու համար: UpdateX մեթոդում X-ի փոխարեն կարող ենք օգտագործել ցանկացած տվյալների տեսակ: Մինչ այժմ մենք թարմացրել ենք 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(); } } }
ԱՐԴՅՈՒՆՔ:
Բացատրություն.
Վերոնշյալ ծրագրում այն, ինչ մենք արել ենք, նախ պահվել է ResultSet օբյեկտում Employee_details աղյուսակի տվյալները՝ օգտագործելով SELECT հարցումը: Այնուհետև, մենք վերջին տողի տվյալները ցուցադրեցինք staff_details աղյուսակում՝ օգտագործելով ResultSet-ի last() մեթոդը: moveToInsertRow() մեթոդը ստիպում է կուրսորը ցույց տալ ընթացիկ տողը, այժմ ընթացիկ տողը վերջին տողն է:
updateXXX()methods, որն օգտագործվում է արժեքները տողի թարմացման համար, իսկ insertRow() մեթոդը զետեղել է տվյալները նոր շարք. Օգտագործելով absolute() մեթոդը, մենք ստիպեցինք կուրսորը ցույց տալ 5-րդ շարքը: UpdateInt() մեթոդն օգտագործվել է EMPNUM-ը աղյուսակի 5-րդ աշխատակցի նոր ID-ով թարմացնելու համար: Դրանից հետո ցուցադրվում են տվյալները՝ ստուգելու, թե արդյոք EMPNUM-ը թարմացվել է, թե ոչ:
Ստացրեք կուրսորը աղյուսակի վերջին տողը մատնանշելու վերջին()-ի միջոցով և ցուցադրեց այն: Վերոնշյալ տրամաբանությունը կատարելու համար մենք պետք է նախապատրաստենք ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE արժեքները preparedStatement մեթոդում:
#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 սյունակ) | Վերադարձնում է տվյալների տեսակը որոշակի սյունակ, որը մենք փոխանցել ենք որպես պարամետր |
String getTableName(int սյունակ) | Այն վերադարձնում է սյունակի աղյուսակի անվանումը |
Տողի getSchemaName(int սյունակ) | Այն |