Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

JDBC ResultSet

📖توضیحات درس

🎥 این ویدیو قسمت سی‌وچهارم از بوت‌کمپ رایگان جاواست. 📚 JDBC – آشنایی کامل با ResultSet در جاوا در این جلسه سراغ یکی از بخش‌های کلیدی JDBC می‌رویم: ResultSet. با هم یاد می‌گیریم ResultSet چیست، چه کاربردی دارد و چگونه می‌توانیم داده‌های حاصل از کوئری‌های دیتابیس را با استفاده از آن مدیریت کنیم. در این ویدیو بررسی می‌کنیم: - معرفی ResultSet و عملیات‌های متداول آن - ایجاد و استفاده از ResultSet در عمل - متد مهم next() و نحوه پیمایش داده‌ها - آشنایی با ResultSetMetaData برای کار با اطلاعات ستون‌ها - انواع ResultSet و بررسی TYPE_SCROLL_INSENSITIVE در پایان جلسه یک مرور کلی داریم تا نکات مهم بهتر در ذهن تثبیت شوند. 📌 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی می‌تونی توی گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.
00:45:58🎯رایگان

📄جزوه

مفاهیم کلیدی

  • ResultSet

یک Object در Java که پس از اجرای پرس‌وجوهای SQL (مانند SELECT) توسط دیتابیس برگردانده می‌شود و شامل تمام سطرهای داده‌ای است که با شرط کوری مطابقت دارند.

  • Cursor

یک نشانگر داخلی در ResultSet که به سطر جاری (Current Row) اشاره می‌کند. با استفاده از متدهایی می‌توان این نشانگر را بین سطرها حرکت داد.

  • Navigation

قابلیت پیمایش در میان داده‌های بازگشتی. به طور پیش‌فرض پیمایش فقط به سمت جلو امکان‌پذیر است، اما می‌توان آن را برای حرکت به عقب یا پرش به سطرهای خاص تنظیم کرد.

  • ResultSetMetaData

یک اینترفیس کمکی که اطلاعاتی درباره ساختار خودِ نتایج (نه لزوماً داده‌ها) ارائه می‌دهد؛ مانند تعداد ستون‌ها، نام هر ستون و نوع داده‌ای هر فیلد.

  • Column Index

شماره ترتیب ستون‌ها در نتایج بازگشتی که برخلاف اکثر ساختارهای داده در برنامه‌نویسی، در ResultSet از شماره ۱ شروع می‌شود.

نکات مهم مصاحبه‌ای

  • موقعیت اولیه Cursor در یک ResultSet جدید کجاست؟
    نشانگر در ابتدا در موقعیت "قبل از اولین سطر" قرار دارد. بنابراین همیشه باید قبل از خواندن اولین داده، متد next() را فراخوانی کنید تا نشانگر روی سطر اول قرار بگیرد.

  • تفاوت بین فراخوانی ستون‌ها با نام (Label) و شماره (Index) چیست؟
    دسترسی با شماره (Index) سریع‌تر است، اما دسترسی با نام ستون خوانایی کد را بالاتر برده و در صورت تغییر ترتیب ستون‌ها در کوری SQL (مثلاً با زدن SELECT *) مانع از بروز خطا می‌شود.

  • انواع اصلی اسکرول در ResultSet چیست؟
    حالت TYPE_FORWARD_ONLY که فقط اجازه حرکت به جلو را می‌دهد و حالت TYPE_SCROLL_INSENSITIVE که اجازه حرکت به عقب و جلو را می‌دهد اما تغییرات همزمان دیتابیس را نشان نمی‌دهد.

  • چرا بستن (Close) کردن ResultSet اهمیت دارد؟
    برای جلوگیری از نشت حافظه (Memory Leak) و آزادسازی منابع اشغال شده در دیتابیس و اپلیکیشن، حتماً باید بعد از اتمام کار، ResultSet بسته شود.

مثال یا سناریوی کاربردی

در این آموزش، ابتدا یک اتصال به دیتابیس برقرار شده و جدولی به نام users ساخته می‌شود. پس از درج (Insert) چند کاربر، یک PreparedStatement برای جستجوی کاربران بر اساس نام کاربری ایجاد می‌گردد.

مراحل گام‌به‌گام استخراج داده: ۱. اجرای کوری با executeQuery() که خروجی را در یک ResultSet قرار می‌دهد. ۲. استفاده از یک حلقه while که شرط آن resultSet.next() است. این متد تا زمانی که سطر بعدی وجود داشته باشد مقدار true برمی‌گرداند. ۳. در داخل حلقه، با متدهایی مثل getString(columnName) یا getInt(columnIndex) مقادیر فیلدها استخراج می‌شوند.

while (rs.next()) {
    String fName = rs.getString("first_name");
    String uName = rs.getString(4); // دسترسی از طریق ایندکس ستون چهارم
    System.out.println(fName + " : " + uName);
}

بیشتر بدانید

  • نکته درباره Metadata

با استفاده از متد getColumnType از اینترفیس MetaData می‌توان به کد عددی نوع داده در دیتابیس دسترسی پیدا کرد. برای مثال عدد ۴ نماینده Integer و عدد ۱۲ نماینده VarChar (رشته) است.

تنظیمات پیشرفته پیمایش

اگر بخواهید از متدهایی مثل previous() (برگشت به عقب)، first() (رفتن به اولین سطر) یا last() (رفتن به آخرین سطر) استفاده کنید، هنگام ساختن Statement باید صراحتاً نوع اسکرول را مشخص کنید، در غیر این صورت با خطای SQL Exception مواجه خواهید شد.