文件首頁
X DevAPI 使用者指南
下載本手冊
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


X DevAPI 使用者指南  /  使用結果集  /  一次提取所有資料項目

9.4 一次提取所有資料項目

除了在第 9.3 節「使用資料集」中說明的,使用 fetchOne() 一個一個取用資料項目的模式之外,X DevAPI 也提供使用 fetchAll() 的模式,將資料集的所有資料項目作為清單傳遞給應用程式。不同的 X DevAPI 實作會為其程式設計語言使用適當的清單資料類型。因為使用了不同的資料類型,所以支援存取清單元素的語言原生結構。以下範例假設 test 綱要存在,且員工資料表存在於 myTable 中。

MySQL Shell 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 Shell 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() 會強制連接器在將整個清單傳遞給應用程式之前,先在記憶體中建立所有項目的清單。清單的生命週期獨立於產生它的資料集生命週期。