본문 바로가기

[Flutter] Sqlite를 구현하는 Drift

I'm 영서 2023. 1. 30.
반응형
들어가기에 앞서..

플러터에서 pubspec.yaml 파일에서 dependenciesdev_dependencies 항목이 있는데 

dependencies는 앱에 함께 패키징 되나, dev_dependencies 는 개발될 때만 사용되고 앱과 함께 패키징 되지 않으므로 개발할 때만 필요하고 앱을 실행할 때 필요 없는 플러그인을 입력한다. 

 

Drift

클래스를 이용해서 SQLite 데이터베이스를 구현할 수 있는 플러그인으로 다트언어로 데이터베이스 테이블과 쿼리를 구현하면 자동으로 쿼리를 생성해준다. 이러한 일련의 기능을 코드생성(Code Generation)이라고 부르며, 코드생성은 데이터베이스 관련 코드가 변경될 때마다 한번씩만 실행해주면 되기 때문에 앱과함께 패키징 될 필요가 없으므로 dev_dependencies에 넣는다.

 

Drift는 의존성을 주입해주면 

part 'drift_database.g.dart';
// terminal 에서 flutter pub run build_runner build

자동으로 코드생성을 해주며 필요한 코드를 작성해준다.  flutter pub run build_runner build  )

 

Drift 는 필수 구성요소로 schemaVersion이 있는데, 일반적으로 1부터 시작하고 Table의 변화가 있을때 1씩올려준다.

 

 

Create
CREATE TABLE Student(
	ID_STU INTERGER PRIMARY KEY AUTOINCREMENT,
	DS_NAME VARCHAR NOT NULL,
	NO_NUM INT DEFAULT 0,
	NO_WEIGHT INT NOT NULL
)

>

import 'package:drift/drift.dart';

class Student extends Table{
  IntColumn get id_stu => integer().autoIncrement()();
  TextColumn get ds_name => text()();
  IntColumn get no_num => integer().withDefault(const Constant(0))();
  IntColumn get no_weight => integer().nullable()();
}

 

Insert

Insert는 into함수를 통해 어떤 table에 들어갈지를 먼저 정한 후 data를 삽입

Future<int> insertStudent(StudentCompanion data) => into(student).insert(data)

 

 

Select

select 는 두가지로 일회성으로 데이터를 가져오는 get(), 변화가 있을때마다 자동으로 데이터를 불러오는 watch()가 있다.

Stream<List<Student>> watchStudent(int grade) => 
  select(student).watch();//모든 학생 조회
 // (select(student)..where( (tbl) => tbl.date.equals(grade) ) ).watch() //특정학년만 조회
 
 //get
 Future<List<Student>> watchStudent(int grade) => 
  select(student).watch();//모든 학생 조회
 // (select(student)..where( (tbl) => tbl.date.equals(grade) ) ).get() //특정학년만 조회

 

 

Delete

go()함수를 사용하여 삭제 수행

Future<int> removeStudent(int stu_id) =>
      (delete(schedules)..where((tbl) => tbl.id.equals(stu_id))).go();
반응형

댓글