query method

Future<List<Map<String, dynamic>>> query(
  1. String sql, {
  2. List? params,
  3. Map<String, dynamic>? namedParams,
})

Execute a query and return all rows as a list.

This is a convenience method that executes a query and fetches all results into memory. The statement is automatically closed after fetching.

Parameters:

  • sql: The SQL SELECT statement to execute
  • params: Optional list of bind parameters (positional binding)

Returns: A list of maps, where each map represents a row with column names as keys.

Example - Basic Query:

final results = await connection.query(
  'SELECT id, name, salary FROM employees WHERE dept_id = :1',
  params: [10],
);

for (final row in results) {
  print('Employee ${row['name']} earns ${row['salary']}');
}

Example - No Parameters:

final departments = await connection.query('SELECT * FROM departments');
print('Found ${departments.length} departments');

Warning: This method loads all results into memory. For large result sets (10,000+ rows), consider using execute with streaming instead:

final stmt = await connection.execute(sql);
await for (final row in stmt.rows()) {
  // Process one row at a time
}

Supported Parameter Types:

  • String - VARCHAR2, CHAR
  • int - NUMBER (integer)
  • double - NUMBER (decimal)
  • null - NULL value

See also:

Implementation

Future<List<Map<String, dynamic>>> query(String sql, {List<dynamic>? params, Map<String, dynamic>? namedParams}) async {
  final statement = await execute(sql, params: params, namedParams: namedParams);
  try {
    final results = <Map<String, dynamic>>[];
    await for (final row in statement.rows()) {
      results.add(row);
    }
    return results;
  } finally {
    await statement.close();
  }
}