【问题标题】:Get identity of last inserted row in Google Apps Script获取 Google Apps 脚本中最后插入行的标识
【发布时间】:2017-02-14 10:58:20
【问题描述】:

平台:使用 JDBC 服务连接到 SQL Server 的 Google Apps 脚本。

如何获取插入行的标识 (id)? (下面提供的代码)我相信解决方案在这里:https://stackoverflow.com/a/42655/3520117 但我正在努力使用 JDBC 服务在 Google Apps Script 中实现该通用解决方案。

代码.gs:

function postNewItem(formObject) {

  var useremail = Session.getActiveUser().getEmail();

  var timeZone = CalendarApp.getDefaultCalendar().getTimeZone();
  var timestamp = Utilities.formatDate(new Date(), timeZone, "yyyyMMdd HH:mm:ss"); // get current date/time

  var conn = Jdbc.getConnection(connParams);
  var stmt = conn.prepareStatement('INSERT INTO tblOne '
      + '(email, timestamp, var1, var2, var3) '
      + 'values (?, ?, ?, ?, ?)');
  stmt.setString(1, useremail);
  stmt.setString(2, timestamp);
  stmt.setString(3, formObject.var1);
  stmt.setString(4, formObject.var2);
  stmt.setString(5, formObject.var3);

  stmt.execute();
  conn.commit();
  conn.close();

  // log event
  logEvent(id, "N/A", "New item added.", useremail);
}

【问题讨论】:

  • 马克,这是一个类似但不同的问题,因为这取决于 Google 对他们与 Google Apps 脚本一起使用的 JDBC 驱动程序的实现。他们的文档没有提及此功能,而且您链接到的示例代码是 Java,而 Google Apps 脚本在服务器端使用 javascript。
  • 我确信 Google Apps Script 的 JDBC 实现支持这一点。执行(sql,autoGeneratedKeys)developers.google.com/apps-script/reference/jdbc/…getGeneratedKeys()developers.google.com/apps-script/reference/jdbc/…帮助!
  • 根据谷歌的文档,它包装了一个普通的 JDBC 驱动程序,所以它应该可以工作。你真的试过了吗?如果您尝试过,请使用使用的代码和您遇到的任何错误更新您的问题。顺便说一句:您标记了“sql-server”,您确定 Google Apps 脚本使用的是 Microsoft SQL Server(如果是的话,我会很惊讶)。
  • 惊讶马克 - 它是:“在 Apps 脚本中,JDBC 服务支持 Google Cloud SQL、MySQL、Microsoft SQL Server 和 Oracle 数据库。”另外,我已经解决了我的问题并在下面发布了答案。感谢您的帮助。

标签: sql-server jdbc google-apps-script


【解决方案1】:

解决了。我在此处发布此内容是为了让其他为此苦苦挣扎的人受益。

步骤:

  1. 添加 autoGeneratedKeys 标志

    var stmt = conn.prepareStatement(query, 1);

  2. 获取自动生成的密钥列表

    var results = stmt.getGeneratedKeys();

  3. 获取 ID:

    while (results.next()) { var id = results.getInt(1); }

完整示例:

代码.gs:

function postNewItem(formObject) {

  var useremail = Session.getActiveUser().getEmail();

  var timeZone = CalendarApp.getDefaultCalendar().getTimeZone();
  var timestamp = Utilities.formatDate(new Date(), timeZone, "yyyyMMdd HH:mm:ss"); // get current date/time

  var conn = Jdbc.getConnection(connParams);
  var stmt = conn.prepareStatement('INSERT INTO tblOne '
      + '(email, timestamp, var1, var2, var3) '
      + 'values (?, ?, ?, ?, ?)', 1); // added autoGeneratedKeys flag
  stmt.setString(1, useremail);
  stmt.setString(2, timestamp);
  stmt.setString(3, formObject.var1);
  stmt.setString(4, formObject.var2);
  stmt.setString(5, formObject.var3);

  stmt.execute();

  // start of additional code
  var results = stmt.getGeneratedKeys();

  while (results.next()) {
    var id = results.getInt(1);
  }

  Logger.log(id);
  // end of additional code

  conn.commit();
  conn.close();

  // log event
  logEvent(id, "N/A", "New item added.", useremail);

【讨论】:

  • 在普通 JDBC 中,可能的值为 Statement.RETURN_GENERATED_KEYS (= 1) 和 Statement.NO_GENERATED_KEYS (= 2)。
猜你喜欢
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多