এই টিউটোৰিয়েলত তথ্য উদ্ধাৰ কৰিবলে JDBC ResultSet কেনেকৈ ব্যৱহাৰ কৰিব লাগে তাক ব্যাখ্যা কৰা হৈছে। আমি উদাহৰণৰ সৈতে ResultSetMetaData আৰু DatabaseMetaData আন্তঃপৃষ্ঠৰ বিষয়েও শিকিম:
JDBC টিউটোৰিয়েল শৃংখলাৰ JDBC DriverManager টিউটোৰিয়েলত, আমি JDBC কেনেকৈ ব্যৱহাৰ কৰিব লাগে শিকিলোঁ DriverManager আৰু ইয়াৰ পদ্ধতিসমূহ, জাভা এপ্লিকেচনসমূহত JDBC PreparedStatement।
এই টিউটোৰিয়েলত, আমি JDBC ত বাকী থকা আন্তঃপৃষ্ঠসমূহৰ বিষয়ে আলোচনা কৰিম। আমি আমাৰ পূৰ্বৰ টিউটোৰিয়েলসমূহত Statement, PreparedStatement, আৰু CallableStatement আন্তঃপৃষ্ঠসমূহ সামৰি লৈছো।
ইয়াত, আমি JDBC ResultSet, ResultSetMetaData, আৰু DatabaseMetaData আন্তঃপৃষ্ঠসমূহৰ বিষয়ে, সিহঁতৰ পদ্ধতিসমূহ আৰু জাভা প্ৰগ্ৰেমত পদ্ধতিসমূহ কেনেকৈ ব্যৱহাৰ কৰিব লাগে শিকিম।
JDBC ResultSet আন্তঃপৃষ্ঠ
ResultSet আন্তঃপৃষ্ঠ java.sql পেকেইজত উপস্থিত। ইয়াক জাভা প্ৰগ্ৰেমত SQL বিবৃতিসমূহ এক্সিকিউট কৰাৰ পিছত ডাটাবেছ টেবুলৰ পৰা ঘূৰাই দিয়া ডাটা সংৰক্ষণ কৰিবলৈ ব্যৱহাৰ কৰা হয়। 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)); } } }
OUTPUT:
ব্যাখ্যা:
ওপৰৰ প্ৰগ্ৰেমত, আমি ResultSetMetaData আন্তঃপৃষ্ঠত getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() আৰু getSchemaName() পদ্ধতি প্ৰণয়ন কৰিছো।
DatabaseMetaData
DatabaseMetaData আন্তঃপৃষ্ঠই Database ৰ বিষয়ে তথ্য দিয়ে ডাটাবেইজৰ নাম, ডাটাবেইচ সংস্কৰণ, ইত্যাদি।
ডাটাবেছমেটাডাটা আন্তঃপৃষ্ঠৰ গুৰুত্বপূৰ্ণ পদ্ধতিসমূহ:
পদ্ধতিৰ নাম | বিৱৰণ |
---|---|
String getDriverName() | ই আমাৰ জাভা প্ৰগ্ৰেমত ব্যৱহাৰ কৰা JDBC ড্ৰাইভাৰৰ নাম ঘূৰাই দিব |
String getDriverVersion() | ই JDBC ড্ৰাইভাৰ সংস্কৰণ সংখ্যা ঘূৰাই দিয়ে |
String getUserName() | ই আমি ব্যৱহাৰ কৰা ডাটাবেছৰ ব্যৱহাৰকাৰীনাম ঘূৰাই দিয়ে |
String getDatabaseProductName() | ই ঘূৰাই দিয়ে আমি যিটো ডাটাবেছৰ নামusing |
String getDatabaseProductVersion() | ই আমি ব্যৱহাৰ কৰা ডাটাবেইছৰ সংস্কৰণ নম্বৰ ঘূৰাই দিয়ে |
ResultSet getSchemas() | ই সংযুক্ত ডাটাবেইচত উপলব্ধ আঁচনিসমূহৰ নাম ঘূৰাই দিয়ে |
String getStringFunctions() | ই সংযুক্ত ডাটাবেইচত উপলব্ধ ষ্ট্ৰিং ফাংচনসমূহৰ তালিকা ঘূৰাই দিয়ে |
ষ্ট্ৰিং getTimeDateFunctions() | ই সংযুক্ত ডাটাবেইচত উপলব্ধ সময় আৰু তাৰিখ ফলনসমূহৰ তালিকা ঘূৰাই দিয়ে |
String getURL() | ই ডাটাবেইচৰ বাবে URL ঘূৰাই দিয়ে |
Boolean isReadOnly() | ই ডাটাবেইচ কেৱল পঢ়িব পৰা অৱস্থাত আছে নে নাই ঘূৰাই দিয়ে |
Boolean supportsBatchUpdates() | ই ডাটাবেইচ সমৰ্থন বেচ আপডেইট কৰে নে নকৰে ঘূৰাই দিয়ে |
Boolean supportsSavepoints() | ই ডাটাবেইচে Savepoints সমৰ্থন কৰে নে নকৰে ঘূৰাই দিয়ে |
Boolean supportsStatementPoling() | ই ডাটাবেইচে বিবৃতি পুলিং সমৰ্থন কৰে নে নকৰে |
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()); } }
OUTPUT:
ব্যাখ্যা:
ওপৰৰ প্ৰগ্ৰেমত, আমি getDriverName(), getDriverVersion() ব্যৱহাৰ/ প্ৰণয়ন কৰিছো। , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), সমৰ্থন কৰেBatchUpdates(), সমৰ্থন কৰেStatementPoling(), সমৰ্থন কৰেSavepoints(), সমৰ্থন কৰেStoredProcedures() আৰু supportsOuterJoins() পদ্ধতি ডাটাবেছমেটাডাটা আন্তঃপৃষ্ঠ।
মন কৰিবলগীয়া কথাসমূহ:
- JDBC ResultSet আন্তঃপৃষ্ঠ ডাটাবেছৰ পৰা ডাটা সংৰক্ষণ কৰিবলৈ আৰু আমাৰ জাভা প্ৰগ্ৰেমত ব্যৱহাৰ কৰিবলৈ ব্যৱহাৰ কৰা হয়।
- আমি updateXXX() পদ্ধতি ব্যৱহাৰ কৰি তথ্য আপডেট কৰিবলৈ ResultSet ব্যৱহাৰ কৰিব পাৰো।
- ResultSet বস্তুৱে ফলাফল তথ্যৰ প্ৰথম শাৰীৰ আগত কাৰ্চাৰক আঙুলিয়াই দিয়ে। next() পদ্ধতি ব্যৱহাৰ কৰি আমি ResultSet ৰ মাজেৰে পুনৰাবৃত্তি কৰিব পাৰো।
- আমাৰ ওচৰত ResultSet বস্তুত আৰু আগবাঢ়ি যাবলৈ ResultSet ৰ নেভিগেচনেল পদ্ধতি আছে
- ResultMetaData ব্যৱহাৰ কৰা হয় ResultSet ৰ বিষয়ে অধিক তথ্য পাবলৈ স্তম্ভৰ নাম, স্তম্ভৰ সংখ্যা, স্তম্ভৰ ডাটাটাইপ আদি।
- আমি সংযোগ কৰা ডাটাবেছৰ বিষয়ে তথ্য পাবলৈ DatabaseMetData ব্যৱহাৰ কৰা হয়
সঘনাই সোধা প্ৰশ্ন
প্ৰশ্ন #১) কি কামৰResultSet?
উত্তৰ: ResultSet DB ৰ পৰা তথ্য সংৰক্ষণ আৰু উদ্ধাৰ কৰিবলৈ ব্যৱহাৰ কৰা হয়। যেতিয়া executeQuery() পদ্ধতি এক্সিকিউট কৰা হয়, ই ResultSet বস্তু ঘূৰাই দিব। আমি আমাৰ প্ৰগ্ৰেমত সেই ResultSet বস্তুটো ব্যৱহাৰ কৰি লজিকটো সম্পন্ন কৰিব পাৰো।
প্ৰশ্ন #2) ResultSet খালী নে নহয় কেনেকৈ পৰীক্ষা কৰিব?
উত্তৰ: IsResultSet Empty পৰীক্ষা কৰিবলৈ length(), size() ৰ দৰে কোনো পূৰ্বনিৰ্ধাৰিত পদ্ধতি উপলব্ধ নহয়। আমি পুনৰাবৃত্তি কৰিবলৈ next() পদ্ধতি ব্যৱহাৰ কৰিব পাৰো আৰু যদি ই True ঘূৰাই দিয়ে, তেন্তে ই খালী নহয়, যদি ই False দিয়ে তেন্তে ইয়াৰ অৰ্থ হ'ল ResultSet খালী।
প্ৰশ্ন #3) ResultSet হোৱাটো সম্ভৱনে
উত্তৰ: নাই, executeQuery() পদ্ধতিয়ে ResultSet বস্তু ঘূৰাই দিয়ে যি কেতিয়াও শূন্য নহ'বও পাৰে।
প্ৰশ্ন #4) আপডেটযোগ্য ResultSet কি?
উত্তৰ: স্তম্ভত তথ্য আপডেইট কৰিবলৈ, স্তম্ভত তথ্য সন্নিবিষ্ট কৰিবলৈ আৰু শাৰী মচি পেলাবলৈ এটা আপডেটযোগ্য ResultSet বস্তু ব্যৱহাৰ কৰা হয়। এটা ResultSet এটা আপডেটযোগ্য হিচাপে বনাবলৈ, আমি স্ক্ৰল ধৰণক সংবেদনশীল বা অসংবেদনশীল আৰু CONCUR ধৰণক আপডেটযোগ্য হিচাপে বনাব লাগিব।
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
প্ৰশ্ন #5) সংযোগ কৰা ডাটাবেছৰ নাম কেনেকৈ পাব?
উত্তৰ: আমি DatabaseMetaData বস্তুৰ getDatabaseProductName() পদ্ধতি ব্যৱহাৰ কৰিব পাৰো।
উপসংহাৰ
এই টিউটোৰিয়েলত আমি কি কি সেই বিষয়ে আলোচনা কৰিছো ResultSet, ResultSetMetaData, আৰু DatabaseMetaData আন্তঃপৃষ্ঠসমূহ আৰু সিহতৰ গুৰুত্বপূৰ্ণ পদ্ধতিসমূহ সাধাৰণতে JDBC কাৰ্য্যক্ৰমসমূহত ব্যৱহৃত। আমিও দেখিছোResultSet ব্যৱহাৰ কৰি DB ত তথ্য কেনেকৈ আপডেইট কৰিব লাগে। 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() পদ্ধতি ব্যৱহাৰ কৰি মানসমূহ পাবলৈ Column Names বা Index ব্যৱহাৰ কৰিব পাৰো।
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() পদ্ধতিত Column Name ৰ পৰিৱৰ্তে Column ৰ index numberও উল্লেখ কৰিব পাৰো।
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 Types
অবিকল্পিতভাৱে, আমি ResultSet ত থকা ডাটা/মানসমূহ পুনৰাবৃত্তি কৰিব পাৰো যিবোৰ এক্সিকিউট কৰা SQL ষ্টেটমেন্টৰ এটা আউটপুট হিচাপে ফৰৱাৰ্ড দিশত ঘূৰি আহিছে। আমি Scrollable ResultSet ব্যৱহাৰ কৰি মানসমূহ অন্য দিশত পুনৰাবৃত্তি কৰিব পাৰো। আমি Statement, PreparedStatement, আৰু CallableStatement বস্তু সৃষ্টি কৰাৰ সময়ত ResultSet ৰ ধৰণ আৰু সমকালীনতা ধাৰ্য্য কৰিব পাৰো।
ResultSet ত 3 টা ধৰণ আছে। সেইবোৰ হ'ল:
- TYPE_FORWARD_ONLY: ই অবিকল্পিত বিকল্প, য'ত কাৰ্চাৰ আৰম্ভণিৰ পৰা শেষলৈ অৰ্থাৎ আগলৈ গতি কৰে।
- TYPE_SCROLL_INSENSITIVE: এই ধৰণত, ই কাৰ্চাৰক আগলৈ আৰু পিছলৈ দুয়োটা দিশতে গতি কৰিব। যদি আমি সংৰক্ষিত ডাটা পুনৰাবৃত্তি কৰাৰ সময়ত ডাটাত কোনো পৰিৱৰ্তন কৰো তেন্তে ই ডাটাছেটত আপডেট নহ’ব যদি কোনোবাই ডিবিত ডাটা সলনি কৰে। কাৰণ ডাটাছেটত SQL প্ৰশ্নে ঘূৰাই দিয়াৰ সময়ৰ পৰা ডাটা থাকেতথ্য।
- TYPE_SCROLL_SENSITIVE: ই TYPE_SCROLL_INSENSITIVE ৰ সৈতে একে, পাৰ্থক্যটো হ'ল যদি কোনোবাই SQL প্ৰশ্নই তথ্য ঘূৰাই দিয়াৰ পিছত তথ্য আপডেইট কৰে, পুনৰাবৃত্তি কৰাৰ সময়ত ইয়াক ডাটাছেটৰ পৰিবৰ্তনসমূহ প্ৰতিফলিত কৰিব।
ResultSet সমকালীনতা
ResultSet ত সমকালীনতাৰ 2 ধৰণ আছে। সেইবোৰ হ'ল:
- ResultSet.CONCUR_READ_ONLY: ই অবিকল্পিত সমকালীন ধৰণ। আমি কেৱল ResultSet ত থকা ডাটা পঢ়িব পাৰো। আপডেইট প্ৰযোজ্য নহয়।
- ResultSet.CONCUR_UPDATABLE: আমি ResultSet বস্তুত তথ্য আপডেইট কৰিব পাৰো।
কিছুমান ডাটাবেছে সকলোৰে বাবে সমকালীন ধৰণ সমৰ্থন নকৰে ResultSet ধৰণসমূহ। সেই ক্ষেত্ৰত, আমি supportsResultSetConcurrency() পদ্ধতি ব্যৱহাৰ কৰি সিহঁতে আমাৰ পছন্দৰ ধৰণ আৰু সমকালীন অৱস্থা সমৰ্থন কৰে নেকি পৰীক্ষা কৰিব লাগিব।
ResultSet আন্তঃপৃষ্ঠত পদ্ধতিসমূহ
ResultSet পদ্ধতিসমূহৰ 4 টা শ্ৰেণী আছে। সেইবোৰ হ’ল:
- নেভিগেচনেল পদ্ধতি
- গেটাৰ পদ্ধতি
- ছেটাৰ পদ্ধতি
- বিবিধ পদ্ধতি
প্ৰথমে আমি নেভিগেচনেল মেথডছৰ বিষয়ে আলোচনা কৰিম আৰু তাৰ পিছত আৰু আগবাঢ়িম।
#1) নেভিগেচনেল মেথডছ
এই পদ্ধতিটো ডাটাছেটৰ চাৰিওফালে কাৰ্চাৰটো লৰচৰ কৰিবলৈ ব্যৱহাৰ কৰা হয়।
- Boolean absolute(int row): ইয়াক কাৰ্চাৰক ধাৰ্য্য কৰা শাৰীলৈ লৈ যাবলৈ ব্যৱহাৰ কৰা হয় যি প্ৰাচলত উল্লেখ কৰা হৈছে আৰু যদি কাৰ্য্য সফল হয় তেন্তে true ঘূৰাই দিব অন্যথা false ঘূৰাই দিয়ক।
- শূন্যafterLast(): ই ResultSet কাৰ্চাৰক শেষ শাৰীৰ পিছত স্থানান্তৰিত কৰে।
- Void beforeFirst(): ই ResultSet কাৰ্চাৰক প্ৰথম শাৰীৰ আগত স্থানান্তৰিত কৰে।
- Boolean first(): ই ResultSet কাৰ্চাৰক প্ৰথম শাৰীলৈ যাবলৈ কৰে। ই সত্য ঘূৰাই দিয়ে যদি কাৰ্য্য সফল হয় অন্যথা মিছা।
- Boolean last(): ই ResultSet কাৰ্চাৰক শেষ শাৰীলৈ যাবলৈ কৰে। ই সত্য ঘূৰাই দিয়ে যদি কাৰ্য্য সফল হয় অন্যথা মিছা।
- Boolean next(): ই ResultSet কাৰ্চাৰক পৰৱৰ্তী শাৰীলৈ যাবলৈ কৰে। ই True ঘূৰাই দিয়ে যদি অধিক ৰেকৰ্ড আছে আৰু False দিয়ে যদি আৰু ৰেকৰ্ড নাই।
- Boolean previous(): ই ResultSet কাৰ্চাৰক পূৰ্বৱৰ্তী শাৰীলৈ যাবলৈ কৰে। ই True ঘূৰাই দিয়ে যদি কাৰ্য্য সফল হয় অন্যথা False।
- Boolean relative(): ই কাৰ্চাৰক প্ৰদত্ত সংখ্যক শাৰীলৈ হয় আগলৈ বা পিছলৈ লৈ যায়।
- Int getRow(): ই ResultSet বস্তুৱে এতিয়া আঙুলিয়াই দিয়া বৰ্তমানৰ শাৰী সংখ্যা ঘূৰাই দিয়ে।
- Void moveToCurrentRow(): ই কাৰ্চাৰক পুনৰ স্থানান্তৰ কৰে বৰ্তমান শাৰী যদি বৰ্তমানে সন্নিৱিষ্ট শাৰীত আছে।
- Void moveToInsertRow(): ই কাৰ্চাৰক ডাটাবেইচত শাৰী সন্নিবিষ্ট কৰিবলে নিৰ্দিষ্ট শাৰীলৈ লৈ যায়। ই বৰ্তমান কাৰ্চাৰৰ অৱস্থান মনত ৰাখে। গতিকে আমি সন্নিৱিষ্ট কৰাৰ পিছত কাৰ্চাৰক বৰ্তমানৰ শাৰীলৈ লৈ যাবলৈ moveToCurrentRow() পদ্ধতি ব্যৱহাৰ কৰিব পাৰো।
এই টিউটোৰিয়েলত,সকলো প্ৰগ্ৰেম জাভাত লিখা হয়। আমি জাভা ৮ সংস্কৰণ আৰু Oracle DB ব্যৱহাৰ কৰিছো।
>>আপুনি ইয়াৰ পৰা Oracle চফ্টৱেৰ ডাউনলোড কৰিব পাৰে
>>আপুনি ইয়াৰ পৰা জাভা সংস্কৰণ 8 ডাউনলোড কৰিব পাৰে
ইয়াৰ ষ্টেপ-বাই-ষ্টেপ জাভা সংস্থাপন প্ৰক্ৰিয়া আছে।
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( ), previous(), absolute(), relative() আৰু getRow() পদ্ধতিসমূহ ResultSet ত। এই পদ্ধতিসমূহ ব্যৱহাৰ কৰিবলৈ আমি prepareStatement পদ্ধতিত ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE মানসমূহ ছেট কৰো।
ইয়াৰ পিছত, আমি ResultSet ত Getter Methods কি কি সেই বিষয়ে আলোচনা কৰিম:
#2) গেটাৰ পদ্ধতিসমূহ
ResultSet এ ডাটাবেছৰ পৰা টেবুলৰ তথ্য সংৰক্ষণ কৰিছে। ResultSet ত টেবুলৰ মানসমূহ পাবলৈ গেটাৰ পদ্ধতি ব্যৱহাৰ কৰা হয়। তাৰ বাবে আমি স্তম্ভ সূচী মান বা স্তম্ভৰ নাম পাছ কৰিব লাগিব।
ResultSet ত নিম্নলিখিত গেটাৰ পদ্ধতিসমূহ:
- int getInt (int ColumnIndex): ইয়াক ধাৰ্য্য কৰা স্তম্ভ সূচীৰ মান এটা int তথ্য ধৰণ হিচাপে পাবলৈ ব্যৱহাৰ কৰা হয়।
- float getFloat(int ColumnIndex): ইয়াক পাবলৈ ব্যৱহাৰ কৰা হয় ধাৰ্য্য কৰা স্তম্ভৰ মান সূচীক এটা ফ্ল'ট তথ্য ধৰণ হিচাপে।
- java.sql.dategetDate(int ColumnIndex): ইয়াক ধাৰ্য্য কৰা স্তম্ভ সূচীৰ মান এটা তাৰিখ মান হিচাপে পাবলৈ ব্যৱহাৰ কৰা হয়।
- int getInt(String ColumnName): ইয়াক পাবলৈ ব্যৱহাৰ কৰা হয় ধাৰ্য্য কৰা স্তম্ভৰ মান এটা int তথ্য ধৰণ হিচাপে।
- float getFloat(String ColumnName): ইয়াক ধাৰ্য্য কৰা স্তম্ভৰ মান এটা float তথ্য ধৰণ হিচাপে পাবলৈ ব্যৱহাৰ কৰা হয়।
- Java.sql.date getDate(String ColumnName): ইয়াক ধাৰ্য্য কৰা স্তম্ভৰ মান তাৰিখ মান হিচাপে পাবলৈ ব্যৱহাৰ কৰা হয়।
গেটাৰ পদ্ধতি আছে সকলো আদিম তথ্য ধৰণৰ বাবে (Boolean, long, double) আৰু String ৰ বাবেও ResultSet আন্তঃপৃষ্ঠত। আমি ডাটাবেছৰ পৰাও এটা এৰে আৰু বাইনাৰী ধৰণৰ ডাটা লাভ কৰিব পাৰো। ইয়াৰ বাবেও পদ্ধতি আছে।
#3) Setter/Updater পদ্ধতি
আমি ResultSet Updater পদ্ধতি ব্যৱহাৰ কৰি ডাটাবেছত থকা মানটো আপডেট কৰিব পাৰো। ই Getter পদ্ধতিৰ সৈতে একে, কিন্তু ইয়াত আমি ডাটাবেছত আপডেট কৰিবলৈ বিশেষ স্তম্ভৰ বাবে মান/ডাটা পাছ কৰিব লাগিব।
নিম্নলিখিত ResultSet ত আপডেটাৰ পদ্ধতিসমূহ হৈছে:
- void updateInt(int ColumnIndex, int মান): ইয়াক এটা int মানৰ সৈতে ধাৰ্য্য কৰা স্তম্ভ সূচীৰ মান আপডেইট কৰিবলে ব্যৱহাৰ কৰা হয়।
- void updateFloat(int ColumnIndex, float f): ইয়াক ধাৰ্য্য কৰা স্তম্ভ সূচীৰ মানক float মানৰ সৈতে আপডেইট কৰিবলে ব্যৱহাৰ কৰা হয়।
- 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): ইয়াক প্ৰদত্ত তাৰিখ মানৰ সৈতে ধাৰ্য্য কৰা স্তম্ভৰ মান আপডেইট কৰিবলে ব্যৱহাৰ কৰা হয়।
সকলো আদিম তথ্য ধৰণ (Boolean, long, double) আৰু String ৰ বাবে Updater পদ্ধতি আছে ResultSet আন্তঃপৃষ্ঠতো।
আপডেটাৰ পদ্ধতিসমূহে কেৱল ResultSet বস্তুত তথ্য আপডেইট কৰে। মানসমূহ insertRow বা updateRow পদ্ধতি কল কৰাৰ পিছত DB ত আপডেইট কৰা হ'ব।
এটা শাৰী আপডেইট কৰা:
আমি updateX() পদ্ধতিসমূহ কল কৰি এটা শাৰীত তথ্য আপডেইট কৰিব পাৰো , স্তম্ভৰ নাম বা সূচী পাছ কৰা, আৰু আপডেইট কৰিবলে মানসমূহ। আমি updateX পদ্ধতিত X ৰ ঠাইত যিকোনো ডাটা টাইপ ব্যৱহাৰ কৰিব পাৰো। এতিয়ালৈকে আমি ResultSet অবজেক্টত থকা ডাটাবোৰ আপডেট কৰিছো। DB ত ডাটা আপডেট কৰিবলৈ আমি updateRow() পদ্ধতি কল কৰিব লাগিব।
এটা Row সন্নিবিষ্ট কৰা:
আমি কাৰ্চাৰ স্থানান্তৰ কৰিবলৈ moveToInsertRow() ব্যৱহাৰ কৰিব লাগিব এটা নতুন শাৰী সন্নিবিষ্ট কৰিবলৈ। আমি ইতিমধ্যে এই বিষয়ে Navigation methods অংশত আলোচনা কৰিছো। ইয়াৰ পিছত আমি শাৰীত ডাটা যোগ কৰিবলৈ 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(); } } }
OUTPUT:
ব্যাখ্যা:
ওপৰৰ প্ৰগ্ৰেমত আমি যি কৰিছো সেয়া প্ৰথমে, আমি সংৰক্ষণ কৰিলোঁ SELECT প্ৰশ্ন ব্যৱহাৰ কৰি ResultSet বস্তুত Employee_details টেবুলৰ তথ্য। তাৰ পিছত, আমি ResultSet ৰ last() পদ্ধতি ব্যৱহাৰ কৰি employee_details টেবুলত শেষ শাৰীৰ তথ্য প্ৰদৰ্শন কৰিলোঁ। moveToInsertRow() পদ্ধতিয়ে কাৰ্চাৰক বৰ্তমান শাৰীটো আঙুলিয়াই দিয়ে, এতিয়া বৰ্তমান শাৰীটোৱেই শেষ শাৰী।
updateXXX()শাৰীলৈ মানসমূহ আপডেইট কৰিবলে ব্যৱহৃত পদ্ধতি আৰু insertRow() পদ্ধতিয়ে তথ্য সন্নিবিষ্ট কৰিছে এটা নতুন শাৰী। absolute() পদ্ধতি ব্যৱহাৰ কৰি আমি কাৰ্চাৰটো ৫ম শাৰীলৈ আঙুলিয়াই দিবলৈ বনালোঁ। UpdateInt() পদ্ধতি ব্যৱহাৰ কৰা হৈছে টেবুলত 5th কৰ্মচাৰীৰ এটা নতুন id ৰ সৈতে EMPNUM আপডেইট কৰিবলে। ইয়াৰ পিছত, EMPNUM আপডেইট কৰা হৈছে নে নাই পৰীক্ষা কৰিবলে তথ্য প্ৰদৰ্শন কৰা হ'ল।
কাৰ্চাৰক last() ব্যৱহাৰ কৰি টেবুলৰ শেষ শাৰীটো আঙুলিয়াই দিবলে আৰু ইয়াক প্ৰদৰ্শন কৰিলে। ওপৰৰ লজিকটো সম্পন্ন কৰিবলৈ আমি prepareStatement পদ্ধতিত ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE মানসমূহ সংহতি কৰিব লাগিব।
#4) বিবিধ পদ্ধতি
- void close(): ইয়াক ResultSet উদাহৰণ বন্ধ কৰিবলৈ আৰু মুক্ত কৰিবলৈ ব্যৱহাৰ কৰা হয়ResultSet উদাহৰণৰ সৈতে জড়িত সম্পদসমূহ।
- ResultSetMetaData getMetaData(): ই ResultSetMetaData উদাহৰণ ঘূৰাই দিয়ে। ইয়াত প্ৰশ্ন আউটপুটৰ স্তম্ভৰ ধৰণ আৰু বৈশিষ্ট্যৰ বিষয়ে তথ্য আছে। আমি পৰৱৰ্তী খণ্ডত ResultSetMetaData ৰ বিষয়ে অধিক জানিব পাৰিম।
ResultSetMetaData
মেটাডাটা কি?
মেটাডাটা মানে তথ্যৰ বিষয়ে তথ্য। এই আন্তঃপৃষ্ঠ ব্যৱহাৰ কৰি আমি ResultSet ৰ বিষয়ে অধিক তথ্য পাম। ই java.sql পেকেইজত উপলব্ধ। প্ৰতিটো ResultSet বস্তু এটা ResultSetMetaData বস্তুৰ সৈতে জড়িত।
এই বস্তুটোত স্তম্ভসমূহৰ বৈশিষ্ট্যসমূহৰ বিৱৰণ থাকিব যেনে স্তম্ভৰ ডাটাটাইপ, স্তম্ভৰ নাম, স্তম্ভৰ সংখ্যা, টেবুলৰ নাম, আঁচনিৰ নাম ইত্যাদি, আমি ResultSet ৰ getMetaData() পদ্ধতি ব্যৱহাৰ কৰি ResultSetMetaData বস্তু পাব পাৰো।
ResultSetMetaData ৰ বাক্যবিন্যাস:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData আন্তঃপৃষ্ঠৰ গুৰুত্বপূৰ্ণ পদ্ধতি:
পদ্ধতিৰ নাম | বিৱৰণ |
---|---|
স্ট্ৰিং getColumnName(int স্তম্ভ) | ই বিশেষ স্তম্ভৰ স্তম্ভৰ নাম ঘূৰাই দিয়ে |
String getColumnTypeName(int স্তম্ভ) | ই ৰ ডাটাটাইপ ঘূৰাই দিয়ে বিশেষ স্তম্ভ যিটো আমি এটা প্ৰাচল হিচাপে পাছ কৰিছো |
String getTableName(int স্তম্ভ) | ই স্তম্ভৰ টেবুল নাম ঘূৰাই দিয়ে |
ষ্ট্ৰিং getSchemaName(int স্তম্ভ) | ই |