300

Apps Komut Dosyası, harici veritabanlarına JDBC hizmeti aracılığıyla bağlanabilir. JDBC hizmeti, standart Java Veritabanı Bağlantı teknolojisini çevreleyen bir sarmalayıcıdır. JDBC hizmeti MySQL için Google Cloud SQL, MySQL, Microsoft SQL Server ve Oracle veritabanlarını destekler.

Harici bir veritabanını JDBC ile güncellemek için komut dosyanızın veritabanına bir bağlantı açması ve SQL ifadeleri göndererek değişiklik yapması gerekir.

Google Cloud SQL veritabanları

Google Cloud SQL, Google'ın bulutunda yer alan ilişkisel veritabanları oluşturmanıza olanak tanır. Kullanımınıza bağlı olarak Cloud SQL için ücret alınabileceğini unutmayın.

Cloud SQL hızlı başlangıç kılavuzunda listelenen adımları uygulayarak Google Cloud SQL örneği oluşturabilirsiniz.

Google Cloud SQL bağlantıları oluşturma

Apps Komut Dosyası'nın JDBC hizmetini kullanarak Google Cloud SQL veritabanıyla bağlantı kurmanın iki yolu vardır:

Bu yöntemler aşağıda açıklanmıştır. Her ikisi de geçerlidir ancak ikinci yöntemde veritabanınıza erişim için bir dizi IP aralığı yetkilendirmeniz gerekir.

Bu yöntem, Jdbc.getCloudSqlConnection(url) yöntemini kullanarak bir Google Cloud SQL MySQL örneğiyle bağlantı oluşturur. Veritabanı URL'si jdbc:google:mysql://subname biçimindedir. Burada subname, Google Cloud Console'daki Cloud SQL örneği Genel Bakış sayfasında listelenen MySQL Örneği bağlantı adıdır.

Cloud SQL SQL Server'a bağlanmak için Jdbc.getConnection(url) adresini ziyaret edin.

Jdbc.getConnection(url) yöntemini kullanarak

Bu yöntemi kullanabilmek için belirli Sınıfsız Alanlar Arası Yönlendirme (CIDR) IP adresi aralıklarını yetkilendirmeniz gerekir. Böylece Apps Komut Dosyası sunucuları veritabanınıza bağlanabilir. Komut dosyanızı çalıştırmadan önce aşağıdaki adımları tamamlayın:

  1. Google Cloud SQL örneğinizde, bu veri kaynağından tek tek olmak üzere IP aralıklarını yetkilendirin.

  2. Veritabanınıza atanan URL'yi kopyalayın. jdbc:mysql:subname biçiminde olmalıdır.

Bu IP aralıklarını yetkilendirdikten sonra Jdbc.getConnection(url) yöntemlerinden birini ve yukarıda kopyaladığınız URL'yi kullanarak Google Cloud SQL örneğinizle bağlantı oluşturabilirsiniz.

Diğer veritabanları

Kendi MySQL, Microsoft SQL Server veya Oracle veritabanınız varsa Apps Komut Dosyası'nın JDBC hizmeti üzerinden bağlanabilirsiniz.

Başka veritabanı bağlantıları oluşturma

Apps Komut Dosyası JDBC hizmetini kullanarak veritabanı bağlantısı oluşturmak için veritabanı ayarlarınızda IP aralıklarını bu veri kaynağından yetkilendirmeniz gerekir.

Bu izin verilenler listeleri oluşturulduktan sonra Jdbc.getConnection(url) yöntemlerinden birini ve veritabanınızın URL'sini kullanarak veritabanıyla bağlantı oluşturabilirsiniz.

Örnek kod

Aşağıdaki örnek kod, bir Google Cloud SQL veritabanına bağlandığınızı varsayar ve Jdbc.getCloudSqlConnection(url) yöntemini kullanarak veritabanı bağlantıları oluşturur. Diğer veritabanları için veritabanı bağlantıları oluşturmak amacıyla Jdbc.getConnection(url) yöntemini kullanmanız gerekir.

JDBC yöntemleri hakkında daha fazla bilgi için JDBC'nin Java belgelerine bakın.

Veritabanı, kullanıcı ve tablo oluşturma

Çoğu geliştirici; veritabanları, kullanıcılar ve tablolar oluşturmak için MySQL komut satırı aracını kullanır. Ancak aynı şey Apps Komut Dosyası'nda da aşağıda gösterildiği gibi gerçekleştirilebilir. Komut dosyanızın veritabanına her zaman root olarak bağlanmasına gerek kalmaması için en az bir kullanıcı daha oluşturmanız önerilir.

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

Veritabanına yazma

Aşağıdaki örneklerde, veritabanına tek bir kaydın yanı sıra 500 kayıtlık bir grubun nasıl yazılacağı gösterilmektedir. Toplu işlem, toplu işlemler için hayati önem taşır.

Değişkenlerin ? ile belirtildiği parametreleştirilmiş ifadelerin kullanımına da dikkat edin. SQL yerleştirme saldırılarını önlemek için kullanıcı tarafından sağlanan tüm verilerden çıkış yapmak üzere parametreleştirilmiş ifadeler kullanmanız gerekir.

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

Veritabanından okuma

Bu örnekte, gerektiğinde sonuç kümesi üzerinde döngü yaparak çok sayıda kaydın veritabanından nasıl okunacağı gösterilmektedir.

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

Bağlantıları kapatma

Bir komut dosyasının yürütülmesi bittiğinde JDBC bağlantıları otomatik olarak kapanır. (Çağrıyı yapan HTML hizmet sayfası açık kalsa bile tek bir google.script.run çağrısının, tam bir yürütme işlemi olarak sayıldığını unutmayın.)

Bununla birlikte, komut dosyasının bitiminden önce bir bağlantı, ifade veya sonuç kümesinin bittiğini biliyorsanız JdbcConnection.close(), JdbcStatement.close() veya JdbcResultSet.close() yöntemini çağırarak bunları manuel olarak kapatmak iyi bir fikirdir.

Bir uyarı veya istem iletişim kutusunun gösterilmesi tüm açık JDBC bağlantılarını da sonlandırır. Ancak özel menüler veya özel içerik barındıran iletişim kutuları ve kenar çubukları gibi diğer kullanıcı arayüzü öğeleri gösterilmez.

Google, Google Workspace ve ilgili markalar ile logolar Google LLC şirketinin ticari markalarıdır. Diğer tüm şirket ve ürün adları ilişkili oldukları şirketlerin ticari markalarıdır.