2017-02-14 72 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')。 –