[Flutter] Sqlite 사용하기

JO_CHOI·2021년 3월 22일
2

Flutter

목록 보기
4/5

1. 환경설정

pubspec.yaml파일에 해당 코드를 추가한다.
sqflite: ^버전
path_provider: ^버전

dependencies:
  sqflite: ^1.1.6
  path_provider: ^1.2.0

2. 설치

커맨드 창에서

$ flutter pub get

명령어를 입력한다.

3. 불러오기

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

4. Model Class 등록하기

class AssetPortfolio {
  String kind; //primary key
  String asset;
  String safety;
  double percent;
  int money;

  AssetPortfolio({
    this.kind,
    this.asset,
    this.safety,
    this.percent,
    this.money,
  });

   Map<String, dynamic> toMap() {
    return <String, dynamic>{
      'kind': kind,
      'asset': asset,
      'safety': safety,
      'percent': percent,
      'money': money,
    };
  }
}

5. DBHelper Class 등록하기

0) TableName 생성(필수 X)

final String mainTableName = 'assetportfolio';

1) DBHelper Class 생성

class DBHelper {
  var _db;
}

앞으로 생성되는 모든 메소드는 DBHelper Class 안에 생성해야 한다.

2) database 생성하기

  Future<Database> get database async {
    if (_db != null) return _db;
    _db = openDatabase(
      join(await getDatabasesPath(), 'assetportfolio.db'),
      onCreate: (db, version) => _createDb(db),
      version: 1,
    );
    return _db;
  }

3) database TABLE 생성하기

  • db.execute()를 이용하여 테이블을 생성한다.
  static void _createDb(Database db) {
    db.execute("CREATE TABLE assetportfolio(kind TEXT PRIMARY KEY, asset TEXT, safety TEXT, percent REAL, money INTEGER)");
  }

4) Create(Insert) 메소드 작성하기

  Future<void> insertAssetPortfolio(AssetPortfolio assetPortfolio) async {
    final db = await database;

    await db.insert(
      mainTableName, //테이블 명
      assetPortfolio.toMap(),
      conflictAlgorithm: ConflictAlgorithm.replace, //기본키 중복시 대체
    );
  }

5) Read 메소드 작성하기

  • ReadAll
 Future<List<AssetPortfolio>> getAllAssetPortfolio() async {
    final db = await database;

    // 모든 AssetPortfolio를 얻기 위해 테이블에 질의합니다.
    final List<Map<String, dynamic>> maps = await db.query('assetportfolio');

    // List<Map<String, dynamic>를 List<AssetPortfolio>으로 변환합니다.
    return List.generate(maps.length, (i) {
      return AssetPortfolio(
        kind: maps[i]['kind'],
        asset: maps[i]['asset'],
        safety: maps[i]['safety'],
        percent: maps[i]['percent'],
        money: maps[i]['money'],
      );
    });
  }
  • Read(kind 값으로 찾기)
  Future<dynamic> getAssetPortfolio(String kind) async {
    final db = await database;

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

    return maps.isNotEmpty ? maps.first['kind'] : null;
  }

6) Update 메소드 작성하기

  Future<void> updateAssetPortfolio(AssetPortfolio assetPortfolio) async {
    final db = await database;

    // 주어진 assetPortfolio를 수정합니다.
    await db.update(
      mainTableName,
      assetPortfolio.toMap(),
      // assetPortfolio의 kind가 일치하는 지 확인합니다.
      where: "kind = ?",
      whereArgs: [assetPortfolio.kind],
    );
  }

7) Delete 메소드 작성하기

  Future<void> deleteAssetPortfolio(String kind) async {
    final db = await database;

    // 데이터베이스에서 AssetPortfolio를 삭제합니다.
    await db.delete(
      mainTableName,
      // 특정 AssetPortfolio를 제거하기 위해 `where` 절을 사용하세요
      where: "kind = ?",
      whereArgs: [kind],
    );
  }

6. 마침

위의 내용은 '재즐보프'님의 블로그를 참고하였습니다.
해당 링크: https://blog.naver.com/isc0304/221841891070

profile
꾸준함이 최선이다.

0개의 댓글