티스토리 뷰

개발

내부 DB sqflite CRUD 샘플

코지식 2024. 9. 23. 01:00

목차



    반응형

    -출처 홍드로이드 강좌->

     

    import 'package:archive_idea/data/idea_info.dart';
    import 'package:sqflite/sqflite.dart';
    import 'package:path/path.dart';

    class DatabaseHelper {
    late Database database;

    //데이터 베이스 초기화 및 열기
    Future<void> initDatabase() async {
    // 데이터 베이스 경로 가져오기
    String path = join(await getDatabasesPath(), 'archive_idea.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
    )
    ''');
    },
    );
    }

    //insert
    Future<int> insertIdeaInfo(IdeaInfo idea) async {
    return await database.insert('tb_idea', idea.toMap());
    }

    //select
    Future<List<IdeaInfo>> getAllIdeaInfo() async {
    //데이터 베이스에서 응답받을때는 우선 맵형태로 리턴 받아야함
    final List<Map<String, dynamic>> result = await database.query('tb_idea');
    return List.generate(result.length, (index) {
    return IdeaInfo.fromMap(result[index]);
    });
    }

    // update
    Future<int> updateIdeainfo(IdeaInfo idea) async {
    return await database
    .update('tb_idea',
    idea.toMap(),
    where: 'id = ?',
    whereArgs: [idea.id],
    );
    }

    //delete
    Future<int> deleteIdeainfo(IdeaInfo idea) async {
    return await database
    .delete(
    'tb_idea',
    where: 'id = ?',
    whereArgs: [idea.id],
    );
    }

    //데이터 베이스 닫기 (앱 내에서 데이터 베이스 사용하지 않는경우 닫아줘야함
    Future<void> closeDatabase() async{
    await database.close();
    }
    }

     

    조회 샘플

    Future<void> getIdeaInfo() async {
    await dbHelper.initDatabase();
    lstideaInfo = await dbHelper.getAllIdeaInfo();
    // 리스트 객체 역순으로 정렬
    lstideaInfo.sort((a, b) => b.createdAt.compareTo(a.createdAt));
    setState(() {});
    }

     

     

    저장 샘플



    Future<void> setInsertIdeaInfo() async {
    await dbHelper.initDatabase();
    await dbHelper.insertIdeaInfo(IdeaInfo(
    title: '# 가나다라마바사',
    motive: '길가다가 쓰레게 줍기',
    content: '상세 내용 입니다',
    priority: 5,
    feedback: '피드백 사항',
    createdAt: DateTime.now().millisecondsSinceEpoch,
    ));
    }
    반응형