JDBC

Apps Script dapat terhubung ke database eksternal melalui layanan JDBC, yang merupakan wrapper seputar teknologi Konektivitas Database Java standar. Layanan JDBC mendukung Google Cloud SQL untuk database MySQL, MySQL, Microsoft SQL Server, dan Oracle.

Untuk memperbarui database eksternal menggunakan JDBC, skrip Anda harus membuka koneksi ke database, lalu membuat perubahan dengan mengirimkan pernyataan SQL.

Database Google Cloud SQL

Dengan Google Cloud SQL, Anda dapat membuat database relasional yang ada di cloud Google. Perhatikan bahwa Cloud SQL mungkin dikenai biaya berdasarkan penggunaan Anda.

Anda dapat membuat instance Google Cloud SQL dengan mengikuti langkah-langkah yang tercantum pada panduan memulai Cloud SQL.

Membuat koneksi Google Cloud SQL

Ada dua cara untuk membuat koneksi dengan database Google Cloud SQL menggunakan layanan JDBC Apps Script:

Metode ini dijelaskan di bawah. Keduanya valid, tetapi metode kedua mengharuskan Anda mengizinkan sekumpulan rentang IP untuk mengakses database Anda.

Metode ini membuat koneksi ke instance MySQL di Google Cloud SQL menggunakan metode Jdbc.getCloudSqlConnection(url). URL database memiliki bentuk jdbc:google:mysql://subname, dengan subname yang merupakan Nama koneksi instance MySQL yang tercantum pada halaman Ringkasan instance Cloud SQL di Konsol Google Cloud.

Untuk terhubung ke Cloud SQL SQL Server, lihat Jdbc.getConnection(url).

Menggunakan Jdbc.getConnection(url)

Untuk menggunakan metode ini, Anda harus mengizinkan rentang alamat IP Classless Inter-Domain Routing (CIDR) tertentu agar server Apps Script dapat terhubung ke database Anda. Sebelum menjalankan skrip, selesaikan langkah-langkah berikut:

  1. Dalam instance Google Cloud SQL, otorisasi rentang IP, satu per satu dari sumber data ini.

  2. Salin URL yang ditetapkan ke database Anda; URL tersebut harus memiliki format jdbc:mysql:subname.

Setelah memberikan otorisasi untuk rentang IP ini, Anda dapat membuat koneksi ke instance Google Cloud SQL menggunakan salah satu metode Jdbc.getConnection(url) dan URL yang Anda salin di atas.

{i>Database<i} lainnya

Jika sudah memiliki database MySQL, Microsoft SQL Server, atau Oracle sendiri, Anda dapat menghubungkannya melalui layanan JDBC Apps Script.

Membuat koneksi database lain

Untuk membuat koneksi database menggunakan layanan JDBC Apps Script, dalam setelan database, Anda harus mengizinkan rentang IP dari sumber data ini.

Setelah daftar yang diizinkan ini diterapkan, Anda dapat membuat koneksi ke database menggunakan salah satu metode Jdbc.getConnection(url) dan URL database Anda.

Kode contoh

Kode contoh di bawah ini mengasumsikan bahwa Anda terhubung ke database Google Cloud SQL, dan membuat koneksi database menggunakan metode Jdbc.getCloudSqlConnection(url). Untuk database lain, Anda harus menggunakan metode Jdbc.getConnection(url) untuk membuat koneksi database.

Untuk mengetahui informasi selengkapnya tentang metode JDBC, lihat dokumentasi Java untuk JDBC.

Membuat {i>database<i}, pengguna, dan tabel

Sebagian besar developer menggunakan alat command line MySQL untuk membuat database, pengguna, dan tabel. Namun, Anda dapat melakukan hal yang sama di Apps Script, seperti yang ditunjukkan di bawah ini. Sebaiknya buat setidaknya satu pengguna lain sehingga skrip Anda tidak selalu harus terhubung ke database sebagai 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);
  }
}

Menulis ke database

Contoh di bawah menunjukkan cara menulis satu data ke database serta batch yang berisi 500 data. Pengelompokan sangat penting untuk operasi massal.

Perhatikan juga penggunaan pernyataan berparameter, dengan variabel ditunjukkan oleh ?. Untuk mencegah serangan injeksi SQL, Anda harus menggunakan pernyataan berparameter untuk menghindari semua data yang disediakan pengguna.

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

Membaca dari database

Contoh ini menunjukkan cara membaca data dalam jumlah besar dari database, dengan melakukan loop pada hasil yang ditetapkan sesuai kebutuhan.

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

Menutup koneksi

Koneksi JDBC ditutup secara otomatis saat skrip selesai dieksekusi. (Perlu diingat bahwa satu panggilan google.script.run dihitung sebagai eksekusi lengkap, meskipun halaman layanan HTML yang melakukan panggilan tetap terbuka.)

Meskipun demikian, jika Anda sudah selesai dengan koneksi, pernyataan, atau kumpulan hasil sebelum akhir skrip, sebaiknya tutup secara manual dengan memanggil JdbcConnection.close(), JdbcStatement.close(), atau JdbcResultSet.close().

Menampilkan dialog pemberitahuan atau perintah juga akan menghentikan semua koneksi JDBC yang terbuka. Namun, elemen lain yang menampilkan elemen UI, seperti menu atau dialog kustom, dan sidebar dengan konten kustom, tidak menampilkannya.

Google, Google Workspace, serta merek dan logo terkait adalah merek dagang Google LLC. Semua nama perusahaan dan produk lainnya adalah merek dagang masing-masing perusahaan yang bersangkutan.