300

Apps Komut Dosyası, standart Java Database Connectivity teknolojisinin sarmalayıcısı 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.

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

Google Cloud SQL veritabanları

Google Cloud SQL, Google'ın bulutunda bulunan ilişkisel veritabanları oluşturmanıza olanak tanır. Cloud SQL'in kullanımınıza bağlı olarak ücretlendirilebileceğ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 Script'in 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öntem, veritabanınıza erişim için bir dizi IP aralığını yetkilendirmenizi gerektirir.

Bu yöntem, Jdbc.getCloudSqlConnection(url) yöntemini kullanarak bir Google Cloud SQL MySQL örneğine 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) bölümüne bakın.

Jdbc.getConnection(url) kullanma

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

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

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

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

Diğer veritabanları

Kendi MySQL, Microsoft SQL Server veya Oracle veritabanınız varsa Apps Script'in JDBC hizmeti üzerinden bu veritabanına bağlanabilirsiniz.

Diğer veritabanı bağlantılarını oluşturma

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

Bu izin verilenler listeleri oluşturulduktan sonra, Jdbc.getConnection(url) yöntemlerinden birini ve veritabanınızın URL'sini kullanarak veritabanına 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 üzere Jdbc.getConnection(url) yöntemini kullanmanız gerekir.

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

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

Çoğu geliştirici, veritabanı, kullanıcı ve tablo oluşturmak için MySQL komut satırı aracını kullanır. Ancak, aşağıda gösterildiği gibi Apps Komut Dosyası'nda aynı işlemi yapabilirsiniz. Komut dosyanızın her zaman root olarak veritabanına bağlanması gerekmemesi için en az bir başka kullanıcı 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 ve 500 kayıttan oluşan bir toplu işin nasıl yazılacağı gösterilmektedir. Toplu işlemler için gruplandırma hayati önem taşır.

Ayrıca, değişkenlerin ? ile gösterildiği parametreli 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 verileri kaçırmak üzere 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ümesinde döngü oluşturarak 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

JDBC bağlantıları, bir komut dosyası yürütmeyi tamamladığında otomatik olarak kapanır. (Aramayı yapan HTML hizmet sayfası açık kalsa bile tek bir google.script.run aramanın tam bir yürütme olarak sayıldığını unutmayın.)

Bununla birlikte, bir bağlantının, ifadenin veya sonuç kümesinin komut dosyasının sonundan önce tamamlandığını biliyorsanız JdbcConnection.close(), JdbcStatement.close() veya JdbcResultSet.close() çağırarak bunları manuel olarak kapatmanız iyi olur.

Uyarı veya istem iletişim kutusu gösterilmesi açık JDBC bağlantılarını da sonlandırır. Ancak özel menüler veya iletişim kutuları ve özel içerikli kenar çubukları gibi diğer gösterim kullanıcı arayüzü öğeleri bu kapsamda değildir.

​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.​