CodeGym/Java Course/All lectures for BN purposes/PreparedStatement নিয়ে কাজ করা

PreparedStatement নিয়ে কাজ করা

বিদ্যমান

বিবৃতি প্রকার

আমরা ইতিমধ্যে সহজ স্টেটমেন্ট ইন্টারফেস দেখেছি । এবং যদিও এটি কাজের জন্য বেশ উপযুক্ত, এটি জটিল প্রশ্নের জন্য এতটা উপযুক্ত নয়। কিছু উত্সে, মতামত প্রকাশ করা হয় যে স্টেটমেন্ট ব্যবহার করা একেবারেই প্রয়োজনীয় নয় - পরিবর্তে আরও জটিল এবং আরও কার্যকরীভাবে সমৃদ্ধ ইন্টারফেসগুলি উপযুক্ত।

  • প্রস্তুত বিবৃতি
  • কলযোগ্য বিবৃতি

একটি বেশ যুক্তিসঙ্গত প্রশ্ন উঠছে - কেন এই ইন্টারফেস প্রয়োজন? আসুন এটা বের করা যাক।

প্রথমে, আমরা PreparedStatement ইন্টারফেস এবং অন্যান্য JDBC বৈশিষ্ট্যগুলি দেখব । আমরা পরে কলেবল স্টেটমেন্ট ইন্টারফেসের দিকে ফিরে যাব - এটির ব্যবহার, প্রথমত, এত সাধারণ নয় এবং দ্বিতীয়ত, এটি সম্পর্কে সমস্ত কিছু বিবেচনা করার পরে, কথোপকথনটি ইতিমধ্যে বেশ সংক্ষিপ্ত করা যেতে পারে।

এছাড়াও, এসকিউএল ইনজেকশন নামক ডেটাবেস হ্যাকিং-এর জনপ্রিয় পদ্ধতি থেকে PreparedStatement একটি দারুণ সাহায্য।

কিন্তু একটু পরে যে আরো.

প্রস্তুত বিবৃতি

আপনি যদি PreparedStatement নামটি অনুবাদ করার চেষ্টা করেন তবে আপনি "প্রস্তুত বিবৃতি" এর মতো কিছু পেতে পারেন। এখানে সবচেয়ে গুরুত্বপূর্ণ শব্দ হল "প্রস্তুত"। "প্রস্তুতি" কি?

আমরা এই সমস্যাটি বিবেচনা করার আগে, আমি সুবিধার দৃষ্টিকোণ থেকে একটি বরং গুরুত্বপূর্ণ পয়েন্ট দেখার প্রস্তাব দিই, যা প্রায়শই ঘটে। সুতরাং, কিছু অ্যাপ্লিকেশনে, আমাদের যোগাযোগের সারণীতে যোগাযোগের ডেটা সন্নিবেশ করাতে হবে। এটি করার জন্য, আমাদের এই মত একটি প্রশ্ন প্রস্তুত করতে হবে:

INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) VALUES (‘Harry’,'Potter','+79112345678','harry@example.com);

প্রথম নজরে, মনে হচ্ছে সবকিছু এত কঠিন এবং ভীতিকর নয়। আমাদের একটি কোড লিখতে হবে যা প্যারামিটার থেকে আমাদের প্রয়োজনীয় স্ট্রিং সংগ্রহ করবে: প্রথম নাম, পদবি, ঠিকানা এবং ফোন নম্বর। আপনাকে শুধু মনে রাখতে হবে যে সমস্ত স্ট্রিং ডেটা একটি একক উদ্ধৃতি অক্ষর দ্বারা বেষ্টিত হতে হবে।

যদি আমরা এটি একটি পৃথক ফাংশনে করি, তাহলে আমরা এরকম কিছু পাই:

public String buildInsert(String firstName,, String lastName, String phone, String email) {
    String sql = "INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL)+VALUES ('" + firstName + "','" + lastName + "','" + phone + "','" + email + ")";
    return sql;
}

আমরা ফর্মের প্যারামিটার ফাংশনে প্রথম নাম, পদবি, ফোন নম্বর এবং ঠিকানা পাস করি এবং সেগুলি থেকে আমরা একটি SQL ক্যোয়ারী স্ট্রিং রচনা করি। উদ্ধৃতি ছবি সামান্য লুণ্ঠন, কিন্তু এখনও পর্যন্ত এটা ভীতিকর নয়.

ঠিক আছে, সংখ্যা সম্পর্কে কি? তাদের উদ্ধৃতি দিয়ে ঘেরা হওয়ার দরকার নেই। ওপাঙ্কি, একটি ক্ষেত্রে আপনার উদ্ধৃতি দরকার, অন্য ক্ষেত্রে আপনার নেই। পরিস্থিতি আরও জটিল হচ্ছে।

এখন আরও একটি সমস্যা যোগ করা যাক - যদি স্ট্রিংয়ের ভিতরে একটি সাধারণ উদ্ধৃতি (এবং একটিও না) থাকে? আপনাকে প্রথমে এই জাতীয় উদ্ধৃতিগুলি সন্ধান করতে হবে এবং সেগুলি প্রক্রিয়া করতে হবে। Mdaaa. একরকম আমরা অস্বস্তি বোধ করতে শুরু করি।

যদি আমরা এখন তারিখ প্রক্রিয়াকরণ যোগ করি, তাহলে কাজটি সম্পূর্ণ বিরক্তিকর হয়ে ওঠে - আপনাকে প্রচুর পরিমাণে কাজ করতে হবে। তারিখগুলি সাধারণত অপ্রীতিকর হয় - বিভিন্ন SQL সার্ভার তারিখের জন্য বিভিন্ন ফর্ম্যাট গ্রহণ করে।

তাহলে আমরা কি দেখতে পাচ্ছি? যদি আমাদের কোয়েরির ভিতরে প্যারামিটার ব্যবহার করতে হয়, তাহলে ম্যানুয়ালি ক্যোয়ারী তৈরি করা খুবই অপ্রীতিকর হয়ে ওঠে। এবং শুধু অপ্রীতিকর নয় - আমি এমনকি বিরক্তিকর বলব। বিবেচনা করার জন্য প্রচুর সংখ্যক কেস রয়েছে এবং এটি একটি ভয়ানক বিরক্তিকর কাজ। মূলত, এই ধরনের ক্ষেত্রেই PreparedStatement ইন্টারফেস প্রস্তাব করা হয়েছিল ।

এই অনুরোধ আপনাকে দুটি জিনিস করতে অনুমতি দেয়:

  • যেখানে প্যারামিটারগুলি প্রতিস্থাপিত হবে সেগুলিকে নির্দেশ করে আগে থেকেই একটি অনুরোধ প্রস্তুত করুন৷
  • একটি নির্দিষ্ট ধরণের প্যারামিটার সেট করুন এবং তারপরে ইতিমধ্যে সেট করা প্যারামিটার সহ একটি ক্যোয়ারী চালান

প্রস্তুত বিবৃতি উদাহরণ

আমাদের প্যারামিটার সেট করার বিকল্পের জন্য PreparedStatement- এর কাঠামোটি এইরকম দেখাবে:

// Example variables
String firstName = "Harry";
String lastName = "Potter";
String phone = "+12871112233";
String email = "harry@example.com";

// Request with indication of places for parameters in the form of "?"
String sql = "INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) VALUES (?, ?, ?, ?)";

// Create a request. The con variable is an object of type Connection
PreparedStatement stmt = con.prepareStatement(sql);

// Set parameters
stmt.setString(1, firstName);
stmt.setString(2, lastName);
stmt.setString(3, phone);
stmt.setString(4, email);

// Execute the request
stmt.executeUpdate();

আপনি দেখতে পাচ্ছেন, সবকিছু বেশ সহজ।

প্রথমত, একটি এসকিউএল কোয়েরি লেখার সময়, যেখানে প্যারামিটারগুলি প্রতিস্থাপন করতে হবে সেগুলি প্রশ্ন চিহ্ন দিয়ে লেখা হয় - “?”।

দ্বিতীয়ত, অনুরোধটি con.prepareStatement() কল করে তৈরি করা হয় ।

তৃতীয়ত, প্যারামিটারের সেটিং সংখ্যা এবং মানের ইঙ্গিত দিয়ে যায়। অনুগ্রহ করে মনে রাখবেন যে প্যারামিটারের সংখ্যা 1 থেকে শুরু হয়, 0 থেকে নয়, যেমন আমরা অ্যারে এবং সংগ্রহের সাথে কাজ করার সময় অভ্যস্ত।

PreparedStatement ইন্টারফেসে স্ট্রিং সেট করার পদ্ধতি রয়েছে — setString() , সংখ্যা নির্ধারণের জন্য — setInt() , setLong() , setDouble() , তারিখ নির্ধারণের জন্য — setDate() । এবং আরও জটিল প্রকার - এটি ডকুমেন্টেশনে দেখা যায়।

চতুর্থত, stmt.executeUpdate() কে কল করা হয়েছে কোয়েরি স্ট্রিং নির্দিষ্ট না করেই।

আমি দৃঢ়ভাবে PreparedStatement এর সাথে বন্ধুত্ব করার পরামর্শ দিই - এটি একটি খুব কার্যকরী টুল।

মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই