fluttersqflite

Multiple arguments in SQLite in flutter


I would like to know how to pass multiple arguments to a raw query in SQLite.

My code is below

query() async {

    // get a reference to the database
    Database db = await DatabaseHelper.instance.database;

    // raw query
    List<Map> result = await db.rawQuery('SELECT * FROM my_table WHERE name=?', ['Peter']);

    // print the results
    result.forEach((row) => print(row));

  }

In the above code i am passing one argument 'Peter' but what if I want to pass multiple arguments, for example:

   List<Map> result = await db.rawQuery('SELECT * FROM my_table WHERE name=? and last_name=? and year=?', ['Peter'], ['Smith'],[2019]);

If I do the code above, I get error "Too many positional arguments: 2 expected, but 4 found." can someone show me how to pass multiple arguments to a query in SQLite flutter?


Solution

  • I'm assuming you're using sqflite.

    You need to put all your arguments into one list and not multiple. The code below should work like this:

    List<Map> result = await db.rawQuery(
        'SELECT * FROM my_table WHERE name=? and last_name=? and year=?', 
        ['Peter', 'Smith', 2019]
    );
    

    For more examples how to use raw queries see their examples on their pub.dev page.