ফলাফল সেট কাস্টমাইজেশন

আধুনিক JDBC API আপনাকে বস্তুগুলিকে ব্যাপকভাবে কাস্টমাইজ করতে দেয়।বিবৃতিএবংফলাফল সেট. উদাহরণস্বরূপ, ব্যবহার করেফলাফল সেটআপনি ডাটাবেসের সারি পরিবর্তন করতে পারেন।

একটি বিবৃতি বস্তু তৈরি করার সময়, আমরা এটিতে আমাদের ইচ্ছার একটি গুচ্ছ প্রেরণ করতে পারি। এই ইচ্ছাগুলি তিনটি গ্রুপে বিভক্ত করা যেতে পারে:

  • বেস সংযোগের ধরন
  • সমবর্তী অ্যাক্সেস নিয়ন্ত্রণ
  • অধ্যবসায় এবং লেনদেন

একটি বস্তু তৈরি করার সময় এই পরামিতিগুলি পাস করা যেতে পারেবিবৃতিবাপ্রস্তুত বিবৃতি. উদাহরণ:

Statement statement = connection.createStatement(
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT );

PreparedStatement statement = connection.prepareStatement(sql,
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT);

আমরা এই জিনিসগুলি গভীরভাবে অধ্যয়ন করব না, তবে আমি আপনাকে জানাতে চাই যে আপনি যদি অন্য কারও কোডে অনুরূপ কিছু পান তবে এটি সম্ভব।

ফলাফল সেট প্রকার

ফলাফল সেট একটি নির্দিষ্ট ধরনের হতে পারে। প্রকার রেজাল্টসেটের কিছু বৈশিষ্ট্য এবং ক্ষমতা সংজ্ঞায়িত করে।

সব ধরনের ডাটাবেস এবং JDBC ড্রাইভার দ্বারা সমর্থিত নয়। আপনি যে ধরনের ব্যবহার করতে চান তা সমর্থন করে কিনা তা দেখতে আপনাকে আপনার ডাটাবেস এবং JDBC ড্রাইভার পরীক্ষা করতে হবে। DatabaseMetaData.supportsResultSetType(int type) পদ্ধতি প্রদত্ত টাইপ সমর্থিত কি না তার উপর নির্ভর করে সত্য বা মিথ্যা প্রদান করে ।

লেখার সময়, ফলাফল সেট তিন ধরনের আছে:

  • ফলাফল সেট।TYPE_FORWARD_ONLY
  • ফলাফল সেট।TYPE_SCROLL_INSENSITIVE
  • ফলাফল সেট।TYPE_SCROLL_SENSITIVE

ডিফল্ট প্রকারটি হল TYPE_FORWARD_ONLY৷

TYPE_FORWARD_ONLY এর অর্থ হল যে ফলাফল সেটটি কেবলমাত্র এগিয়ে যাওয়া যেতে পারে৷ অর্থাৎ, আপনি শুধুমাত্র সারি 1, সারি 2, সারি 3, ইত্যাদি থেকে সরাতে পারবেন৷ একটি ফলাফলসেটে, আপনি পিছনে যেতে পারবেন না: আপনি দশম পড়ার পরে 9ম সারি থেকে ডেটা পড়তে পারবেন না৷

TYPE_SCROLL_INSENSITIVE এর অর্থ হল ফলাফল সেটটি সামনে বা পিছনে সরানো যেতে পারে (স্ক্রোল করা)। আপনি বর্তমান অবস্থানের সাথে সম্পর্কিত একটি অবস্থানে যেতে পারেন, বা একটি পরম অবস্থানে যেতে পারেন।

রেজাল্টসেট খোলা থাকা অবস্থায় এই ধরনের একটি ফলাফল সেট অন্তর্নিহিত ডেটা উৎসের পরিবর্তনের জন্য সংবেদনশীল নয় । অর্থাৎ, রেজাল্টসেটের একটি এন্ট্রি অন্য থ্রেড বা প্রক্রিয়া দ্বারা ডাটাবেসে পরিবর্তন করা হলে, এটি ইতিমধ্যে খোলা অবস্থায় প্রতিফলিত হবে না।ফলাফল সেটএই ধরনের.

TYPE_SCROLL_SENSITIVE এর অর্থ হল ফলাফল সেটটি সামনে বা পিছনে সরানো (স্ক্রোল করা) হতে পারে। আপনি বর্তমান অবস্থানের সাথে সম্পর্কিত একটি অবস্থানে যেতে পারেন, বা একটি পরম অবস্থানে যেতে পারেন।

রেজাল্টসেট খোলা থাকাকালীন এই ধরনের একটি ফলাফল সেট অন্তর্নিহিত ডেটা উৎসের পরিবর্তনের জন্য সংবেদনশীল । অর্থাৎ, রেজাল্টসেটের একটি এন্ট্রি অন্য থ্রেড বা প্রক্রিয়া দ্বারা ডাটাবেসে পরিবর্তন করা হলে, এটি ইতিমধ্যে খোলা অবস্থায় প্রতিফলিত হবে।ফলাফল সেটএই ধরনের.

