2017-02-14 74 views
2

平台:使用JDBC服务连接到SQL Server的Google Apps脚本。获取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

的可能的复制[?如何获得在JDBC插入ID] (http://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbc) –

+0

马克,它是一个类似,但distinc这不是问题,因为这取决于Google实施的使用Google Apps脚本的JDBC驱动程序。他们的文档没有提及此功能,而且您链接的示例代码是Java,Google Apps Script在服务器端使用JavaScript。 – h0dges

+0

我确定Google Apps脚本的JDBC实现支持此功能。 执行(SQL,autoGeneratedKeys) https://developers.google.com/apps-script/reference/jdbc/jdbc-prepared-statement#execute(String,Integer) 的getGeneratedKeys() HTTPS://开发商.google.com/apps-script/reference/jdbc/jdbc-statement#getgeneratedkeys 帮助! – h0dges

回答

2

解决。我在此发布此信息可以让其他人为此付出努力。

步骤:

  1. 添加autoGeneratedKeys标志

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

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

    var results = stmt.getGeneratedKeys();

  3. 获取ID:

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

完整的示例:

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); 
+0

在普通的JDBC中,可能的值是'Statement.RETURN_GENERATED_KEYS'(='1')和'Statement.NO_GENERATED_KEYS'(='2')。 –