Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro na hora de incluir tabela

Quando clico em cadastrar recebo o erro:

import 'package:bytebank/models/shopping.dart';
import 'package:sqflite/sqflite.dart';
import 'package:bytebank/database/app_database.dart';

class ShoppingDao {

  static const String tableSql = 'CREATE TABLE $_tableName('
      '$_id INTEGER PRIMARY KEY, '
      '$_Produto TEXT, '
      '$_Fornecedor TEXT,'
      '$_CNPJ INTEGER'
      '$_DataPrev INTEGER'
      '$_Observacao TEXT)';

  static const String _tableName = 'shoppings';
  static const String _id = 'id';
  static const String _Produto = 'Produto';
  static const String _Fornecedor = 'Fornecedor';
  static const String _CNPJ = 'CNPJ';
  static const String _DataPrev = 'DataPrev';
  static const String _Observacao = '_Observacao';

  Future<int> save(Shopping shopping) async {
    final Database db = await getDatabase();
    Map<String, dynamic> shoppingMap = _toMap(shopping);
    return db.insert(_tableName, shoppingMap);
  }

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

  Map<String, dynamic> _toMap(Shopping shopping) {
    final Map<String, dynamic> shoppingMap = Map();
    shoppingMap[_Produto] = shopping.Produto;
    shoppingMap[_Fornecedor] = shopping.Fornecedor;
    shoppingMap[_CNPJ] = shopping.CNPJ;
    shoppingMap[_DataPrev] = shopping.DataPrev;
    shoppingMap[_Observacao] = shopping.Observacao;
    return shoppingMap;
  }

  List<Shopping> _toList(List<Map<String, dynamic>> result) {
    final List<Shopping> shoppings = List();
    for (Map<String, dynamic> row in result) {
      final Shopping shopping = Shopping(
        row[_id],
        row[_Produto],
        row[_Fornecedor],
        row[_CNPJ],
        row[_DataPrev],
        row[_Observacao],
      );
      shoppings.add(shopping);
    }
    return shoppings;
  }
}

Android SQLite issue - table DataPrev has no column named

1 resposta
solução!

Bom dia Felipe, tranquilo?

Desculpe a demora na resposta. Seguinte, isso acontece porque você deve ter alterado a estrutura do seu banco de dados e queria continuar usando ele, tipo adicionou uma nova coluna e queria manter os dados.

Acontece que quando você muda a estrutura do banco de dados vc tem que atualizar a versão dele e tem que resetar o aplicativo no seu device ( emulador).

O que acontece é que o código procura pelas novas colunas mas o banco de dados salvo não tem essas colunas e diz ter um erro

Sugiro que você desinstale o aplicativo do emulador e rode ele de novo, assim o banco de dados interno será apagado, ou você pode fazer um donwgrade que deleta o banco de dados também.

Compreendo que apagar o os dados no banco de dados seja frustrante para alterar o formato do mesmo, mas se forem dados importantes você pode salva-los e altera-los manualmente para ter a nova coluna com dados vazios.

Espero ter ajudado :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software