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

[Bug] Apaguei a tabela do Banco de dados e deu erro!

Criei o projeto com uma tabela igual ao Kako, mas acabei apagando essa tabela com drop table dando um erro e que não sei consertar, pode me ajudar por favor? Preciso voltar a ter meu banco de dados com uma tabela funcionando novamente: Como faço para criar uma tabela novamente? pois tentei clicar no run do projeto para criar a tabela e não deu certo outra coisa que eu tentei foi criar uma função para criar a tabela novamente e não deu certo.

O erro:

I/flutter (14654): Função findAll iniciada.......
I/flutter (14654): snapshotConnectionState.waiting
E/SQLiteLog(14654): (1) no such table: patientsTable
I/flutter (14654): snapshotConnectionState.done
I/flutter (14654): hasData=false
I/flutter (14654): hasData2=false
I/flutter (14654): função save() iniciando
I/flutter (14654): Acessando o find simples iniciando:
E/SQLiteLog(14654): (1) no such table: patientsTable
E/flutter (14654): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DatabaseException(no such table: patientsTable (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM patientsTable WHERE patientName = ?) sql 'SELECT * FROM patientsTable WHERE patientName = ?' args [Pietro Simas]
E/flutter (14654): #0      wrapDatabaseException (package:sqflite/src/exception_impl.dart:11:7)
E/flutter (14654): <asynchronous suspension>
E/flutter (14654): #1      SqfliteDatabaseMixin.txnRawQuery.<anonymous closure> (package:sqflite_common/src/database_mixin.dart:586:30)
E/flutter (14654): <asynchronous suspension>
E/flutter (14654): #2      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:33:16)
E/flutter (14654): <asynchronous suspension>
E/flutter (14654): #3      SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:517:14)
E/flutter (14654): <asynchronous suspension>
E/flutter (14654): #4      TaskDao.find (package:med_ia_app/data/task_dao.dart:81:47)
E/flutter (14654): <asynchronous suspension>
E/flutter (14654): #5      TaskDao.save (package:med_ia_app/data/task_dao.dart:115:22)

    
    
    A função abaixo criei mas não consegui criar:

DatabaseHelper() async {
   const String _tableNamePa = 'patientsTable';
const String _idPatient = 'idPatient';
  const String _name = 'patientName';
 const String _anoNascimento = 'anoNascimento';
 const String _motherName = 'motherName';
   const String _startDate = 'startDate';
  const String _endDate = 'endDate';
 const String _doctor = 'doctorName';
  const String _device = 'doctorName';

   Future<void> createTable(Database database) async {
  await database.execute('''
      CREATE TABLE $_tableNamePa (
        $_idPatient INTEGER PRIMARY KEY AUTOINCREMENT,
        $_name TEXT NOT NULL,
        $_anoNascimento DATE,
        $_motherName TEXT,
        $_startDate DATE,
        $_endDate DATE,
        $_doctor TEXT,
        $_device TEXT
      )
    ''');
  }
  }
1 resposta
solução!

Olá, Nelson.

Tudo bem?

Vou tentar te guiar em como recriar a tabela e garantir que o banco de dados esteja funcionando corretamente.

Primeiro, vamos criar uma função para garantir que a tabela seja criada ao inicializar o banco de dados. Vou te mostrar um exemplo de como você pode fazer isso:

  1. Defina a função de criação da tabela:

    Future<void> _createTable(Database db) async {
      const String _tableNamePa = 'patientsTable';
      const String _idPatient = 'idPatient';
      const String _name = 'patientName';
      const String _anoNascimento = 'anoNascimento';
      const String _motherName = 'motherName';
      const String _startDate = 'startDate';
      const String _endDate = 'endDate';
      const String _doctor = 'doctorName';
      const String _device = 'device';
    
      await db.execute('''
        CREATE TABLE $_tableNamePa (
          $_idPatient INTEGER PRIMARY KEY AUTOINCREMENT,
          $_name TEXT NOT NULL,
          $_anoNascimento DATE,
          $_motherName TEXT,
          $_startDate DATE,
          $_endDate DATE,
          $_doctor TEXT,
          $_device TEXT
        )
      ''');
    }
    
  2. Inicialize o banco de dados e chame a função de criação da tabela:

    Future<Database> _initDatabase() async {
      return await openDatabase(
        'my_database.db',
        version: 1,
        onCreate: (db, version) async {
          await _createTable(db);
        },
      );
    }
    
  3. Garanta que você está chamando a função de inicialização do banco de dados no início do seu aplicativo:

    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      final database = await _initDatabase();
      runApp(MyApp(database: database));
    }
    
  4. Utilize o banco de dados na sua aplicação:

    class MyApp extends StatelessWidget {
      final Database database;
    
      MyApp({required this.database});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Meu App'),
            ),
            body: Center(
              child: Text('Banco de dados inicializado!'),
            ),
          ),
        );
      }
    }
    

Com esses passos, você deve ser capaz de recriar a tabela no banco de dados. Certifique-se de que a função _initDatabase é chamada antes de qualquer operação que dependa do banco de dados.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.