জেডিবিসি

অ্যাপস স্ক্রিপ্ট জেডিবিসি পরিষেবার মাধ্যমে বাহ্যিক ডাটাবেসের সাথে সংযোগ করতে পারে, যা স্ট্যান্ডার্ড জাভা ডেটাবেস সংযোগ প্রযুক্তির চারপাশে একটি মোড়ক। JDBC পরিষেবা MySQL , MySQL, Microsoft SQL সার্ভার এবং Oracle ডেটাবেসের জন্য Google Cloud SQL সমর্থন করে৷

JDBC এর সাথে একটি বাহ্যিক ডাটাবেস আপডেট করতে, আপনার স্ক্রিপ্টকে অবশ্যই ডাটাবেসের সাথে একটি সংযোগ খুলতে হবে এবং তারপর SQL স্টেটমেন্ট পাঠিয়ে পরিবর্তন করতে হবে।

Google Cloud SQL ডাটাবেস

গুগল ক্লাউড এসকিউএল আপনাকে রিলেশনাল ডাটাবেস তৈরি করতে দেয় যা গুগলের ক্লাউডে থাকে। মনে রাখবেন Cloud SQL আপনার ব্যবহারের উপর ভিত্তি করে চার্জ দিতে পারে।

আপনি ক্লাউড SQL কুইকস্টার্টে তালিকাভুক্ত ধাপগুলি অনুসরণ করে একটি Google ক্লাউড SQL দৃষ্টান্ত তৈরি করতে পারেন।

গুগল ক্লাউড এসকিউএল সংযোগ তৈরি করা হচ্ছে

অ্যাপস স্ক্রিপ্টের JDBC পরিষেবা ব্যবহার করে একটি Google ক্লাউড SQL ডাটাবেসের সাথে সংযোগ স্থাপনের দুটি উপায় রয়েছে:

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

এই পদ্ধতিটি Jdbc.getCloudSqlConnection(url) পদ্ধতি ব্যবহার করে একটি Google ক্লাউড SQL MySQL উদাহরণের সাথে একটি সংযোগ তৈরি করে। ডাটাবেস URL-এর jdbc:google:mysql://subname আকারে রয়েছে, যেখানে subname হল MySQL ইনস্ট্যান্স সংযোগের নাম যা Google ক্লাউড কনসোলে ক্লাউড এসকিউএল ইনস্ট্যান্স ওভারভিউ পৃষ্ঠায় তালিকাভুক্ত।

ক্লাউড SQL SQL সার্ভারের সাথে সংযোগ করতে, Jdbc.getConnection(url) দেখুন।

Jdbc.getConnection(url) ব্যবহার করে

এই পদ্ধতিটি ব্যবহার করার জন্য, আপনাকে অবশ্যই নির্দিষ্ট ক্লাসলেস ইন্টার-ডোমেন রাউটিং (CIDR) আইপি অ্যাড্রেস রেঞ্জ অনুমোদন করতে হবে যাতে অ্যাপস স্ক্রিপ্টের সার্ভারগুলি আপনার ডাটাবেসের সাথে সংযোগ করতে পারে। আপনার স্ক্রিপ্ট চালানোর আগে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. আপনার Google ক্লাউড SQL দৃষ্টান্তে, এই ডেটা উৎস থেকে এক সময়ে IP রেঞ্জ অনুমোদন করুন

  2. আপনার ডাটাবেসে বরাদ্দ করা URLটি অনুলিপি করুন; এটির jdbc:mysql:subname ফর্ম থাকা উচিত।

একবার আপনি এই আইপি রেঞ্জগুলি অনুমোদন করলে, আপনি Jdbc.getConnection(url) পদ্ধতিগুলির একটি এবং উপরে কপি করা URL ব্যবহার করে আপনার Google ক্লাউড SQL ইন্সট্যান্সের সাথে সংযোগ তৈরি করতে পারেন৷

অন্যান্য ডাটাবেস

আপনার যদি ইতিমধ্যেই আপনার নিজস্ব MySQL, Microsoft SQL সার্ভার, বা Oracle ডাটাবেস থাকে, তাহলে আপনি Apps Script-এর JDBC পরিষেবার মাধ্যমে এর সাথে সংযোগ করতে পারেন।

অন্যান্য ডাটাবেস সংযোগ তৈরি করা

অ্যাপস স্ক্রিপ্ট JDBC পরিষেবা ব্যবহার করে একটি ডাটাবেস সংযোগ তৈরি করতে, আপনার ডাটাবেস সেটিংসে আপনাকে অবশ্যই এই ডেটা উৎস থেকে IP রেঞ্জ অনুমোদন করতে হবে।

একবার এই অনুমতি তালিকাগুলি জায়গায় হয়ে গেলে, আপনি Jdbc.getConnection(url) পদ্ধতি এবং আপনার ডাটাবেসের URL ব্যবহার করে ডাটাবেসের সাথে একটি সংযোগ তৈরি করতে পারেন।

কোডের উদাহরণ

নীচের নমুনা কোডটি অনুমান করে যে আপনি একটি Google ক্লাউড SQL ডাটাবেসের সাথে সংযোগ করছেন এবং Jdbc.getCloudSqlConnection(url) পদ্ধতি ব্যবহার করে ডেটাবেস সংযোগ তৈরি করছেন৷ অন্যান্য ডাটাবেসের জন্য আপনাকে অবশ্যই ডাটাবেস সংযোগ তৈরি করতে Jdbc.getConnection(url) পদ্ধতি ব্যবহার করতে হবে।

JDBC পদ্ধতি সম্পর্কে আরও তথ্যের জন্য, JDBC এর জন্য জাভা ডকুমেন্টেশন দেখুন।

