JDBC

Apps Script को JDBC सेवा की मदद से बाहरी डेटाबेस से कनेक्ट किया जा सकता है. यह सेवा, स्टैंडर्ड Java डेटाबेस कनेक्टिविटी टेक्नोलॉजी का रैपर है. JDBC सेवा, MySQL के लिए Google Cloud SQL, MySQL, Microsoft SQL सर्वर, और Oracle डेटाबेस के साथ काम करती है.

JDBC के साथ किसी बाहरी डेटाबेस को अपडेट करने के लिए, आपकी स्क्रिप्ट को डेटाबेस से कनेक्शन खोलना होगा और फिर SQL स्टेटमेंट भेजकर बदलाव करना होगा.

Google Cloud SQL डेटाबेस

Google Cloud SQL आपको Google के क्लाउड में मौजूद मिलते-जुलते डेटाबेस बनाने देता है. ध्यान दें कि Cloud SQL आपके इस्तेमाल के हिसाब से शुल्क ले सकता है.

Cloud SQL क्विकस्टार्ट में दिया गया तरीका अपनाकर, Google Cloud SQL इंस्टेंस बनाया जा सकता है.

Google Cloud SQL कनेक्शन बनाना

Apps Script की JDBC सेवा का इस्तेमाल करके, Google Cloud SQL डेटाबेस के साथ कनेक्शन बनाने के दो तरीके हैं:

इन तरीकों से जुड़ी ज़्यादा जानकारी नीचे दी गई है. दोनों मान्य हैं, लेकिन दूसरे तरीके के लिए आपको अपने डेटाबेस को ऐक्सेस करने के लिए, आईपी रेंज के एक सेट को अनुमति देनी होगी.

यह तरीका, Jdbc.getCloudSqlConnection(url) तरीके का इस्तेमाल करके, Google Cloud SQL MySQL इंस्टेंस से कनेक्शन बनाता है. डेटाबेस का यूआरएल jdbc:google:mysql://subname का होता है. इसमें subname, MySQL इंस्टेंस कनेक्शन का नाम है. यह नाम, Google Cloud Console में Cloud SQL इंस्टेंस के खास जानकारी पेज पर दिया गया है.

Cloud SQL सर्वर से कनेक्ट करने के लिए, Jdbc.getConnection(url) देखें.

Jdbc.getConnection(url) का इस्तेमाल करना

इस तरीके का इस्तेमाल करने के लिए, आपको कुछ क्लासलेस इंटर-डोमेन रूटिंग (सीआईडीआर) आईपी पते की रेंज को अनुमति देनी होगी, ताकि Apps Script के सर्वर आपके डेटाबेस से कनेक्ट कर सकें. अपनी स्क्रिप्ट चलाने से पहले, नीचे दिए गए चरण पूरे करें:

  1. अपने Google Cloud SQL इंस्टेंस में, इस डेटा सोर्स से एक-एक करके, आईपी रेंज की अनुमति दें.

  2. अपने डेटाबेस को असाइन किया गया यूआरएल कॉपी करें. इसका फ़ॉर्म jdbc:mysql:subname होना चाहिए.

इन आईपी रेंज को अनुमति देने के बाद, Jdbc.getConnection(url) में से किसी एक तरीके और ऊपर कॉपी किए गए यूआरएल का इस्तेमाल करके, अपने Google Cloud SQL इंस्टेंस से कनेक्शन बनाया जा सकता है.

अन्य डेटाबेस

अगर आपके पास पहले से अपना MySQL, Microsoft SQL सर्वर या Oracle डेटाबेस है, तो Apps Script की JDBC सेवा के ज़रिए, इसे कनेक्ट किया जा सकता है.

अन्य डेटाबेस कनेक्शन बनाना

Apps Script JDBC सेवा का इस्तेमाल करके डेटाबेस कनेक्शन बनाने के लिए, आपको अपनी डेटाबेस सेटिंग में जाकर, इस डेटा सोर्स से आईपी रेंज को अनुमति देनी होगी.

अनुमति वाले डोमेन की सूची बनाने के बाद, Jdbc.getConnection(url) में से किसी एक तरीके और अपने डेटाबेस के यूआरएल का इस्तेमाल करके, डेटाबेस से कनेक्शन बनाया जा सकता है.

नमूना कोड

नीचे दिया गया सैंपल कोड मान लेता है कि आपको Google Cloud SQL डेटाबेस से कनेक्ट करना है. यह Jdbc.getCloudSqlConnection(url) तरीके का इस्तेमाल करके, डेटाबेस कनेक्शन बनाता है. दूसरे डेटाबेस के लिए, डेटाबेस कनेक्शन बनाने के लिए, Jdbc.getConnection(url) तरीका इस्तेमाल करना चाहिए.

JDBC के तरीकों के बारे में ज़्यादा जानकारी के लिए, JDBC के लिए Java दस्तावेज़ देखें.

डेटाबेस, उपयोगकर्ता, और टेबल बनाना

ज़्यादातर डेवलपर, डेटाबेस, उपयोगकर्ता, और टेबल बनाने के लिए 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 रिकॉर्ड के बैच को कैसे लिखना है. बल्क ऑपरेशन के लिए बैच बनाना ज़रूरी है.

पैरामीटर वाले स्टेटमेंट के इस्तेमाल पर भी ध्यान दें, जिसमें वैरिएबल को ? से दिखाया जाता है. एसक्यूएल इंजेक्शन के दौरान होने वाले हमलों से बचने के लिए, आपको उपयोगकर्ताओं से दिए गए सभी डेटा को एस्केप करने के लिए पैरामीटर वाले स्टेटमेंट का इस्तेमाल करना चाहिए.

/**
 * 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 कॉल को एक प्रोसेस के तहत गिना जाता है, भले ही कॉल करने वाला एचटीएमएल सेवा पेज खुला रहे.)

फिर भी, अगर आपको पता है कि स्क्रिप्ट खत्म होने से पहले ही कनेक्शन, स्टेटमेंट या नतीजा सेट हो गया है, तो बेहतर होगा कि आप JdbcConnection.close(), JdbcStatement.close() या JdbcResultSet.close() को कॉल करके उन्हें मैन्युअल तरीके से बंद कर दें.

सूचना या प्रॉम्प्ट डायलॉग दिखाने से, खुले हुए सभी JDBC कनेक्शन खत्म हो जाते हैं. हालांकि, यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखाने वाले दूसरे एलिमेंट, जैसे कि कस्टम मेन्यू या डायलॉग और कस्टम कॉन्टेंट वाले साइडबार दिखाने से काम नहीं बनता.

Google, Google Workspace, और इससे जुड़े निशान और लोगो, Google LLC के ट्रेडमार्क हैं. दूसरी सभी कंपनियां और प्रॉडक्ट के नाम, उन कंपनियों के ट्रेडमार्क हैं जिनसे वे जुड़े हुए हैं.