我试图添加数据到我的谷歌云sql数据库使用谷歌应用程序脚本。昨晚我的代码运行得很好,但当我今天早上运行它时,它给了我一个错误“由于超时或客户端请求而取消的语句”,我在云控制台得到的错误是“读取通信包时出错”。
昨晚它正在处理大约1600行数据。我已经玩了它,并缩小了它的错误将发生时,有更多的15行。它会添加15行数据,将其更改为16行,并抛出错误,这告诉我,这不是连接本身。我还测试了电子表格中的数据,将第15行复制到第16行并删除了所有其他数据,但这不起作用。对于我读到的所有关于它超时的内容,我的主要困惑是,它昨晚运行良好,有1600行数据。我的代码如下:
function connection(folderId, db, c1, c2, c3, c4, c5, c6, c7) {
var files = DriveApp.getFolderById(folderId).getFiles();
var excelfile = files.next();
var fileId = excelfile.getId();
var data = SpreadsheetApp.openById(fileId).getSheetByName('Report 1');
var last = data.getLastRow()
var sheetdata=data.getRange("B5:H16").getValues();
var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);//dburl is not defined
conn.setAutoCommit(false);
var start = new Date();
var stmt = conn.prepareStatement('INSERT INTO '+ db + ' ' + '('+c1+','+c2+','+c3+','+c4+','+c5+','+c6+','+c7+') values (?, ?, ?, ?, ?, ?, ?)');
for (var i=0; i<sheetdata.length; i++) {
stmt.setString(1, Utilities.formatDate(sheetdata[i][0], 'Etc/GMT', 'yyyy-MM-dd'));
stmt.setString(2, sheetdata[i][1]);
stmt.setString(3, sheetdata[i][2]);
stmt.setString(4, sheetdata[i][3]);
stmt.setString(5, sheetdata[i][4]);
stmt.setString(6, sheetdata[i][5]);
stmt.setString(7, sheetdata[i][6]);
stmt.addBatch();
}
var batch = stmt.executeBatch();
conn.commit();
conn.close();
var end = new Date()
Logger.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
}
2条答案
按热度按时间dohp0rv51#
发现问题出在新的应用程序脚本运行时v8上。修复方法是,将运行时改回rhino。要执行此操作,请转到“查看>显示项目清单”,然后在其中显示“runtimeversion”:“v8”将其更改为“runtimeversion”:“稳定”。此问题目前存在一个未解决的错误:https://issuetracker.google.com/issues/149413841
tf7tbtn22#
试着这样做: