平台:使用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);
}
答案 0 :(得分:2)
解决。我在这里发布这篇文章是为了让其他任何一个在这方面苦苦挣扎的人受益。
<强>步骤:强>
添加autoGeneratedKeys标志
var stmt = conn.prepareStatement(query, 1);
获取自动生成的密钥列表
var results = stmt.getGeneratedKeys();
获取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);