یہ ٹیوٹوریل بتاتا ہے کہ ڈیٹا کی بازیافت کے لیے JDBC ResultSet کو کیسے استعمال کیا جائے۔ ہم مثالوں کے ساتھ ResultSetMetaData اور DatabaseMetaData انٹرفیس کے بارے میں بھی سیکھیں گے:
JDBC ڈرائیور مینجر JDBC ٹیوٹوریل سیریز کے ٹیوٹوریل میں، ہم نے JDBC کو استعمال کرنے کا طریقہ سیکھا۔ ڈرائیور مینجر اور اس کے طریقے، جاوا ایپلی کیشنز میں JDBC PreparedStatement.
اس ٹیوٹوریل میں، ہم JDBC میں باقی انٹرفیس پر بات کریں گے۔ ہم نے اپنے پچھلے ٹیوٹوریلز میں اسٹیٹمنٹ، پریپرڈ اسٹیٹمنٹ، اور کال ایبل اسٹیٹمنٹ انٹرفیس کا احاطہ کیا ہے۔
یہاں، ہم JDBC ResultSet، ResultSetMetaData، اور DatabaseMetaData انٹرفیس، ان کے طریقوں اور جاوا پروگرام میں طریقے استعمال کرنے کے بارے میں سیکھیں گے۔3
JDBC ResultSet Interface
ResultSet انٹرفیس java.sql پیکیج میں موجود ہے۔ یہ ڈیٹا کو ذخیرہ کرنے کے لیے استعمال کیا جاتا ہے جو جاوا پروگرام میں ایس کیو ایل سٹیٹمنٹس کے عمل کے بعد ڈیٹا بیس ٹیبل سے واپس کیا جاتا ہے۔ رزلٹ سیٹ کا آبجیکٹ رزلٹ ڈیٹا پر کرسر پوائنٹ کو برقرار رکھتا ہے۔ پہلے سے طے شدہ طور پر، نتیجہ کے اعداد و شمار کی پہلی قطار سے پہلے کرسر پوزیشن میں ہوتا ہے۔
اگلا() طریقہ کرسر کو آگے کی سمت میں اگلی پوزیشن پر لے جانے کے لیے استعمال کیا جاتا ہے۔ مزید ریکارڈ نہ ہونے کی صورت میں یہ FALSE لوٹائے گا۔ یہ کسی بھی اسٹیٹمنٹ آبجیکٹ کا استعمال کرتے ہوئے executeQuery() طریقہ کو کال کرکے ڈیٹا بازیافت کرتا ہے۔ یہ بیان یا تیار بیان یا کال ایبل اسٹیٹمنٹ آبجیکٹ ہوسکتا ہے۔ تیار بیان، اورکالم کے ٹیبل کا اسکیما نام واپس کرتا ہے
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
DatabasMetaData ڈیٹابیس کے بارے میں معلومات فراہم کرتا ہے جیسا کہ انٹرفیس ڈیٹا بیس کا نام، ڈیٹا بیس ورژن، وغیرہ۔
ڈیٹا بیس میٹا ڈیٹا انٹرفیس کے اہم طریقے:
طریقہ کا نام | تفصیل27 |
---|---|
اسٹرنگ getDriverName() | یہ JDBC ڈرائیور کا نام لوٹائے گا جسے ہم اپنے جاوا پروگرام میں استعمال کررہے ہیں |
اسٹرنگ getDriverVersion() | یہ JDBC ڈرائیور ورژن نمبر واپس کرتا ہے |
String getUserName() | یہ ڈیٹا بیس کا صارف نام لوٹاتا ہے جسے ہم استعمال کر رہے ہیں |
String getDatabaseProductName() | یہ واپس آتا ہے ڈیٹا بیس کا نام جو ہم ہیں۔استعمال کرتے ہوئے |
String getDatabaseProductVersion() | یہ ڈیٹا بیس کا ورژن نمبر لوٹاتا ہے جسے ہم استعمال کررہے ہیں |
رزلٹ سیٹ getSchemas() | یہ منسلک ڈیٹا بیس میں دستیاب اسکیموں کے نام واپس کرتا ہے |
String getStringFunctions() | یہ منسلک ڈیٹا بیس میں دستیاب سٹرنگ فنکشنز کی فہرست واپس کرتا ہے |
String getTimeDateFunctions() | یہ منسلک ڈیٹا بیس میں دستیاب وقت اور تاریخ کے فنکشنز کی فہرست واپس کرتا ہے |
String getURL() | یہ ڈیٹا بیس کے لیے URL واپس کرتا ہے |
بولین isReadOnly() | یہ لوٹاتا ہے کہ آیا ڈیٹا بیس صرف پڑھنے کے موڈ میں ہے |
بولین سپورٹ BatchUpdates() | یہ واپس کرتا ہے کہ آیا ڈیٹا بیس بیچ اپ ڈیٹس کو سپورٹ کرتا ہے |
بولین سپورٹس سیو پوائنٹس() | یہ واپس کرتا ہے کہ آیا ڈیٹا بیس Savepoints کو سپورٹ کرتا ہے |
Boolan supportsStatementPooling() | یہ واپس آتا ہے کہ آیا ڈیٹا بیس اسٹیٹمنٹ پولنگ کو سپورٹ کرتا ہے |
بولین سپورٹ اسٹورڈ پروسیجرز() | یہ واپس کرتا ہے کہ آیا ڈیٹا بیس اسٹورڈ طریقہ کار کو سپورٹ کرتا ہے |
بولین سپورٹ آؤٹر جوائنز() | یہ واپس کرتا ہے کہ آیا ڈیٹا بیس آؤٹر جوائن کو سپورٹ کرتا ہے |
یہاں، ہم نے ڈیٹا بیس میٹا ڈیٹا انٹرفیس کے کچھ اہم طریقے درج کیے ہیں۔ آپ کا حوالہ دے سکتے ہیں۔ Oracle کی آفیشل سائٹ جہاں آپ DatabaseMetaData انٹرفیس میں دستیاب تمام طریقے دیکھ سکتے ہیں۔
DatabaseMetaData مثال:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE"); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println("Using DatabaseMetaData"); System.out.println("Driver Name: " + dbmd.getDriverName()); System.out.println("Driver Version: "+ dbmd.getDriverVersion()); System.out.println("UserName of the Database: " + dbmd.getUserName()); System.out.println("Database Product Name:" + dbmd.getDatabaseProductName()); System.out.println("Database Product Version: " + dbmd.getDatabaseProductVersion()); System.out.println("List of String Functions in the Database: " + dbmd.getStringFunctions()); System.out.println("List of Time & Date functions in the Database: " + dbmd.getTimeDateFunctions()); System.out.println("URL of the Database: " + dbmd.getURL()); System.out.println("Database is read - only? " +dbmd.isReadOnly()); System.out.println("Support Batch Updates? " + dbmd.supportsBatchUpdates()); System.out.println("Support savepoints? " + dbmd.supportsSavepoints()); System.out.println("Support Statement Pooling? "+ dbmd.supportsStatementPooling()); System.out.println("Support Stored Procedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join? "+ dbmd.supportsOuterJoins()); } }
آؤٹ پٹ:
وضاحت:
مندرجہ بالا پروگرام میں، ہم نے getDriverName(), getDriverVersion() کو استعمال/ نافذ کیا ہے۔ , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsDuestrouters DatabaseMetaData انٹرفیس۔
قابل توجہ نکات:
- JDBC ResultSet انٹرفیس ڈیٹا بیس سے ڈیٹا کو ذخیرہ کرنے اور اسے ہمارے جاوا پروگرام میں استعمال کرنے کے لیے استعمال کیا جاتا ہے۔
- ہم updateXXX() طریقوں کا استعمال کرتے ہوئے ڈیٹا کو اپ ڈیٹ کرنے کے لیے ResultSet کا استعمال بھی کر سکتے ہیں۔
- ResultSet آبجیکٹ کرسر کو رزلٹ ڈیٹا کی پہلی قطار سے پہلے پوائنٹ کرتا ہے۔ اگلا() طریقہ استعمال کرتے ہوئے، ہم ResultSet کے ذریعے اعادہ کر سکتے ہیں۔
- ہمارے پاس ResultSet آبجیکٹ میں مزید آگے بڑھنے کے لیے رزلٹ سیٹ کے نیوی گیشنل طریقے ہیں
- ResultMetaData کو رزلٹ سیٹ کے بارے میں مزید معلومات حاصل کرنے کے لیے استعمال کیا جاتا ہے جیسے کالم کا نام، کالموں کی تعداد، کالم کا ڈیٹا ٹائپ وغیرہ۔
- ڈیٹا بیس میٹ ڈیٹا کا استعمال اس ڈیٹا بیس کے بارے میں معلومات حاصل کرنے کے لیے کیا جاتا ہے جسے ہم نے جوڑا ہے
اکثر پوچھے جانے والے سوالات
سوال نمبر 1) اس کا کیا فائدہ ہے۔رزلٹ سیٹ؟
جواب: رزلٹ سیٹ کا استعمال ڈی بی سے ڈیٹا کو اسٹور اور بازیافت کرنے کے لیے کیا جاتا ہے۔ جب executeQuery() طریقہ کار انجام دے گا، تو یہ ResultSet آبجیکٹ واپس کر دے گا۔ ہم اپنے پروگرام میں اس ResultSet آبجیکٹ کو منطق کو انجام دینے کے لیے استعمال کر سکتے ہیں۔
Q #2) کیسے چیک کریں کہ ResultSet خالی ہے یا نہیں؟
جواب: IsResultSet Empty کو چیک کرنے کے لیے length(), size() جیسے پہلے سے طے شدہ طریقے دستیاب نہیں ہیں۔ ہم اعادہ کرنے کے لیے next() طریقہ استعمال کر سکتے ہیں اور اگر یہ True لوٹتا ہے، تو یہ خالی نہیں ہے، اگر یہ False دیتا ہے تو اس کا مطلب ہے کہ رزلٹ سیٹ خالی ہے۔
Q #3) کیا یہ ممکن ہے کہ ResultSet ہو سکتا ہے null؟
جواب: نہیں، executeQuery() طریقہ ResultSet آبجیکٹ لوٹاتا ہے جو کبھی بھی کالعدم نہیں ہو سکتا۔
Q #4) اپ ڈیٹ ایبل رزلٹ سیٹ کیا ہے؟
جواب: ایک اپڈیٹ ایبل ریزلٹ سیٹ آبجیکٹ کالم میں ڈیٹا کو اپ ڈیٹ کرنے، کالموں میں ڈیٹا داخل کرنے اور قطاروں کو ڈیلیٹ کرنے کے لیے استعمال کیا جاتا ہے۔ رزلٹ سیٹ کو اپڈیٹ ایبل کے طور پر بنانے کے لیے، ہمیں سکرول ٹائپ کو حساس یا غیر حساس اور CONCUR ٹائپ کو اپڈیٹ ایبل بنانا ہوگا۔
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q #5) ڈیٹا بیس کا نام کیسے حاصل کیا جائے جو منسلک ہو چکا ہے؟
جواب: ہم ڈیٹا بیس میٹا ڈیٹا آبجیکٹ کا getDatabaseProductName() طریقہ استعمال کرسکتے ہیں۔
نتیجہ
اس ٹیوٹوریل میں، ہم نے اس بات پر تبادلہ خیال کیا ہے کہ کیا ہیں ResultSet، ResultSetMetaData، اور DatabaseMetaData انٹرفیس اور ان کے اہم طریقے جو عام طور پر JDBC پروگراموں میں استعمال ہوتے ہیں۔ ہم نے بھی دیکھا ہے۔نتیجہ سیٹ کا استعمال کرتے ہوئے ڈی بی میں ڈیٹا کو کیسے اپ ڈیٹ کریں۔ 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 Types
پہلے سے طے شدہ طور پر، ہم ResultSet میں ڈیٹا/ویلیوز کو اعادہ کر سکتے ہیں جو آگے کی سمت میں ایس کیو ایل سٹیٹمنٹ کے آؤٹ پٹ کے طور پر واپس آئے ہیں۔ ہم سکرول ایبل رزلٹ سیٹ کا استعمال کرتے ہوئے دوسری سمتوں میں اقدار کو دوبارہ کر سکتے ہیں۔ ہم اسٹیٹمنٹ، PreparedStatement، اور CallableStatement آبجیکٹ بناتے وقت ResultSet کی قسم اور کنکرنسی کی وضاحت کر سکتے ہیں۔
ResultSet میں 3 اقسام ہیں۔ وہ ہیں:
- TYPE_FORWARD_ONLY: یہ ڈیفالٹ آپشن ہے، جہاں کرسر شروع سے آخر تک چلتا ہے یعنی آگے کی سمت۔
- TYPE_SCROLL_INSENSITIVE: اس قسم میں، یہ کرسر کو آگے اور پیچھے دونوں سمتوں میں حرکت کرنے کے لیے بنائے گا۔ اگر ہم ذخیرہ شدہ ڈیٹا کو دہراتے ہوئے ڈیٹا میں کوئی تبدیلی کرتے ہیں تو یہ ڈیٹاسیٹ میں اپ ڈیٹ نہیں ہوگا اگر کوئی DB میں ڈیٹا کو تبدیل کرتا ہے۔ کیونکہ ڈیٹاسیٹ میں اس وقت سے ڈیٹا ہوتا ہے جب سے SQL استفسار واپس کرتا ہے۔ڈیٹا۔
- TYPE_SCROLL_SENSITIVE: یہ TYPE_SCROLL_INSENSITIVE سے ملتا جلتا ہے، فرق یہ ہے کہ اگر کوئی ڈیٹا کو اپ ڈیٹ کرتا ہے اس کے بعد کہ SQL Query ڈیٹا واپس کر دیتا ہے، جبکہ اسے دوبارہ کرنے سے ڈیٹا سیٹ میں ہونے والی تبدیلیوں کی عکاسی ہوتی ہے۔
رزلٹ سیٹ کنکرنسی
رزلٹ سیٹ میں کنکرنسی کے 2 طریقے ہیں۔ وہ ہیں:
- ResultSet.CONCUR_READ_ONLY: یہ ڈیفالٹ کنکرنسی موڈ ہے۔ ہم صرف رزلٹ سیٹ میں موجود ڈیٹا کو پڑھ سکتے ہیں۔ اپ ڈیٹ لاگو نہیں ہے۔
- ResultSet.CONCUR_UPDATABLE: ہم ResultSet آبجیکٹ میں ڈیٹا کو اپ ڈیٹ کر سکتے ہیں۔
کچھ ڈیٹا بیس سب کے لیے کنکرنسی موڈ کو سپورٹ نہیں کرتے ہیں۔ نتائج سیٹ کی اقسام۔ اس صورت میں، ہمیں یہ چیک کرنے کی ضرورت ہے کہ آیا وہ supportsResultSetConcurrency() طریقہ استعمال کرتے ہوئے ہماری مطلوبہ قسم اور کنکرنسی موڈ کو سپورٹ کرتے ہیں۔
ResultSet انٹرفیس میں طریقے
ResultSet طریقوں کی 4 قسمیں ہیں۔ وہ ہیں:
- نیویگیشنل طریقے
- طریقے حاصل کریں
- سیٹر کے طریقے
- متفرق طریقے
پہلے، ہم نیویگیشنل میتھڈز پر بات کریں گے اور پھر آگے بڑھیں گے۔
#1) نیویگیشنل میتھڈز
یہ طریقہ کرسر کو ڈیٹاسیٹ کے گرد منتقل کرنے کے لیے استعمال کیا جاتا ہے۔
- بولین absolute(int row): یہ کرسر کو مخصوص قطار میں لے جانے کے لیے استعمال کیا جاتا ہے جس کا پیرامیٹر میں ذکر کیا گیا ہے اور اگر آپریشن کامیاب ہوتا ہے تو درست واپس آجاتا ہے۔
- باطلafterLast(): یہ ResultSet کرسر کو آخری قطار کے بعد منتقل کرتا ہے۔
- Void beforeFirst(): یہ ResultSet کرسر کو پہلی قطار سے پہلے منتقل کرتا ہے۔13
- بولین پہلے(): یہ رزلٹ سیٹ کرسر کو پہلی قطار میں جانے کے لیے بناتا ہے۔ اگر آپریشن کامیاب ہوتا ہے تو یہ درست ہو جاتا ہے ورنہ غلط۔
- بولین آخری(): یہ نتیجہ سیٹ کرسر کو آخری قطار میں جانے کے لیے بناتا ہے۔ اگر آپریشن کامیاب ہوتا ہے تو یہ درست ہو جاتا ہے ورنہ غلط۔
- بولین نیکسٹ(): یہ نتیجہ سیٹ کرسر کو اگلی قطار میں جانے کے لیے بناتا ہے۔ اگر مزید ریکارڈز ہوں تو یہ درست اور مزید ریکارڈ نہ ہونے کی صورت میں غلط لوٹاتا ہے۔
- بولین پچھلا(): یہ رزلٹ سیٹ کرسر کو پچھلی قطار میں جانے کے لیے بناتا ہے۔ اگر آپریشن کامیاب ہوتا ہے تو یہ درست ہو جاتا ہے ورنہ غلط۔
- بولین رشتہ دار(): یہ کرسر کو قطاروں کی دی گئی تعداد میں آگے یا پیچھے کی سمت لے جاتا ہے۔
- Int getRow(): یہ موجودہ قطار نمبر کو لوٹاتا ہے جس کی طرف ResultSet آبجیکٹ ابھی اشارہ کر رہا ہے۔
- Void moveToCurrentRow(): یہ کرسر کو واپس لے جاتا ہے۔ موجودہ قطار اگر یہ فی الحال insert row میں ہے۔
- Void moveToInsertRow(): یہ صف کو ڈیٹا بیس میں داخل کرنے کے لیے کرسر کو مخصوص قطار میں لے جاتا ہے۔ یہ کرسر کا موجودہ مقام یاد رکھتا ہے۔ اس لیے ہم انسرشن کے بعد کرسر کو موجودہ قطار میں منتقل کرنے کے لیے moveToCurrentRow() طریقہ استعمال کر سکتے ہیں۔
اس ٹیوٹوریل میں،تمام پروگرام جاوا میں لکھے گئے ہیں۔ ہم نے جاوا 8 ورژن اور Oracle DB استعمال کیا ہے۔
>>آپ یہاں سے اوریکل سافٹ ویئر ڈاؤن لوڈ کر سکتے ہیں
>>آپ یہاں سے جاوا ورژن 8 ڈاؤن لوڈ کر سکتے ہیں
اس میں جاوا کی تنصیب کا مرحلہ وار عمل ہے۔
JDBC نتیجہ سیٹ مثالی پروگرام:(نیویگیشنل طریقوں کا استعمال کرتے ہوئے)
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(); } } }
آؤٹ پٹ:
ملازمین_تفصیلات کے جدول میں ڈیٹا
19>
20![](/wp-content/uploads/guides/7033dwpdfa-2.png)
وضاحت:
مذکورہ پروگرام میں ہم نے پہلے ()، آخری()، beforeFirst()، afterLast()، اگلا( رزلٹ سیٹ میں سابقہ ()، مطلق()، رشتہ دار() اور getRow() طریقے۔ ان طریقوں کو استعمال کرنے کے لیے ہم ResultSet.TYPE_SCROLL_SENSITIVE، ResultSet.CONCUR_UPDATABLE ویلیوز تیار کرتے ہیں۔
اس کے بعد، ہم اس بات پر بات کریں گے کہ رزلٹ سیٹ میں حاصل کرنے والے طریقے کیا ہیں:
#2) حاصل کرنے کے طریقے
رزلٹ سیٹ نے ڈیٹا بیس سے ٹیبل کا ڈیٹا محفوظ کیا ہے۔ رزلٹ سیٹ میں ٹیبل کی قدریں حاصل کرنے کے لیے گیٹر کے طریقے استعمال کیے جاتے ہیں۔ اس کے لیے ہمیں کالم انڈیکس ویلیو یا کالم کا نام پاس کرنا ہوگا۔
رزلٹ سیٹ میں حاصل کرنے کے طریقے درج ذیل ہیں:
- int getInt (int ColumnIndex): یہ مخصوص کالم انڈیکس کی قدر کو 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) سیٹٹر/اپڈیٹر کے طریقے
ہم رزلٹ سیٹ اپڈیٹر کے طریقے استعمال کرکے ڈیٹا بیس میں ویلیو کو اپ ڈیٹ کر سکتے ہیں۔ یہ گیٹر کے طریقوں سے ملتا جلتا ہے، لیکن یہاں ہمیں ڈیٹا بیس میں اپ ڈیٹ کرنے کے لیے مخصوص کالم کے لیے اقدار/ڈیٹا پاس کرنے کی ضرورت ہے۔
رزلٹ سیٹ میں اپڈیٹر کے طریقے درج ذیل ہیں: 3
- 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) کالم کا نام: اس کا استعمال مخصوص کالم کی قیمت کو دی گئی تاریخ کی قدر کے ساتھ اپ ڈیٹ کرنے کے لیے کیا جاتا ہے۔
تمام پرائمیٹو ڈیٹا کی اقسام (بولین، لمبی، ڈبل) اور اسٹرنگ کے لیے اپڈیٹر کے طریقے موجود ہیں۔ رزلٹ سیٹ انٹرفیس میں بھی۔
اپڈیٹر کے طریقے صرف رزلٹ سیٹ آبجیکٹ میں ڈیٹا کو اپ ڈیٹ کرتے ہیں۔ insertRow یا UpdateRow طریقہ کو کال کرنے کے بعد DB میں قدروں کو اپ ڈیٹ کیا جائے گا۔
ایک قطار کو اپ ڈیٹ کرنا:
ہم UpdateX() طریقوں کو کال کر کے ڈیٹا کو ایک قطار میں اپ ڈیٹ کر سکتے ہیں۔ ، کالم کا نام یا اشاریہ پاس کرنا، اور اقدار کو اپ ڈیٹ کرنا۔ ہم اپڈیٹ ایکس طریقہ میں X کی جگہ کسی بھی قسم کے ڈیٹا کا استعمال کر سکتے ہیں۔ اب تک، ہم نے رزلٹ سیٹ آبجیکٹ میں ڈیٹا کو اپ ڈیٹ کیا ہے۔ ڈی بی میں ڈیٹا کو اپ ڈیٹ کرنے کے لیے، ہمیں اپڈیٹ رو() طریقہ کو کال کرنا ہوگا۔
ایک قطار داخل کرنا:
ہمیں کرسر کو منتقل کرنے کے لیے moveToInsertRow() استعمال کرنے کی ضرورت ہے۔ ایک نئی قطار داخل کرنے کے لیے۔ ہم نیویگیشن طریقوں کے سیکشن میں پہلے ہی اس کا احاطہ کر چکے ہیں۔ اگلا، ہمیں ڈیٹا کو قطار میں شامل کرنے کے لیے updateX() طریقہ کو کال کرنے کی ضرورت ہے۔ ہمیں تمام کالموں کے لیے ڈیٹا فراہم کرنا چاہیے ورنہ یہ اس خاص کی ڈیفالٹ ویلیو استعمال کرے گا۔کالم۔
ڈیٹا کو اپ ڈیٹ کرنے کے بعد، ہمیں insertRow() طریقہ کو کال کرنا ہوگا۔ پھر کرسر کی پوزیشن کو اس قطار پر واپس لے جانے کے لیے moveToCurrentRow() طریقہ استعمال کریں جس پر ہم نئی قطار ڈالنے سے پہلے تھے۔
رزلٹ سیٹ کی مثال:
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(); } } }
آؤٹ پٹ:
SELECT استفسار کا استعمال کرتے ہوئے ResultSet آبجیکٹ میں Employee_details ٹیبل کا ڈیٹا۔ پھر، ہم نے رزلٹ سیٹ کے آخری () طریقہ کا استعمال کرتے ہوئے ملازم_تفصیلات ٹیبل میں آخری قطار کا ڈیٹا ڈسپلے کیا۔ moveToInsertRow() طریقہ کرسر کو موجودہ قطار کی طرف اشارہ کرنے کے لیے بناتا ہے، اب موجودہ قطار آخری قطار ہے۔updateXXX()طریقوں کو قطار کی قدروں کو اپ ڈیٹ کرنے کے لیے استعمال کیا جاتا ہے اور insertRow() طریقہ نے ڈیٹا داخل کیا ہے۔ ایک نئی قطار. absolute() طریقہ استعمال کرتے ہوئے، ہم نے کرسر کو 5ویں قطار کی طرف اشارہ کیا۔ UpdateInt() طریقہ EMPNUM کو ٹیبل میں 5ویں ملازم کی نئی آئی ڈی کے ساتھ اپ ڈیٹ کرنے کے لیے استعمال کیا گیا ہے۔ اس کے بعد، یہ چیک کرنے کے لیے ڈیٹا ڈسپلے کیا کہ آیا EMPNUM اپ ڈیٹ ہوا ہے یا نہیں۔
لاسٹ() کا استعمال کرتے ہوئے ٹیبل کی آخری قطار کی طرف اشارہ کرنے کے لیے کرسر بنایا اور اسے ڈسپلے کیا۔ مندرجہ بالا منطق کو انجام دینے کے لیے، ہمیں ResultSet.TYPE_SCROLL_INSENSITIVE، ResultSet.CONCUR_UPDATABLE ویلیوز تیار کرنے کے طریقہ کار میں سیٹ کرنے ہوں گے۔
#4) متفرق طریقے
- void close(): یہ ResultSet مثال کو بند کرنے اور خالی کرنے کے لیے استعمال ہوتا ہے۔ResultSet مثال سے وابستہ وسائل۔
- ResultSetMetaData getMetaData(): یہ ResultSetMetaData مثال واپس کرتا ہے۔ اس میں استفسار کے آؤٹ پٹ کے کالموں کی قسم اور خاصیت کے بارے میں معلومات ہوتی ہیں۔ ہم اگلے حصے میں ResultSetMetaData کے بارے میں مزید جانیں گے۔
ResultSetMetaData
میٹا ڈیٹا کیا ہے؟
میٹا ڈیٹا ڈیٹا کے بارے میں ڈیٹا کا مطلب ہے۔ اس انٹرفیس کا استعمال کرتے ہوئے، ہم ResultSet کے بارے میں مزید معلومات حاصل کریں گے۔ یہ java.sql پیکیج میں دستیاب ہے۔ ہر ResultSet آبجیکٹ ایک ResultSetMetaData آبجیکٹ سے منسلک ہوتا ہے۔
اس آبجیکٹ میں کالم کی خصوصیات کی تفصیلات ہوں گی جیسے کالم کا ڈیٹا ٹائپ، کالم کا نام، کالموں کی تعداد، ٹیبل کا نام، اسکیما کا نام، وغیرہ۔ ہم رزلٹ سیٹ کے getMetaData() طریقہ کا استعمال کرتے ہوئے ResultSetMetaData آبجیکٹ حاصل کر سکتے ہیں۔
ResultSetMetaData کا نحو:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData انٹرفیس کے اہم طریقے:
طریقہ کا نام | تفصیل |
---|---|
31> | یہ مخصوص کالم کے کالم کا نام لوٹاتا ہے |
String getColumnTypeName(int column) | یہ ڈیٹا ٹائپ کو لوٹاتا ہے۔ مخصوص کالم جسے ہم نے پیرامیٹر کے طور پر پاس کیا ہے |
String getTableName(int column) | یہ کالم کے ٹیبل کا نام لوٹاتا ہے |
سٹرنگ getSchemaName(int column) | یہ |