Home > database >  How do I resolve a Sqlite Error (1) in Flutter?
How do I resolve a Sqlite Error (1) in Flutter?

Time:03-31

Im new to flutter and first time to work with sqlite database. I have created a todo app that is linked to a Sqlite database. It has simple cards that i can add and it works fine. The problem is, I have a delete icon, but for some reason the cards do not delete when I press the delete icon. I get the following error message in the stack:

E/SQLiteLog(22653): (1) no such table: çustomerblueprint in "DELETE FROM çustomerblueprint WHERE id == ?" E/flutter (22653): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: DatabaseException(no such table: çustomerblueprint (code 1 SQLITE_ERROR[1]): , while compiling: DELETE FROM çustomerblueprint WHERE id == ?) sql 'DELETE FROM çustomerblueprint WHERE id == ?' args [1]

I have read for hours to try and fine a solution, but don't seem to get this one.

My code is:

Database Code

 class CustomerBluePrint {
 int? id;
 final String title;
 DateTime creationDate;
 bool isChecked;


 CustomerBluePrint({
 this.id,
  required this.title,
  required this.creationDate,
  required this.isChecked,

  });

  Map<String, dynamic> toMap() {
  return {
  'id': id,
  'title': title,
  'creationDate': creationDate.toString(),
  'isChecked': isChecked ? 1 : 0,
  
  };
  }


  @override
  String toString() {
  return 'CustomerBluePrint(id : $id, title : $title, creationDate : $creationDate, isChecked 
  : $isChecked )'; // , phone : $phone, mobile : $mobile, fax : $fax, email : $email, name : 
  $name)';
  }
  }


   class DatabaseConnect {
   Database? _database;

   Future<Database> get database async {

   final dbpath = await getDatabasesPath();

   const dbname = 'customerblueprint.db';

   final path = join(dbpath, dbname);

   _database = await openDatabase(path, version: 1, onCreate: _createDB);

   return _database!;
   }


  Future<void> _createDB(Database db, int version) async {
  await db.execute('''
  CREATE TABLE todo(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT,
    creationDate TEXT,
    isChecked INTEGER
  )
 ''');

 }


  Future<void> insertCustomerBluePrint(
  CustomerBluePrint customerblueprint) async {

  final db = await database;

   await db.insert(
  'customerblueprint',
   customerblueprint.toMap(),
   conflictAlgorithm: ConflictAlgorithm.replace,
  );
   }


  Future<void> deleteCustomerBluePrint(
  CustomerBluePrint customerblueprint) async {
  final db = await database;

  await db.delete(
   'çustomerblueprint',
  where: 'id == ?',
  whereArgs: [customerblueprint.id],
  );
 }


 Future<List<CustomerBluePrint>> getCustomerBluePrint() async {
 final db = await database;

 List<Map<String, dynamic>> items = await db.query(
  'customerblueprint',
   orderBy: 'id DESC',
 ); 

 return List.generate(
  items.length,
  (i) => CustomerBluePrint(
    id: items[i]['id'],
    title: items[i]['title'],
    creationDate: DateTime.parse(items[i]['creationDate']),
    isChecked: items[i]['isChecked'] == 1 ? true : false,
    
  ),
);
}
}

Customer List Code

 import 'package:flutter/material.dart';
 import 'library.dart';
 import 'customer_card.dart';

 class CustomerList extends StatelessWidget {
  final Function insertFunction;
 final Function deleteFunction;
 final db = DatabaseConnect();
 CustomerList(
  {required this.insertFunction, required this.deleteFunction, Key? key})
  : super(key: key);

  @override
  Widget build(BuildContext context) {
  return Expanded(
  child: FutureBuilder(
    future: db.getCustomerBluePrint(),
    initialData: const [],
    builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
      var data = snapshot.data;
      var datalength = data!.length;

      return datalength == 0
          ? const Center(
              child: Text('no data found'),
            )
          : ListView.builder(
              itemCount: datalength,
              itemBuilder: (context, i) => CustomerCard(
                id: data[i].id,
                title: data[i].title,
                creationDate: data[i].creationDate,
                isChecked: data[i].isChecked,
                insertFunction: insertFunction,
                deleteFunction: deleteFunction,
              ),
            );
           },
           ),
           );
           }
           }

