728x90
반응형
이번 글에서는 지난 글에 이어서 drift를 사용하여 CRUD 하는 방법을 알아보도록 하겠습니다.
이전 글을 못 보신 분들은 아래 링크를 참고해 주세요
https://itmoon.tistory.com/104
CRUD에 사용할 메서드를 만들어 줍시다.
drift_database.dart
import 'dart:io';
import 'package:database/model/member.dart';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as P;
// 여기는 자동생성 할 파일
part 'drift_database.g.dart';
@DriftDatabase(
tables: [
Member,
],
)
class LocalDatabase extends _$LocalDatabase{
LocalDatabase() : super(_openConnection());
@override
int get schemaVersion => 1;
// 생성 메소드 Future<int> 선언하여 insert count 를 받을수 있다.
Future<int> createMember(MemberCompanion data) =>
into(member).insert(data);
// 전체 member 를 가져올 수 있다.MemberData 는 .g 파일에 생성되어 있다.
Future<List<MemberData>> getMembers() =>
select(member).get();
// 단건의 member 를 조회할 수 있다.
// 조건문 사용시 아래처럼 두가지 방법으로 사용할 수 있다.
// select(member).where((tbl) => tbl.id.equals(id)).getSingle() 이렇게 사용할 경우
// select(member) 에 대해서 getSingle() 함수가 호출 되는것이 아닌
// where((tbl) => tbl.id.equals(id)) 이 타겟으로 되어 에러가 난다.
Future<MemberData> getMember(int id) =>
(select(member)..where((tbl) => tbl.id.equals(id))).getSingle();
Future<MemberData> getMember2(int id) {
final query = select(member);
query.where((tbl) => tbl.id.equals(id));
return query.getSingle();
}
// member delete
Future<int> removeMember(int id)=>
(delete(member)..where((tbl) => tbl.id.equals(id))).go();
// member update
Future<int> updateMember(int id, MemberCompanion m)=>
(update(member)..where((tbl) => tbl.id.equals(id))).write(m);
}
LazyDatabase _openConnection(){
return LazyDatabase(() async{
final dbFolder = await getApplicationDocumentsDirectory();// 앱 전용으로 사용할 수 있는 폴더
final file = File(P.join(dbFolder.path,'db.sqlite')); // 저장할 db 파일 생성
return NativeDatabase(file);
});
}
그다음 만들어둔 메서드를 사용하기 위한 세팅을 해줍시다.
main.dart
import 'package:database/screen/home_screen.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'database/drift_database.dart';
void main() {
WidgetsFlutterBinding
.ensureInitialized(); // flutter 가 준비가 될 떄 까지 기다린다. runApp 을 실행하면 자동으로 실행되나 runApp 전에 실행하는 코드가 있으면 이미 실행시켜 준다.
final database = LocalDatabase();
GetIt.I.registerSingleton<LocalDatabase>(database); // 어디에서든 해당 데이터베이스를 사용할 수 있다.
runApp(MaterialApp(
home: HomeScreen(),
));
}
여기까지 CRUD를 하기 위한 작업을 해보았습니다.
다음 편 에서는 화면에서 직접 사용하여 보겠습니다.
감사합니다 ^^
728x90
반응형
'Flutter' 카테고리의 다른 글
[ Flutter ] Cannot fit requested classes in a single dex file (# methods: 68653 > 65536) 에서 해결하기 (0) | 2023.01.29 |
---|---|
[ Flutter ] sqlite & drift 사용하기 - 3편 (0) | 2022.12.21 |
[ Flutter ] sqlite & drift 사용하기 -1편 (0) | 2022.12.04 |
[ Flutter ] 배경 데코레이션 & 이미지 터치 만들기 (0) | 2022.11.06 |
[ Flutter ] Slider 사용하기 (0) | 2022.11.06 |