একটি ডাটাবেস, ব্যবহারকারী এবং টেবিল তৈরি করুন

বেশিরভাগ বিকাশকারী ডাটাবেস, ব্যবহারকারী এবং টেবিল তৈরি করতে MySQL কমান্ড-লাইন টুল ব্যবহার করে। যাইহোক, নীচে দেখানো হিসাবে, Apps স্ক্রিপ্টে একই জিনিস করা সম্ভব। কমপক্ষে একজন অন্য ব্যবহারকারী তৈরি করা একটি ভাল ধারণা যাতে আপনার স্ক্রিপ্টকে সবসময় ডাটাবেসের সাথে root হিসাবে সংযোগ করতে না হয়।

service/jdbc.gs
/**
 * Create a new database within a Cloud SQL instance.
 */
function createDatabase() {
  try {
    const conn = Jdbc.getCloudSqlConnection(instanceUrl, root, rootPwd);
    conn.createStatement().execute('CREATE DATABASE ' + db);
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

/**
 * Create a new user for your database with full privileges.
 */
function createUser() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, root, rootPwd);

    const stmt = conn.prepareStatement('CREATE USER ? IDENTIFIED BY ?');
    stmt.setString(1, user);
    stmt.setString(2, userPwd);
    stmt.execute();

    conn.createStatement().execute('GRANT ALL ON `%`.* TO ' + user);
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

/**
 * Create a new table in the database.
 */
function createTable() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
    conn.createStatement().execute('CREATE TABLE entries ' +
      '(guestName VARCHAR(255), content VARCHAR(255), ' +
      'entryID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(entryID));');
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

ডাটাবেসে লিখুন

নীচের উদাহরণগুলি দেখায় কিভাবে ডাটাবেসে একটি একক রেকর্ড লিখতে হয় সেইসাথে 500 রেকর্ডের একটি ব্যাচ। বাল্ক অপারেশনের জন্য ব্যাচিং অত্যাবশ্যক।

প্যারামিটারাইজড স্টেটমেন্টের ব্যবহারও নোট করুন, যেখানে ভেরিয়েবলগুলি দ্বারা চিহ্নিত করা হয় ? . এসকিউএল ইনজেকশন আক্রমণ প্রতিরোধ করতে, ব্যবহারকারীর সরবরাহ করা সমস্ত ডেটা এড়িয়ে যাওয়ার জন্য আপনাকে প্যারামিটারাইজড স্টেটমেন্ট ব্যবহার করা উচিত।

service/jdbc.gs
/**
 * Write one row of data to a table.
 */
function writeOneRecord() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);

    const stmt = conn.prepareStatement('INSERT INTO entries ' +
      '(guestName, content) values (?, ?)');
    stmt.setString(1, 'First Guest');
    stmt.setString(2, 'Hello, world');
    stmt.execute();
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

/**
 * Write 500 rows of data to a table in a single batch.
 */
function writeManyRecords() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
    conn.setAutoCommit(false);

    const start = new Date();
    const stmt = conn.prepareStatement('INSERT INTO entries ' +
      '(guestName, content) values (?, ?)');
    for (let i = 0; i < 500; i++) {
      stmt.setString(1, 'Name ' + i);
      stmt.setString(2, 'Hello, world ' + i);
      stmt.addBatch();
    }

    const batch = stmt.executeBatch();
    conn.commit();
    conn.close();

    const end = new Date();
    console.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

ডাটাবেস থেকে পড়ুন

এই উদাহরণটি দেখায় কিভাবে ডাটাবেস থেকে প্রচুর সংখ্যক রেকর্ড পড়তে হয়, প্রয়োজনীয় হিসাবে সেট করা ফলাফলের উপর লুপ করে।

service/jdbc.gs
/**
 * Read up to 1000 rows of data from the table and log them.
 */
function readFromTable() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
    const start = new Date();
    const stmt = conn.createStatement();
    stmt.setMaxRows(1000);
    const results = stmt.executeQuery('SELECT * FROM entries');
    const numCols = results.getMetaData().getColumnCount();

    while (results.next()) {
      let rowString = '';
      for (let col = 0; col < numCols; col++) {
        rowString += results.getString(col + 1) + '\t';
      }
      console.log(rowString);
    }

    results.close();
    stmt.close();

    const end = new Date();
    console.log('Time elapsed: %sms', end - start);
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

বন্ধ সংযোগ

একটি স্ক্রিপ্ট কার্যকর করা শেষ হলে JDBC সংযোগগুলি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়। (মনে রাখবেন যে একটি একক google.script.run কল সম্পূর্ণ কার্যকর হিসাবে গণনা করা হয়, এমনকি যদি কলটি করা HTML পরিষেবা পৃষ্ঠাটি খোলা থাকে।)

তবুও, যদি আপনি জানেন যে আপনি স্ক্রিপ্ট শেষ হওয়ার আগে একটি সংযোগ, বিবৃতি বা ফলাফল সেট করে ফেলেছেন, তাহলে JdbcConnection.close() , JdbcStatement.close() , বা JdbcResultSet.close()

একটি সতর্কতা বা প্রম্পট ডায়ালগ দেখানো যেকোনও খোলা JDBC সংযোগ বন্ধ করে দেয়। যাইহোক, অন্যান্য দেখানো UI উপাদানগুলি - যেমন কাস্টম মেনু বা ডায়ালগ এবং কাস্টম সামগ্রী সহ সাইডবারগুলি - তা নয়৷

Google, Google Workspace এবং সম্পর্কিত চিহ্ন এবং লোগো হল Google LLC-এর ট্রেডমার্ক। অন্যান্য সমস্ত কোম্পানি এবং পণ্যের নাম হল সেই কোম্পানিগুলির ট্রেডমার্ক যার সাথে তারা যুক্ত