我正在尝试从SQL填充到Google Sheets一个40k行的记录集。不幸的是,脚本继续超过允许的最长时间(6分钟?)。以下是使用的代码:
var qry = "select custid from customers ";
var con = Jdbc.getConnection(connection,user,pw);
var stmt = con.createStatement();
var rs = stmt.executeQuery(qry);
dataRange = sheet.getRange("a2")
while(rs.next()) {
dataRange.setValue(rs.getString(1));
dataRange = dataRange.offset(1,0);
}
rs.close();
stmt.close();
con.close();
有没有办法更有效地做到这一点? Excel中的copyFromRecordset是否有类似的功能? (此示例代码仅显示一个列值。返回的行越少,我添加到查询中的列越多。)
如果网络速度是因素,我们将连接50mb / 10mb。
提前感谢您的帮助!
答案 0 :(得分:0)
假设超时发生在数据库端,那么批处理将有所帮助。不是在单个查询中获取所有行,而是获得前几百或几千。完成查询后,关闭语句并使用新参数重新打开它以获得接下来的几百或几千。您可以为所有查询保持相同的连接。
具体如何根据您的SQL数据库进行数据库分页。
另一种选择是将数据缓存在内存中,关闭数据库连接,然后更新电子表格。
答案 1 :(得分:0)
我从未在应用程序脚本上使用过jdbc,但是每个循环的脚本都会将数据添加到工作表中,这非常耗时。最好的方法是构建一个数组,然后在推送到数组中的所有数据后推送到电子表格。
$(function () {
$('#datetimepicker3').datetimepicker({
format: 'HH:mm',
onSelect: function(){
checkTime();
}
});
$('#datetimepicker5').datetimepicker({
format: 'HH:mm',
onSelect: function(){
checkTime();
}
});
});
这将使您在脚本中节省大量时间,但不确定40 000行是否适合6分钟。不知道jdbc服务的性能。
斯特凡