由于超时或客户请求而取消的语句

Statement cancelled due to timeout or client request

我正在尝试使用 Google 应用程序脚本将数据添加到我的 Google 云 SQL 数据库。当我昨晚完成时,我的代码工作正常,但是当我今天早上 运行 它现在给我错误 "statement cancelled due to timeout or client request",我在云控制台中得到的错误是 "Got an error reading communication packets"。

昨晚处理了大约 1,600 行数据。我玩过它并缩小了它的范围,当有更多的 15 行时会发生错误。 15 行它会很好地添加数据,将其更改为 16 行并抛出错误,这告诉我它不是连接本身。我还通过将第 15 行复制到第 16 行并删除所有其他数据来测试电子表格中的数据,但这没有用。我对我读过的所有内容的主要困惑是超时,昨晚它在 1,600 行数据上运行良好。我的代码如下:

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

这样试试:

function connection(folderId, db, c1, c2, c3, c4, c5, c6, c7) {
  var ss=SpreadsheetApp.openById("fileId");//just go to the file and get the id
  var sh=ss.getSheetByName('Report 1');
  var rg=sh.getRange("B5:H16");
  var sheetdata=rg.getValues();
  var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);//dburl is not defined
  conn.setAutoCommit(false);
  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], Session.getScriptTimeZone(), '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();
}

发现问题出在新的 App Script Runtime V8 上。如需修复,请将您的运行时更改回 Rhino。要执行此操作,请转到 "View > Show project manifest",然后在显示 "runtimeVersion" 的地方:"V8" 将其更改为 "runtimeVersion":"STABLE"。目前这里有一个关于此问题的未解决错误:https://issuetracker.google.com/issues/149413841