Customer Card Code

    import 'package:flutter/material.dart';
    import 'package:intl/intl.dart';
    import 'library.dart';

    class CustomerCard extends StatefulWidget {
    final int id;
    final String title;
    final DateTime creationDate;
    bool isChecked;
    final Function insertFunction;
    final Function deleteFunction;

    CustomerCard(
    {required this.id,
    required this.title,
    required this.creationDate,
    required this.isChecked,
    required this.insertFunction,
    required this.deleteFunction,
    Key? key})
   : super(key: key);

   @override
  _CustomerCardState createState() => _CustomerCardState();
  }

  class _CustomerCardState extends State<CustomerCard> {
  @override
  Widget build(BuildContext context) {
  var anotherCustomerBluePrint = CustomerBluePrint(
    id: widget.id,
    title: widget.title,
    creationDate: widget.creationDate,
    isChecked: widget.isChecked);
  return Card(
   child: Row(
    children: [
      Container(
        margin: const EdgeInsets.symmetric(horizontal: 15, vertical: 10),
        child: Checkbox(
          value: widget.isChecked,
          onChanged: (bool? value) {
            setState(() {
              widget.isChecked = value!;
            });
            anotherCustomerBluePrint.isChecked = value!;
            widget.insertFunction(anotherCustomerBluePrint);
          },
        ),
      ),
      Expanded(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              widget.title,
              style: const TextStyle(
                fontWeight: FontWeight.bold,
                fontSize: 18,
              ),
            ),
            const SizedBox(height: 5),
            Text(
              DateFormat('dd MMM yyyy - hh:mm aaa')
                  .format(widget.creationDate),
              style: const TextStyle(
                fontSize: 16,
                fontWeight: FontWeight.bold,
                color: Color(0xFF8F8F8F),
              ),
            )
          ],
          ),
        ),
        IconButton(
        onPressed: () {
          widget.deleteFunction(anotherCustomerBluePrint);
        },
        icon: const Icon(Icons.close),
      ),
      ],
      ),
      );
       }
      }

Customer Code This is my Homepage

      import 'package:flutter/material.dart';
      import 'package:flutter/cupertino.dart';
      import 'package:invoice_app/customer_profile.dart';
      import 'customer_list.dart';
      import 'library.dart';

      class Customer extends StatefulWidget {
      const Customer({Key? key}) : super(key: key);

      @override
     _CustomerState createState() => _CustomerState();
      }

     class _CustomerState extends State<Customer> {
     

     var db = DatabaseConnect();
     void addItem(CustomerBluePrint customerblueprint) async {
     await db.insertCustomerBluePrint(customerblueprint);
     setState(() {});
     }

   void deleteItem(CustomerBluePrint customerblueprint)  async {
   await db.deleteCustomerBluePrint(customerblueprint);
    setState(() {

    });
    }

    @override
    Widget build(BuildContext context) {
    return Scaffold(
     backgroundColor: const Color(0xFFF5EBFF),
     body: Column(
     children: [
      CustomerList(
        insertFunction: addItem, deleteFunction: deleteItem),

      CustomerProfile(
        insertFunction: addItem
      ),
     ],
      ),
     );
     }

The deletefunction is suppose to delete an entry based on the 'id'assigned to it. Everything works fine, except I cannot delete a card (entry) as it throws the error.

Please help. Would really appreciate it.

CodePudding user response:

Found your mistake take a look at Database Code and implementation of the method Future<void> deleteCustomerBluePrint(CustomerBluePrint customerblueprint) You have an error there. Your:

  await db.delete(
   'çustomerblueprint',
  where: 'id == ?',
  whereArgs: [customerblueprint.id],
  );

Mine Repaired:

  await db.delete(
   'customerblueprint',
  where: 'id == ?',
  whereArgs: [customerblueprint.id],
  );

An error in the word customerblueprint, you do not have the letter "c" there, you have some other sign.

  • Related