joaopaulofcc

[CC] [DBAPI] databaseClient.dart

Nov 25th, 2020
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 4.49 KB | None | 0 0
  1. // Importa bibliotecas.
  2. import 'dart:async';
  3. import 'package:path/path.dart';
  4. import 'package:sqflite/sqflite.dart';
  5. import '../models/dog.dart';
  6.  
  7. class DatabaseClient {
  8.   // Objeto da classe database que será utilizado para comunicar com o BD.
  9.   Database _db;
  10.  
  11.   // Método responsável por abrir a conexão com o BD e solicitara criação da
  12.   // tabela na primeira execução.
  13.   Future open() async {
  14.     // Tenta executar a operação.
  15.     try {
  16.       String dbPath = join(await getDatabasesPath(), 'database.db');
  17.       _db = await openDatabase(dbPath, version: 1, onCreate: this._create);
  18.     }
  19.     // Caso não consiga lança erro.
  20.     catch (error) {
  21.       throw Exception('Falha ao abrir o BD!');
  22.     }
  23.   }
  24.  
  25.   // Método responsável pro executar SQL para criar a tabela.
  26.   Future _create(Database db, int version) async {
  27.     // Tenta executar a operação.
  28.     try {
  29.       await db.execute("""
  30.            CREATE TABLE dogs (
  31.              id TEXT PRIMARY KEY,
  32.              name TEXT,
  33.              age INTEGER
  34.            )""");
  35.     }
  36.     // Caso não consiga lança erro.
  37.     catch (error) {
  38.       throw Exception('Falha ao criar tabela no BD!');
  39.     }
  40.   }
  41.  
  42.   // Método responsável por inserir uma lista de objetos Dog no BD.
  43.   Future insertDogs(List<Dog> dogs) async {
  44.     // Tenta executar a operação.
  45.     try {
  46.       // Percorre cada elemento da lista recebida e chama método insert.
  47.       await Future.forEach(dogs, (dog) async {
  48.         await _db.insert('dogs', dog.toMap(),
  49.             conflictAlgorithm: ConflictAlgorithm.replace);
  50.       });
  51.     }
  52.     // Caso não consiga lança erro.
  53.     catch (error) {
  54.       throw Exception('Falha ao inserir lista de dados no BD!');
  55.     }
  56.   }
  57.  
  58.   // Método responsável por inserir um único objeto da classe Dog.
  59.   Future insertDog(Dog dog) async {
  60.     // Tenta executar a operação.
  61.     try {
  62.       // Chama método insert informando o objeto recebido, convertido para Map (JSON).
  63.       await _db.insert('dogs', dog.toMap(),
  64.           conflictAlgorithm: ConflictAlgorithm.replace);
  65.     }
  66.     // Caso não consiga lança erro.
  67.     catch (error) {
  68.       throw Exception('Falha ao inserir dado no BD!');
  69.     }
  70.   }
  71.  
  72.   // Método responsável por, dado um id, retornar um objeto Dog com os dados salvos
  73.   // no banco para tal id.
  74.   Future<Dog> getDog(String id) async {
  75.     // Tenta executar a operação.
  76.     try {
  77.       final List<Map<String, dynamic>> maps =
  78.           await _db.query('dogs', where: "id = ?", whereArgs: [id], limit: 1);
  79.  
  80.       // Se encontrou o registro retorna o objeto encontrado.
  81.       if (maps.length > 0) {
  82.         return Dog.fromMap(maps[0]);
  83.       }
  84.       // Caso não tenha econtrado retorna null.
  85.       else {
  86.         return null;
  87.       }
  88.     }
  89.     // Caso não consiga lança erro.
  90.     catch (error) {
  91.       throw Exception('Falha ao obter dado no BD!');
  92.     }
  93.   }
  94.  
  95.   // Método responsável por obter uma lista com todos os dados armazenados no BD.
  96.   Future<List<Dog>> getDogs() async {
  97.     // Tenta executar a operação.
  98.     try {
  99.       final List<Map<String, dynamic>> maps = await _db.query('dogs');
  100.       return List.generate(maps.length, (i) {
  101.         return Dog.fromMap(maps[i]);
  102.       });
  103.     }
  104.     // Caso não consiga lança erro.
  105.     catch (error) {
  106.       throw Exception('Falha ao obter lista de dados no BD!');
  107.     }
  108.   }
  109.  
  110.   // Método responsável por atualizar os dados de um registro no BD.
  111.   Future updateDog(Dog dog) async {
  112.     // Tenta executar a operação.
  113.     try {
  114.       _db.update(
  115.         'dogs',
  116.         dog.toMap(),
  117.         where: "id = ?",
  118.         whereArgs: [dog.id],
  119.       );
  120.     }
  121.     // Caso não consiga lança erro.
  122.     catch (error) {
  123.       throw Exception('Falha ao atualizar dado no BD!');
  124.     }
  125.   }
  126.  
  127.   // Método responsável por deletar um registro do BD, dado um id.
  128.   Future deleteDog(String id) async {
  129.     // Tenta executar a operação.
  130.     try {
  131.       await _db.delete('dogs', where: "id = ?", whereArgs: [id]);
  132.     }
  133.     // Caso não consiga lança erro.
  134.     catch (error) {
  135.       throw Exception('Falha ao deletar dado no BD!');
  136.     }
  137.   }
  138.  
  139.   // Método responsável por executar SQL para remover todos os registros
  140.   // da tabela Dogs.
  141.   Future deleteAllDogs() async {
  142.     // Tenta executar a operação.
  143.     try {
  144.       await _db.execute("""DELETE FROM dogs""");
  145.     }
  146.     // Caso não consiga lança erro.
  147.     catch (error) {
  148.       throw Exception('Falha ao deletar todos os dados do BD!');
  149.     }
  150.   }
  151. }
  152.  
Add Comment
Please, Sign In to add comment