当我在6分钟后运行脚本...
[消息:语句因超时或客户请求而被取消(第140行,文件"代码")解除]并停止编译。我需要插入2000行,但它只插入1200行。我该如何解决这个问题?
CODE:
function writeManyRecords() {
var conn = Jdbc.getConnection(dbUrl, user, userPwd);
conn.setAutoCommit(false);
var start = new Date();
var stmt = conn.prepareStatement('INSERT INTO test_table'
+ '(Item, Quantity, Price, total_price) values (?, ?, ?, ?)');
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
for(n=1;n<values.length;++n){
var cell_1 = values[n][0] ;
var cell_2 = values[n][1] ;
var cell_3 = values[n][2] ;
var cell_4 = values[n][3] ;
stmt.setString(1, cell_1);
stmt.setString(2, cell_2);
stmt.setString(3, cell_3);
stmt.setString(4, cell_4);
stmt.addBatch();
}
var batch = stmt.executeBatch();
// 该行:由于超时或客户请求而取消声明(第140行,文件&#34;代码&#34;)
conn.commit();
conn.close();
var end = new Date();
Logger.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
}
答案 0 :(得分:0)
这是一个简单的实用程序函数,可用于批量处理数据:
function isTimeUp_(starttime) {
var now = new Date();
return now.getTime() - starttime.getTime() > 270000; // 4.5 minutes
}
function myLongFunction() {
var starttime = new Date();
for(var i=0; i<data.length; i++) {
if (isTimeUp_(starttime )) {
Logger.log("Time up, finished on row " + i);
break;
}
// rest of the loop if false
}
}
检查短于6分钟的时间可确保您不会超时。将其与触发器配对以自动重启功能并获取数据处理。