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

jw5wzhpr  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(498)

我试图添加数据到我的谷歌云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);
}
dohp0rv5

dohp0rv51#

发现问题出在新的应用程序脚本运行时v8上。修复方法是,将运行时改回rhino。要执行此操作,请转到“查看>显示项目清单”,然后在其中显示“runtimeversion”:“v8”将其更改为“runtimeversion”:“稳定”。此问题目前存在一个未解决的错误:https://issuetracker.google.com/issues/149413841

tf7tbtn2

tf7tbtn22#

试着这样做:

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

相关问题