Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

E/SQLiteLog(21127): (1) near "/": syntax error

Boa tarde! Estou travada nessa parte há uma semana... vou colocar os códigos aqui, se alguém puder me ajudar agradeço muito!!!

app_database.dart

import 'package:NiverApp/database/amiguinhos_dao.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';

Future<Database> createDatabase() async {
  final String path = join(await getDatabasesPath(), 'niverapp.db');
  return openDatabase(path, onCreate: (db, version) {
    db.execute(AmiguinhosDao.tableSql);
  }, version: 1, onDowngrade: onDatabaseDowngradeDelete);
}


amiguinhosDao.dart

import 'package:NiverApp/database/app_database.dart';
import 'package:NiverApp/models/amiguinhos.dart';
import 'package:sqflite/sqflite.dart';

class AmiguinhosDao {
  static const String tableSql = 'CREATE TABLE $_tableName('
      '$_id INTEGER PRIMARY KEY, '
      '$_foto TEXT, '
      '$_nome TEXT, '
      '$_telefone TEXT, '
      '$_niverData TEXT, '
      '$_email TEXT)';

  static const String _tableName = 'amiguinhos';
  static const String _id = 'id';
  static const String _foto = 'foto';
  static const String _nome = 'nome';
  static const String _telefone = 'telefone';
  static const String _niverData = 'data';
  static const String _email = 'email';

  Future<int> save(Amiguinhos amiguinho) async {
    final Database db = await createDatabase();

    return await db.insert(_tableName, amiguinho.toMap());
  }

  Future<List<Amiguinhos>> findAll() async {
    final Database db = await createDatabase();
    final List<Map<String, dynamic>> result = await db.query(_tableName);
    List<Amiguinhos> contacts = _toList(result);
    return contacts;
  }

  List<Amiguinhos> _toList(List<Map<String, dynamic>> result) {
    final List<Amiguinhos> contacts = List();
    for (Map<String, dynamic> row in result) {
      final Amiguinhos amiguinhos = Amiguinhos(
        row[_id],
        row[_foto],
        row[_nome],
        row[_telefone],
        row[_niverData],
        row[_email],
      );
      contacts.add(amiguinhos);
    }
    return contacts;
  }
}


amiguinhosModel.dart

import 'package:flutter/material.dart';

class Amiguinhos extends ChangeNotifier {
  int id;
  String foto;
  String nome;
  String telefone;
  String niverData;
  String email;

  Amiguinhos(
    this.id,
    this.foto,
    this.nome,
    this.telefone,
    this.niverData,
    this.email,
  );

  Map<String, dynamic> toMap() {
    final Map<String, dynamic> amiguinhosMap = Map();
    amiguinhosMap[foto] = foto;
    amiguinhosMap[nome] = nome;
    amiguinhosMap[telefone] = telefone;
    amiguinhosMap[niverData] = niverData;
    amiguinhosMap[email] = email;

    return amiguinhosMap;
  }

  @override
  String toString() {
    return 'Amiguinhos{id: $id, foto: $foto, nome: $nome, telefone: $telefone, niverData: $niverData, email: $email,}';
  }
}

O erro completo é o seguinte:

E/SQLiteLog(21127): (1) near "/": syntax error
E/flutter (21127): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: DatabaseException(near "/": syntax error (code 1): , while compiling: INSERT INTO amiguinhos (lib/assets/imagens/avatar.webp, Camila, (94) 9 9104-8681, 31/05/1991, eng.camiladourado@gmail.com) VALUES (?, ?, ?, ?, ?)) sql 'INSERT INTO amiguinhos (lib/assets/imagens/avatar.webp, Camila, (94) 9 9104-8681, 31/05/1991, eng.camiladourado@gmail.com) VALUES (?, ?, ?, ?, ?)' args [lib/assets/imagens/avatar.webp, Camila, (94) 9 9104-8681, 31/05/1991, eng.camiladourado@gmail.com]}
4 respostas

Oi Camila, tudo bem ?

Pode ser que na criação tenha dado problema, pelo nome estar colado com o (, sugiro que dê um espaço entre uma coisa e outra e tente novamente.

Oi Camila, tudo bem? Tenho um palpite! :D Veja comigo se faz sentido. O erro reportado é E/SQLiteLog(21127): (1) near "/": syntax error. Se você reparar bem, mais para frete o SQflite mostra como ele está recebendo os dados para salvar.

A query está sendo executada da seguinte maneira:

INSERT INTO amiguinhos (lib/assets/imagens/avatar.webp, Camila, (94) 9 9104-8681, 31/05/1991, eng.camiladourado@gmail.com) VALUES (?, ?, ?, ?, ?))

Beleza? Até aqui tudo bem?

Mas, repare que os valores não estão entrando como strings. O erro near "/": syntax error vem da primeira barra do lib/assets/imagens/avatar.webp. O correto seria a query executar da seguinte maneira:

INSERT INTO amiguinhos ('lib/assets/imagens/avatar.webp', 'Camila', '(94) 9 9104-8681', '31/05/1991', 'eng.camiladourado@gmail.com') VALUES (?, ?, ?, ?, ?))

Para resolvermos esta questão, você pode forçar um toString na atribuição dos valores ao toMap. Seu código ficaria assim:

  Map<String, dynamic> toMap() {
    final Map<String, dynamic> amiguinhosMap = Map();
    amiguinhosMap[foto] = foto.toString();
    amiguinhosMap[nome] = nome.toString();
    amiguinhosMap[telefone] = telefone.toString();
    amiguinhosMap[niverData] = niverData.toString();
    amiguinhosMap[email] = email.toString();

    return amiguinhosMap;
  }

Testa aí e me conta se funcionou! :)

Um forte abraço e bom estudo!

solução!

Boa tarde, Matheus! Boa tarde, Leonardo!

Muuuuuito obrigada por tirarem um pedacinho do seu tempo para me ajudar! Foi realmente muito válido!

Map<String, dynamic> toMap() {
    final Map<String, dynamic> amiguinhosMap = Map();
    amiguinhosMap['foto'] = foto.toString();
    amiguinhosMap['nome'] = nome.toString();
    amiguinhosMap['telefone'] = telefone.toString();
    amiguinhosMap['niverData'] = niverData.toString();
    amiguinhosMap['email'] = email.toString();

    return amiguinhosMap;
  }

Estava faltando as aspas simples dentro do Map!

Muito obrigada!

Opaaa, aí sim! Hahaha Que bom que conseguiu resolver :D