300

Apps Komut Dosyası, standart Java Veritabanı Bağlantısı teknolojisi etrafında bir sarmalayıcı olan JDBC hizmeti aracılığıyla harici veritabanlarına bağlanabilir. 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ı ile bir bağlantı açması ve SQL ifadeleri göndererek değişiklikler yapması gerekir.

Google Cloud SQL veritabanları

Google Cloud SQL, Google'ın bulutunda bulunan ilişkisel veritabanları oluşturmanıza olanak tanır. Kullanımınıza bağlı olarak Cloud SQL için ücret uygulanabileceğ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 bir 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şmek için bir grup IP aralığını yetkilendirmeniz gerekir.

Bu yöntem, Jdbc.getCloudSqlConnection(url) yöntemini kullanarak Google Cloud SQL MySQL örneğiyle bağlantı oluşturur. Veritabanı URL'si jdbc:google:mysql://subname biçimindedir. Burada subname, Google Cloud konsolundaki 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) işlevini kullanma

Bu yöntemi kullanmak 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 teker teker 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ılar oluşturabilirsiniz.

Diğer veritabanları

Kendi MySQL, Microsoft SQL Server veya Oracle veritabanınız varsa Apps Komut Dosyası'nın JDBC hizmeti aracılığıyla bu veritabanına 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 uygulandıktan 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ı ve Jdbc.getCloudSqlConnection(url) yöntemini kullanarak veritabanı bağlantıları oluşturduğunu varsayar. Diğer veritabanları için Jdbc.getConnection(url) yöntemini kullanarak veritabanı bağlantıları oluşturmanız gerekir.

JDBC yöntemleri hakkında daha fazla bilgi için JDBC için Java dokümanlarına 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, aşağıda gösterildiği gibi Apps Komut Dosyası'nda da aynı işlemi yapmak mümkündür. En az bir kullanıcı daha oluşturmanız önerilir. Böylece komut dosyanız, veritabanına her zaman root olarak bağlanmak zorunda kalmaz.

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 örnekler, 500 kayıtlık bir grubun yanı sıra veritabanına tek bir kaydın nasıl yazılacağını göstermektedir. Toplu işlem, toplu işlemler için hayati önem taşır.

Ayrıca, değişkenlerin ? ile gösterildiği parametre haline getirilmiş 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ış yapacak parametreli 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ümesini döngüye alarak veritabanından çok sayıda kaydın 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 hizmeti sayfası açık kalsa bile tek bir google.script.run çağrısının tam bir yürütme olarak sayıldığını unutmayın.)

Yine de, komut dosyasının bitiminden önce bir bağlantı, ifade veya sonuç kümesiyle ilgili işiniz bittiyse bunları JdbcConnection.close(), JdbcStatement.close() veya JdbcResultSet.close() çağrısı yaparak manuel olarak kapatmak iyi bir fikirdir.

Bir uyarı veya istem iletişim kutusunun gösterilmesi de açık JDBC bağlantılarını sonlandırır. Ancak, gösterilen diğer kullanıcı arayüzü öğeleri (ör. özel menüler veya iletişim kutuları ve özel içeriğe sahip kenar çubukları) görünmez.

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.