Spec-Zone.ru › MySQL Connectors 1.0

9.4 Получение всех элементов данных сразу

В дополнение к шаблону использования fetchOne(), описанному в разделе 9.3 «Работа с наборами данных», который позволяет приложениям потреблять элементы данных по одному, X DevAPI также предоставляет шаблон, использующий fetchAll(), который передает все элементы данных набора данных как список приложению. Разные реализации X DevAPI используют соответствующие типы данных для своего языка программирования для списка. Поскольку используются разные типы данных, поддерживаются собственные конструкции языка для доступа к элементам списка. В следующем примере предполагается, что существует схема test, и что таблица сотрудников существует в myTable.

Код JavaScript MySQL Shell

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.");
}

Код Python MySQL Shell

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))
    

Код JavaScript Node.js

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() заставляет Connector создать список всех элементов в памяти, прежде чем список целиком может быть передан приложению. Срок жизни списка не зависит от срока жизни набора данных, который его произвел.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/x-devapi-userguide-en/fetching-all-data-items-at-once.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API