我有ROWID列表,想要获得带有此类ID的行。所以我这样做:
for (Integer id : duplicateIds) {
String sqlQuery = "SELECT ROWID, date, containerId FROM " + TABLE + " WHERE ROWID = '" + id + "'";
Fusiontables.Query.Sql sql = db.query().sql(sqlQuery);
List<List<Object>> row = sql.execute().getRows();
allRows.addAll(row);
}
但duplicateIds列表的大小并不小,我认为这种方法并不好,因为执行SQL查询很耗时。 所以,我想知道是否有可能执行批量查询或者可能存在另一种方法?如何提高效率?
UPD。我发现有这样的事情的批量请求。但是我仍然无法做到这一点并获得List&gt;对象的响应。类型。
提前致谢。
答案 0 :(得分:0)
以下是如何在融合表上执行批处理API请求的示例。您应该注意每个用户每100秒有一个请求配额,我使用Thread.sleep(TIME)函数来避免错误。
var shoppingcart = (function () {
var _calculatePrice = function() {
return this.price * this.amount;
};
return {
calculatePrice : _calculatePrice
}
})();
var goods = {
name: 'hammer',
price: 199,
amount: 2
}
shoppingCart.calculatePrice.call(goods)
答案 1 :(得分:0)
这是一个更好的解决方案。您可以创建 单 SELECT 查询,以检索所需的数据,而无需批处理多个SELECT查询。您只需构建查询即可使用 IN 子句。
首先,取出dulplicateIds
数组并将其转换为字符串,注意删除左右括号:
// Get id array as string and remove opening and closing brackets '[' & ']'
String idsAsString = duplicateIds.toString().replaceAll("\\[|\\]", "");
然后使用 IN 子句撰写查询。
// Build Query
String sqlQuery = 'SELECT * FROM ' + TABLE_ID + ' WHERE ROWID IN (\"' + idsAsString + '\")';
Fusion Tables的SQL API没有实现完整的SQL标准,但它仍然非常强大。在以下链接中查看SELECT查询的文档:
https://developers.google.com/fusiontables/docs/v2/sql-reference#Select
列出了一些您可能会在将来发现有用的其他条款。