除了第 9.3 节“使用数据集”fetchOne()
中
解释的 using 模式,它使应用程序能够一个接一个地使用数据项,X DevAPI 还提供了一个 using 模式,它将数据集的所有数据项作为列表传递到应用程序。不同的 X DevAPI 实现针对列表的编程语言使用适当的数据类型。因为使用了不同的数据类型,所以支持语言的本机构造来访问列表元素。以下示例假定架构存在并且员工表存在于.
fetchAll()
test
myTable
MySQL 外壳 JavaScript 代码
var myResult = myTable.select(['name', 'age']).
where('name like :name').bind('name','L%').
execute();
var myRows = myResult.fetchAll();
for (index in myRows){
print (myRows[index].name + " is " + myRows[index].age + " years old.");
}
MySQL 外壳 Python 代码
myResult = myTable.select(['name', 'age']) \
.where('name like :name').bind('name','L%') \
.execute()
myRows = myResult.fetch_all()
for row in myRows:
print("%s is %s years old." % (row.name, row.age))
Node.js JavaScript 代码
myTable.select(['name', 'age'])
.where('name like :name')
.bind('name', 'L%')
.execute()
.then(myResult => {
var myRows = myResult.fetchAll();
myRows.forEach(row => {
console.log(`${row[0]} is ${row[1]} years old.`);
});
});
C#代码
var myRows = myTable.Select("name", "age")
.Where("name like :name").Bind("name", "L%")
.Execute();
var rows = myRows.FetchAll();
Python代码
result = myTable.select(['name', 'age']) \
.where('name like :name').bind('name', 'L%') \
.execute()
rows = result.fetch_all()
for row in rows:
print("{0} is {1} years old.".format(row["name"], row["age"]))
Java代码
RowResult myRows = myTable.select("name, age")
.where("name like :name").bind("name", "L%")
.execute();
List<Row> rows = myRows.fetchAll();
for (Row row : rows) {
// Accessing the fields
System.out.println(" Age: " + row.getInt("age") + "\n");
}
C++代码
RowResult myRows = myTable.select("name, age")
.where("name like :name")
.bind("name", "L%")
.execute();
std::list<Row> rows = myRows.fetchAll();
for (Row row : rows)
{
cout << row[1] << endl;
}
// Directly iterate over rows, without storing them in a container
for (Row row : myRows.fetchAll())
{
cout << row[1] << endl;
}
当混合fetchOne()
和
fetchAll()
读取一个数据集时,请记住每次调用fetchOne()
或
fetchAll()
使用返回的数据项。消耗的物品不能再次请求。例如,如果应用程序调用fetchOne()
以获取数据集的第一个数据项,则后续调用将
fetchAll()
返回倒数第二个数据项。第一项不是 返回的数据项列表的一部分fetchAll()
。同样,在
fetchAll()
先前调用数据集后再次调用它时,第二次调用返回一个空集合。
fetchAll()
在将整个列表传递给应用程序之前
,强制连接器在内存中构建所有项目的列表。列表的生命周期独立于生成它的数据集的生命周期。
一旦发出查询并且在收到来自服务器的任何回复之前,异步查询执行将控制权返回给调用者。调用fetchAll()
读取异步查询执行产生的数据项可能会阻塞调用者。fetchAll()
在从服务器读取结果完成之前无法将控制返回给调用者。