সঙ্গতি

ResultSet-এর সঙ্গতি নির্ধারণ করে যে ResultSet আপডেট করা যাবে নাকি শুধুমাত্র পড়া যাবে।

কিছু ডাটাবেস এবং JDBC ড্রাইভার একটি ResultSet আপডেট করতে সমর্থন করে, কিন্তু সব নয়। DatabaseMetaData.supportsResultSetConcurrency(int concurrency) পদ্ধতি প্রদত্ত কনকারেন্সি মোড সমর্থিত কি না তার উপর নির্ভর করে সত্য বা মিথ্যা প্রদান করে ।

ResultSet-এ দুইটি স্তরের একত্রে থাকতে পারে:

  • ফলাফল সেট।CONCUR_READ_ONLY
  • ফলাফল সেট৷CONCUR_UPDATABLE৷

CONCUR_READ_ONLY মানে ফলাফল সেট শুধুমাত্র পড়া যাবে।

CONCUR_UPDATABLE মানে রেজাল্টসেট পড়া এবং পরিবর্তন করা যায়।

ডাটাবেসে তথ্য পরিবর্তনের একটি উদাহরণ

এই পরামিতিগুলির সাহায্যে, আপনি জেনারেট করা বিবৃতি এবং এর ফলাফল সেট নিয়ন্ত্রণ করতে পারেন।

উদাহরণস্বরূপ, আপনি একটি আপডেটযোগ্য ফলাফল সেট তৈরি করতে পারেন এবং ডাটাবেস পরিবর্তন করতে এটি ব্যবহার করতে পারেন। একটি বিবৃতি তৈরি করার সময়, নিম্নলিখিত শর্তগুলি পালন করা গুরুত্বপূর্ণ:

  • শুধুমাত্র একটি টেবিল নির্দিষ্ট করা হয়
  • ধারা দ্বারা যোগদান বা গোষ্ঠী ধারণ করে না
  • ক্যোয়ারী কলামে একটি প্রাথমিক কী থাকতে হবে

উপরের শর্তগুলি পূরণ হলে, আপডেট করা ফলাফল সেট ডাটাবেসের একটি টেবিল আপডেট করতে ব্যবহার করা যেতে পারে। একটি বিবৃতি বস্তু তৈরি করার সময়, আপনাকে নিম্নলিখিত পরামিতিগুলি নির্দিষ্ট করতে হবে:

Statement st = createStatement(Result.TYPE_SCROLL_INSENSITIVE, Result.CONCUR_UPDATABLE)

এই ধরনের বিবৃতি কার্যকর করার ফলাফল একটি আপডেটযোগ্য ফলাফল সেট। আপডেট পদ্ধতি হল ResultSet কার্সারটিকে আপনি যে সারিতে আপডেট করতে চান সেখানে নিয়ে যাওয়া এবং তারপর updateXXX() পদ্ধতিতে কল করুন ।

updateXXX পদ্ধতি getXXX() পদ্ধতির অনুরূপভাবে কাজ করে । updateXXX() পদ্ধতিতে দুটি পরামিতি রয়েছে। প্রথমটি হল আপডেট হওয়া কলামের সংখ্যা, যা একটি কলামের নাম বা সিরিয়াল নম্বর হতে পারে। দ্বিতীয়টি হ'ল ডেটা যা আপডেট করা দরকার এবং এই ডেটা টাইপটি অবশ্যই XXX এর মতোই হতে হবে৷

প্রকৃতপক্ষে ডাটাবেসের সারিটি আপডেট করার জন্য, ResultSet কার্সার পরিবর্তিত সারিটি ছেড়ে যাওয়ার আগে আপনাকে updateRow() পদ্ধতিতে কল করতে হবে , অন্যথায় পরিবর্তনগুলি ডাটাবেসে আসবে না।

এছাড়াও আপনি টেবিলে নতুন সারি যোগ করতে পারেন:

প্রথমে আপনাকে কার্সারটিকে একটি খালি লাইনে নিয়ে যেতে হবে। এটি করার জন্য, moveToInsertRow() পদ্ধতিতে কল করুন ।

তারপর আপনাকে updateXXX() পদ্ধতি ব্যবহার করে ডেটা দিয়ে এই সারিটি পূরণ করতে হবে ।

তারপরে আপনাকে সারিটি বেসে যুক্ত করতে inserterRow() পদ্ধতিতে কল করতে হবে ।

এবং অবশেষে, আপনাকে moveToCurrentRow() পদ্ধতিতে কল করে কার্সারটি ফিরিয়ে দিতে হবে ।

গুরুত্বপূর্ণ ! সমস্ত DBMS বর্ধিত বিবৃতির জন্য এই বিকল্পগুলিকে সমর্থন করে না। সমস্যার ক্ষেত্রে, একটি নির্দিষ্ট DBMS-এর অফিসিয়াল ডকুমেন্টেশন দেখুন।