JDBC ResultSet. Ինչպես օգտագործել Java ResultSet-ը տվյալների առբերման համար

Այս ձեռնարկը բացատրում է, թե ինչպես օգտագործել 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 օբյեկտ: Պատրաստված Հայտարարություն, ևվերադարձնում է սյունակի աղյուսակի սխեմայի անունը int getColumnCount() Վերադարձնում է ResultSet-ի սյունակների թիվը բուլյան isAutoIncrement(int Column) Այն վերադարձնում է true, եթե տվյալ սյունակը Auto Increment է, այլապես false բուլյան isCaseSensitive(int Column) Այն վերադարձնում է true, եթե տվյալ սյունակը մեծատառերի զգայուն է, այլապես 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)); } } }

ԱՐԴՅՈՒՆՔ:

Բացատրություն`

Վերոնշյալ ծրագրում, մենք 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-ն պարունակում է տվյալների բազայի տեղեկատվություն:

>

CallableStatement ինտերֆեյսները Statement միջերեսի ենթաինտերֆեյսներն են:

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 տեսակ: Դրանք են՝

  1. TYPE_FORWARD_ONLY: Դա լռելյայն տարբերակն է, որտեղ կուրսորը շարժվում է սկզբից մինչև վերջ, այսինքն՝ առաջ ուղղությամբ:
  2. TYPE_SCROLL_INSENSITIVE. Այս տեսակի դեպքում այն ​​կստիպի կուրսորը շարժվել ինչպես առաջ, այնպես էլ հետընթաց ուղղությամբ: Եթե ​​մենք որևէ փոփոխություն կատարենք տվյալների մեջ՝ պահպանված տվյալները կրկնելիս, այն չի թարմացվի տվյալների հավաքածուում, եթե որևէ մեկը փոխի տվյալները DB-ում: Քանի որ տվյալների բազան ունի տվյալներ այն պահից, երբ SQL հարցումը վերադարձնում էՏվյալներ:
  3. TYPE_SCROLL_SENSITIVE. Այն նման է TYPE_SCROLL_INSENSITIVE-ին, տարբերությունն այն է, որ որևէ մեկը թարմացնում է տվյալները SQL հարցումից հետո տվյալները վերադարձնելուց հետո, մինչդեռ դրանք կրկնելը կարտացոլի տվյալների հավաքածուի փոփոխությունները:

ResultSet Concurrency

ResultSet-ում կա միաժամանակության 2 եղանակ: Դրանք են՝

  1. ResultSet.CONCUR_READ_ONLY: Դա կանխադրված համաժամանակյա ռեժիմն է: Մենք կարող ենք կարդալ միայն ResultSet-ի տվյալները: Թարմացումը կիրառելի չէ:
  2. ResultSet.CONCUR_UPDATABLE: Մենք կարող ենք թարմացնել ResultSet օբյեկտի տվյալները:

Որոշ տվյալների բազաներ չեն աջակցում համաժամանակյա ռեժիմը բոլորի համար: ResultSet տեսակները. Այդ դեպքում մենք պետք է ստուգենք՝ արդյոք նրանք աջակցում են մեր ցանկալի տիպին և միաժամանակյա ռեժիմին՝ օգտագործելով supportsResultSetConcurrency() մեթոդը:

Մեթոդներ ResultSet ինտերֆեյսում

Կա ResultSet մեթոդների 4 կատեգորիա: Դրանք են՝

  1. Նավիգացիոն մեթոդներ
  2. Գեթերի մեթոդներ
  3. Սեթերի մեթոդներ
  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 սյունակ) Այն
Գնալ վեր