1

I've already read the related article and solution + mentioned method, but still I don't get it what should I add to my code for importing csv to sqlite table List<<Map<String, dynamic>. I need to replace existing table with a new one and insert each lines of converted csv. How can I solve it? Here's my code below.The problem is importVoca() of db.dart.

db.dart

class DBHelper {
  var _db;

// create database
  Future<Database> get database async {
    if (_db != null) return _db;
    _db = openDatabase(
      join(await getDatabasesPath(), 'vocas.db'),
      onCreate: (db, version) {
        return db.execute(
          "CREATE TABLE vocas(id TEXT PRIMARY KEY, word TEXT, meaning TEXT, createTime TEXT)",
        );
      },
      version: 1,
    );
    return _db;
  }

// insert voca
  Future<void> insertVoca(Voca voca) async {
    final db = await database;
    await db.insert('vocas', voca.toMap(),
        conflictAlgorithm: ConflictAlgorithm.replace);
  }

// Voca list
  Future<List<Voca>> vocas() async {
    final db = await database;
    final List<Map<String, dynamic>> maps = await db.query('vocas');

    return List.generate(maps.length, (i) {
      return Voca(
          id: maps[i]['id'],
          word: maps[i]['word'],
          meaning: maps[i]['meaning'],
          createTime: maps[i]['createTime']);
    });
  }

//update voca list
  Future<void> updateVoca(Voca voca) async {
    final db = await database;
    await db.update(
      'vocas',
      voca.toMap(),
      where: "id = ?", 
      whereArgs: [voca.id],
    );
  }

//delete voca
  Future<void> deleteVoca(String id) async {
    final db = await database;
    await db.delete(
      'vocas',
      where: "id = ?",
      whereArgs: [id],
    );
  }

//find voca to edit
  Future<List<Voca>> findVoca(String id) async {
    final db = await database;

    final List<Map<String, dynamic>> maps =
        await db.query('vocas', where: 'id = ?', whereArgs: [id]);

    return List.generate(maps.length, (i) {
      return Voca(
        id: maps[i]['id'],
        word: maps[i]['word'],
        meaning: maps[i]['meaning'],
        createTime: maps[i]['createTime'],
      );
    });
  }

//export voca to csv
  Future exportVoca() async {
    var year = DateFormat('yy').format(DateTime.now());
    var month = DateFormat('MM').format(DateTime.now());
    var day = DateFormat('d').format(DateTime.now());

    final db = await database;
    var result = await db.query('vocas');
    var csv = mapListToCsv(result);
    final directory = await getApplicationDocumentsDirectory();
    final pathOfFile = await directory.path;
    File file = File("$pathOfFile/dontForget_$year$month$day.csv");
    file.writeAsString(csv);
  }

//import csv to sqlite
  Future importVoca() async {
    File file = await FilePicker.getFile(
        type: FileType.custom, allowedExtensions: ['csv']);
    final data = file.openRead();
    final fields = await data
        .transform(utf8.decoder)
        .transform(new CsvToListConverter())
        .toList();

    Database _db = await openDatabase(
        join(await getDatabasesPath(), 'vocas.db'),
        version: 1, onCreate: (Database db, int version) async {
      await db.execute("DROP TABLE IF EXISTS vocas");
      await db.execute(
          "CREATE TABLE vocas(id TEXT PRIMARY KEY, word TEXT, meaning TEXT, createTime TEXT)");
    });
  }
}

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.