Как я могу добавить список данных в Sqflite во флаттере

Я пытаюсь добавить несколько данных в Sqflite во флаттере, но это не работает.

Например, я хочу добавить список класса Todo.

Пожалуйста, если есть какая-либо помощь, я буду признателен.

Я попытался написать необработанный SQL, чтобы добавить список данных, но это не сработало. Все, что я получил, это куча ошибок.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

на самом деле вы не можете вставить все данные одной функцией, но вы можете сделать это с помощью циклов. вы можете зациклить тигр, пока длина списка и сделать вставку, пока это правда! это слишком просто

List<Todo>todos=[Todo('example'),Todo('example'),Todo('example'),Todo('example')];
//here should be the db provide class
for(Todo iteam in todos){
   // do the insert functionality
   // here try the way you insert single todo in db
   db.insert(iteam.toJson())
}


Спасибо за ваш ответ, вы спасли день. Он работает из коробки, я очень благодарен.

VICTOR AUGUSTINE 01.05.2023 01:09

Чтобы добавить список объектов класса Todo в Sqflite во Flutter, вы можете выполнить следующие действия:

  1. Создайте вспомогательный класс базы данных, который расширяет класс DatabaseProvider из пакета sqflite. Вы можете использовать этот класс для определения методов создания, открытия и обновления базы данных.
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

class DatabaseHelper {
  static final DatabaseHelper instance = DatabaseHelper._instance();
  static Database? _db;

  DatabaseHelper._instance();

  Future<Database> get db async {
    if (_db == null) {
      _db = await _initDb();
    }
    return _db!;
  }

  Future<Database> _initDb() async {
    final String dbPath = await getDatabasesPath();
    final String path = join(dbPath, 'todo_db.db');

    final todoDb = await openDatabase(path, version: 1, onCreate: _createDb);

    return todoDb;
  }

  void _createDb(Database db, int version) async {
    await db.execute(
        'CREATE TABLE todos(id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, description TEXT, isDone INTEGER)');
  }

  Future<List<Map<String, dynamic>>> getTodosMapList() async {
    final Database db = await instance.db;
    final List<Map<String, dynamic>> result = await db.query('todos');
    return result;
  }

  Future<int> insertTodoList(List<Todo> todoList) async {
    final Database db = await instance.db;
    final Batch batch = db.batch();

    for (Todo todo in todoList) {
      batch.insert('todos', todo.toMap());
    }

    final List<dynamic> result = await batch.commit();
    final int affectedRows = result.reduce((sum, element) => sum + element);
    return affectedRows;
  }
}
  1. Определите класс Todo, содержащий данные, которые вы хотите сохранить в базе данных. В этом примере класс Todo имеет четыре свойства: id, title, description и isDone.
class Todo {
  int? id;
  String? title;
  String? description;
  bool? isDone;

  Todo({
    this.id,
    this.title,
    this.description,
    this.isDone = false,
  });

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'title': title,
      'description': description,
      'isDone': isDone ? 1 : 0,
    };
  }

  static Todo fromMap(Map<String, dynamic> map) {
    return Todo(
      id: map['id'],
      title: map['title'],
      description: map['description'],
      isDone: map['isDone'] == 1,
    );
  }
}
  1. В методе insertTodoList класса DatabaseHelper создайте пакетный объект и используйте метод insert для вставки каждого объекта Todo в базу данных. Наконец, используйте метод commit для выполнения пакета.
Future<int> insertTodoList(List<Todo> todoList) async {
  final Database db = await instance.db;
  final Batch batch = db.batch();

  for (Todo todo in todoList) {
    batch.insert('todos', todo.toMap());
  }

  final List<dynamic> result = await batch.commit();
  final int affectedRows = result.reduce((sum, element) => sum + element);
  return affectedRows;
}
  1. Чтобы использовать метод insertTodoList для вставки списка `Todo

Другие вопросы по теме