JDBC

Apps Script می‌تواند از طریق سرویس JDBC به پایگاه‌های داده خارجی متصل شود. سرویس JDBC از Google Cloud SQL برای پایگاه‌های داده MySQL ، MySQL، Microsoft SQL Server و Oracle پشتیبانی می‌کند.

برای به روز رسانی یک پایگاه داده خارجی با JDBC، اسکریپت شما باید یک اتصال به پایگاه داده باز کند و سپس با ارسال دستورات SQL تغییراتی را ایجاد کند.

پایگاه داده های Google Cloud SQL

Google Cloud SQL به شما امکان می دهد پایگاه داده های رابطه ای ایجاد کنید که در ابر Google زندگی می کنند. توجه داشته باشید که Cloud SQL ممکن است بر اساس استفاده شما هزینه هایی را متحمل شود.

می‌توانید با دنبال کردن مراحل فهرست‌شده در شروع سریع Cloud SQL، یک نمونه Google Cloud SQL ایجاد کنید.

ایجاد اتصالات Google Cloud SQL

دو راه برای برقراری ارتباط با پایگاه داده Google Cloud SQL با استفاده از سرویس JDBC Apps Script وجود دارد:

این روش ها در زیر توضیح داده شده است. هر دو معتبر هستند، اما روش دوم مستلزم آن است که مجموعه ای از محدوده IP را برای دسترسی به پایگاه داده خود مجاز کنید.

این روش با استفاده از روش Jdbc.getCloudSqlConnection(url) به یک نمونه Google Cloud SQL MySQL اتصال ایجاد می کند. URL پایگاه داده به شکل jdbc:google:mysql://subname است، که در آن subname نام اتصال MySQL Instance است که در صفحه نمای کلی نمونه Cloud SQL در کنسول Google Cloud فهرست شده است.

برای اتصال به Cloud SQL SQL Server، به Jdbc.getConnection(url) مراجعه کنید.

استفاده از Jdbc.getConnection(url)

برای استفاده از این روش، باید محدوده‌های آدرس IP مسیریابی بین دامنه‌ای بدون کلاس (CIDR) را مجاز کنید تا سرورهای Apps Script بتوانند به پایگاه داده شما متصل شوند. قبل از اجرای اسکریپت، مراحل زیر را انجام دهید:

  1. در نمونه Google Cloud SQL خود، محدوده‌های IP را هر بار از این منبع داده مجاز کنید.

  2. URL که به پایگاه داده شما اختصاص داده شده را کپی کنید. باید به شکل jdbc:mysql:subname باشد.

هنگامی که این محدوده‌های IP را مجاز کردید، می‌توانید با استفاده از یکی از روش‌های Jdbc.getConnection(url) و URL که در بالا کپی کرده‌اید، به نمونه Google Cloud SQL خود اتصال ایجاد کنید.

سایر پایگاه های داده

اگر قبلاً پایگاه داده MySQL، Microsoft SQL Server یا Oracle خود را دارید، می توانید از طریق سرویس JDBC Apps Script به آن متصل شوید.

ایجاد سایر اتصالات پایگاه داده

به منظور ایجاد اتصال پایگاه داده با استفاده از سرویس Apps Script JDBC ، در تنظیمات پایگاه داده خود باید محدوده IP را از این منبع داده مجاز کنید.

پس از ایجاد این لیست های مجاز، می توانید با استفاده از یکی از روش های Jdbc.getConnection(url) و URL پایگاه داده خود، یک اتصال به پایگاه داده ایجاد کنید.

کد نمونه

کد نمونه زیر فرض می‌کند که شما به یک پایگاه داده Google Cloud SQL متصل می‌شوید، و اتصالات پایگاه داده را با استفاده از روش Jdbc.getCloudSqlConnection(url) ایجاد می‌کند. برای سایر پایگاه های داده باید از روش Jdbc.getConnection(url) برای ایجاد اتصالات پایگاه داده استفاده کنید.

برای اطلاعات بیشتر در مورد روش‌های JDBC، به مستندات جاوا برای JDBC مراجعه کنید.

یک پایگاه داده، کاربر و جدول ایجاد کنید

اکثر توسعه دهندگان از ابزار خط فرمان MySQL برای ایجاد پایگاه داده ها، کاربران و جداول استفاده می کنند. با این حال، همانطور که در زیر نشان داده شده است، می توان همان کار را در Apps Script انجام داد. ایده خوبی است که حداقل یک کاربر دیگر ایجاد کنید تا اسکریپت شما همیشه مجبور نباشد به عنوان root به پایگاه داده متصل شود.

/**
 * 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 رکورد را نشان می دهد. بچینگ برای عملیات انبوه حیاتی است.

همچنین به استفاده از عبارات پارامتری که در آن متغیرها با ? . برای جلوگیری از حملات تزریق SQL ، باید از عبارات پارامتری برای فرار از تمام داده های ارائه شده توسط کاربر استفاده کنید.

/**
 * 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);
  }
}

از پایگاه داده بخوانید

این مثال نشان می دهد که چگونه می توان تعداد زیادی رکورد را از پایگاه داده خواند و در صورت لزوم روی مجموعه نتایج حلقه زد.

/**
 * 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 باز را نیز خاتمه می دهد. با این حال، سایر عناصر رابط کاربری (مانند منوها یا دیالوگ‌های سفارشی و نوارهای کناری با محتوای سفارشی) نشان داده نمی‌شوند.

Google، Google Workspace، و علائم و نشان‌واره‌های مرتبط، علائم تجاری Google LLC هستند. تمام نام‌های شرکت و محصولات دیگر علائم تجاری شرکت‌هایی هستند که با آنها مرتبط هستند.​