300

Apps Komut Dosyası, harici veritabanlarına JDBC hizmeti Java Veritabanı Bağlantı teknolojisi. JDBC hizmeti MySQL için Google Cloud SQL, MySQL, Microsoft SQL'i destekler Sunucu ve Oracle veritabanları.

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

Google Cloud SQL veritabanları

Google Cloud SQL, canlı yayınlarda ilişkiye dayalı veritabanları nasıl sunabileceğinizi konuşacağız. Cloud SQL'in kullanımınıza bağlı olarak ücret alınabilir.

Şu adreste listelenen adımları uygulayarak bir Google Cloud SQL örneği oluşturabilirsiniz: Cloud SQL hızlı başlangıç kılavuzu.

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

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

Bu yöntemler aşağıda açıklanmıştır. Her ikisi de geçerlidir ancak ikinci yöntem veritabanınıza erişmek için bir grup IP aralığını yetkilendirmenizi gerektirir.

Bu yöntem, Jdbc.getCloudSqlConnection(url) işlevini kullanarak Google Cloud SQL MySQL örneğiyle bağlantı oluşturur yöntemidir. Veritabanı URL'si jdbc:google:mysql://subname biçimindedir; burada subname, MySQL Örnek bağlantı adıdır Cloud SQL örneğine ait Genel Bakış sayfasında, Google Cloud konsolunuza

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ı, Apps Komut Dosyası sunucularının veritabanınıza bağlanabilmesi için gereklidir. Komut dosyanızı çalıştırmadan önce aşağıdaki adımları tamamlayın:

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

  2. Veritabanınıza atanan URL'yi kopyalayın. URL'nin jdbc:mysql:subname formu.

Bu IP aralıklarını yetkilendirdikten sonra Jdbc.getConnection(url) yöntemleri ve yukarıda kopyaladığınız URL.

Diğer veritabanları

Zaten kendi MySQL, Microsoft SQL Server veya Oracle veritabanınız varsa bu komut dosyasına Apps Komut Dosyası'nın JDBC hizmeti üzerinden bağlanabilirsiniz.

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

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

Bu izin verilenler listeleri hazır olduğunda veritabanıyla bağlantı oluşturabilirsiniz Jdbc.getConnection(url) yöntemleri ve veritabanınızın URL'si.

Örnek kod

Aşağıdaki örnek kod bir Google Cloud SQL veritabanına bağlandığınızı varsayar. ve Jdbc.getCloudSqlConnection(url) yöntemidir. Diğer veritabanları için Jdbc.getConnection(url) yöntemini kullanabilirsiniz.

JDBC yöntemleri hakkında daha fazla bilgi için JDBC için Java belgeleri.

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

Çoğu geliştirici MySQL komut satırı aracını kullanarak veritabanı, kullanıcı ve tablo oluşturmanıza yardımcı olur. Ancak aynı şeyi şey, aşağıda gösterildiği gibidir. En az bir veya çok daha fazla komut dosyasının veritabanına her zaman bağlanmak zorunda kalmaması için veritabanına 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);
  }
}

Veritabanına yazma

Aşağıdaki örneklerde, veritabanına tek bir kaydın farklı 500 kayıtlık bir grup halini alır. Toplu işlem, toplu işlemler için hayati önem taşır.

Ayrıca, parametre haline getirilmiş ifadelerin kullanımını da unutmayın. ? ile gösterilir. Bunu önlemek için SQL yerleştirme saldırılarını önlemek için parametreli ifadeleri kullanarak kullanıcı tarafından sağlanan tüm verilerden çıkış yapın.

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 örnek, döngü oluşturup sonuç kümesini gerektiği şekilde devre dışı bırakabilirsiniz.

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. (Şurada kalsın: tek bir google.script.run çağrısını yapan HTML hizmeti sayfası olsa bile eksiksiz bir yürütme olarak sayılır çağrısı açık kalır.)

Yine de, bir bağlantı, ifade veya sonuç kümesi ile ilgili daha fazla şey bitmeden önce komut dosyasını çağırarak bunları manuel olarak kapatmak iyi bir fikirdir. JdbcConnection.close(), JdbcStatement.close(), veya JdbcResultSet.close().

Uyarı veya istem iletişim kutusu gösterme tüm açık JDBC bağlantılarını da sonlandırır. Ancak kullanıcı arayüzünü gösteren diğer öğeler (örneğin, özel menüler veya iletişim kutuları ve özelleştirilebilir içeriğe sahip değildir.

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