[Flutter] Sqlite를 구현하는 Drift
반응형
들어가기에 앞서..
플러터에서 pubspec.yaml 파일에서 dependencies와 dev_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();
반응형
'Study > Flutter' 카테고리의 다른 글
[Flutter] 플로팅 버튼 중단부에 위치시키기 BottomApp, Floationg Action (0) | 2023.02.02 |
---|---|
[Flutter] Button 종류 변경 (0) | 2023.02.02 |
[Flutter] Widget을 밀어서 삭제하는 Dismissible (0) | 2023.01.27 |
[Flutter] gradle 버전 이슈 (0) | 2023.01.25 |
[Flutter] Scaffold 정리 (0) | 2023.01.19 |
댓글