개발로그필름
[Flutter] sqlite 본문
728x90
반응형
SMALL
파일 기반의 가벼운 데이터베이스
MySQL, postgreSQl 등과 달리 서버 필요 없이 하나의 파일 안에 모든 데이터를 저장하는 구조
설치나 설정 과정이 필요 없고 쉽게 사용가능해서 많은 어플리케이션에서 널리 사용된다
database_helper.dart
import 'package:achieve_idea/data/idea_info.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
// 데이터베이스 관련 작업을 처리하는 도우미 클래스
class DatabaseHelper {
// 데이터베이스 객체를 저장할 변수
// late 키워드는 나중에 해당 변수에 값을 넣겠다는 뜻. 데이터베이스 초기화 후 값 할당 됨
late Database database;
// 데이터 베이스 초기화 및 열기
// 앱이 실행될 때 데이터베이스를 미리 준비해두는 과정
Future<void> initDatabase() async {
// 데이터 베이스 경로 가져오기
// getDatabasesPath()는 SQLite db가 저장될 경로 가져옴. 앱 로컬 저장소에 위치.
// 데이터파일은 archive_idea.db 이름으로 저장됨
// join()은 경로와 데이터베이스 이름 합쳐서 전체 경로 만든다
String path = join(await getDatabasesPath(), 'archive_idea.db');
// 데이터 베이스 열기 또는 생성
// onCreate - db가 처음 생성될 때 호출. 테이블 생성.
database = await openDatabase(
path,
version: 1,
onCreate: (db, version) {
// 데이터 베이스가 생성될 때 실행되는 코드
db.execute('''
CREATE TABLE IF NOT EXISTS tb_idea (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
motive TEXT,
content TEXT,
priority INTEGER,
feedback TEXT,
createdAt INTEGER
)
''');
},
);
}
// IdeaInfo 데이터 삽입 (insert)
Future<int> insertIdeaInfo(IdeaInfo idea) async {
return await database.insert('tb_idea', idea.toMap());
}
// IdeaInfo 데이터 조회 (select)
// tb_idea 테이블에 있는 모든 데이터를 읽어와 IdeaInfo 객체로 변환하고 이를 list로 반환
Future<List<IdeaInfo>> getAllIdeaInfo() async {
// final은 변수 값 한 번만 할당하도록 제한하는 키워드. 값 변경 안됨.
final List<Map<String, dynamic>> result = await database.query('tb_idea');
// List.generate()는 result 리스트 안의 데이터를 하나씩 꺼내서
// IdeaInfo 객체로 변환한 뒤 다시 새로운 리스트로 만들어준다
return List.generate(result.length, (index) {
// result에 있는 Map 데이터를 받아서 IdeaInfo 객체로 변환하는 작업.
return IdeaInfo.fromMap(result[index]);
});
}
//IdeaInfo 데이터 수정 (update)
Future<int> updateIdeaInfo(IdeaInfo idea) async {
return await database.update(
'tb_idea',
idea.toMap(),
// 플레이스 홀더 느낌. 나중에 실제 id 값이 whereArgs로 전달 된다
where: 'id = ?',
// 수정할 데이터의 id 값.
// 특정 id를 가진 행만 수정됨
whereArgs: [idea.id],
);
}
// IdeaInfo 데이터 삭제 (delete)
Future<int> deleteIdeaInfo(int id) async {
return await database.delete(
'tb_idea',
// 플레이스 홀더 느낌. 나중에 실제 id 값이 whereArgs로 전달 된다
where: 'id = ?',
// 수정할 데이터의 id 값.
// 특정 id를 가진 행만 수정됨
whereArgs: [id],
);
}
// 데이터베이스 닫기. 앱 내에서 데이터베이스 사용 하지 않게 될 경우 닫아야함.
Future<void> closeDatabase() async {
await database.close();
}
}
반응형
LIST
'IT > Flutter' 카테고리의 다른 글
[Flutter] Map 데이터를 사용해 객체 생성하는 방법 (0) | 2024.10.07 |
---|---|
[Flutter] toMap() (0) | 2024.10.07 |
[Flutter] SnackBar (0) | 2024.10.07 |
[Flutter] GestureDetector (0) | 2024.10.04 |
[Flutter] shared preferences (0) | 2024.10.04 |
Comments