J'espérais que vous pourriez m'aider les gars!

Mon code actuel ne fonctionne pas. Un message d'erreur s'affiche en disant Unhandled Exception: DatabaseException(unrecognized token: "'1582268587562" (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM my_table WHERE date BETWEEN '1582095787562' AND '1582268587562) sql 'SELECT * FROM my_table WHERE date BETWEEN '1582095787562' AND '1582268587562' args []}

J'essaie de faire en sorte que ma requête sqflite renvoie les enregistrements des 2 derniers jours. Voici la requête que j'utilise actuellement :

Future<List<Map<String, dynamic>>> queryLastTwoDays() async {
    Database db = await instance.database;
    DateTime now = DateTime.now();
    DateTime twoDaysAgoFromNow = now.subtract(Duration(days: 2));
    var today = now.millisecondsSinceEpoch;
    var twoDaysAgo = twoDaysAgoFromNow.millisecondsSinceEpoch;
    return await db.rawQuery('''SELECT * FROM $table WHERE $columnDate BETWEEN '$twoDaysAgo' AND '$today''');
  }

STRUCTURE DE LA BASE DE DONNÉES

CREATE TABLE $table ( $columnId INTEGER PRIMARY KEY, $columnName TEXT NOT NULL, $columnAge INTEGER NOT NULL, $columnColour TEXT NOT NULL, $columnDate INTEGER NOT NULL )

EXEMPLE DE DONNÉES POUR L'INSERTION :

 `DatabaseHelper.columnName : 'Breakfast',
  DatabaseHelper.columnAge  : 23,
  DatabaseHelper.columnColour : 'red',
  DatabaseHelper.columnDate : DateTime.now().millisecondsSinceEpoch,`

Merci pour toute aide!

1
Jason Lloyd 21 févr. 2020 à 10:02

1 réponse

Meilleure réponse

Comme Shawn le souligne dans le commentaire, il manque un guillemet de fermeture à votre SQL généré. Regardez le message d'erreur :

...while compiling: SELECT * FROM my_table 
WHERE date BETWEEN '1582095787562' AND '1582268587562)

Il n'y a pas de fermeture ' avant la parenthèse.

Cela vient de cette ligne, je pense:

    return await db.rawQuery('''SELECT * FROM $table WHERE $columnDate BETWEEN '$twoDaysAgo' AND '$today''');

Vous avez besoin d'un devis simple de plus avant le devis simple triple.

2
poolie 21 févr. 2020 à 15:55