获取Google Apps脚本中最后插入行的标识

时间:2017-02-14 10:58:20

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

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

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

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

1 个答案:

答案 0 :(得分:2)

解决。我在这里发布这篇文章是为了让其他任何一个在这方面苦苦挣扎的人受益。

<强>步骤:

  1. 添加autoGeneratedKeys标志

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

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

    var results = stmt.getGeneratedKeys();

  3. 获取ID:

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

  4. 完整示例:

    Code.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);