[flutter] 플러터(flutter)와 데이터베이스 연동 방법

플러터(Flutter)는 Google에서 개발한 모바일 앱 개발 프레임워크로, 앱을 다양한 플랫폼에서 동작할 수 있도록 지원합니다. 데이터베이스는 앱에서 중요한 데이터를 저장하고 관리하는데 필수적입니다. 이번 포스트에서는 플러터와 데이터베이스를 연동하는 방법에 대해 알아보겠습니다.

SQLite 데이터베이스 사용하기

SQLite는 플러터에서 가장 많이 사용되는 내장형 데이터베이스입니다. SQLite를 사용하여 데이터를 저장하고 조회하는 방법은 다음과 같습니다.

  1. sqflite 패키지 추가하기: 플러터 프로젝트에 sqflite 패키지를 추가해야 합니다. pubspec.yaml 파일의 dependencies 섹션에 다음과 같이 추가합니다.
dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.0.0+3
  1. SQLite 데이터베이스 생성하기: 데이터베이스를 생성하기 위해 DBHelper 클래스를 만듭니다. DBHelper 클래스는 데이터베이스 생성, 테이블 생성 등의 기능을 제공합니다.
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

class DBHelper {
  static final DBHelper _instance = DBHelper.internal();
  factory DBHelper() => _instance;

  DBHelper.internal();

  static Database? _database;

  Future<Database> get database async {
    if (_database != null) {
      return _database!;
    }
    _database = await initDB();
    return _database!;
  }

  Future<Database> initDB() async {
    final documentsDirectory = await getDatabasesPath();
    final path = join(documentsDirectory, 'my_database.db');

    return await openDatabase(
      path,
      version: 1,
      onCreate: (Database db, int version) async {
        // 테이블을 생성하거나 초기 데이터를 삽입할 수 있습니다.
        await db.execute('''
          CREATE TABLE my_table (
            id INTEGER PRIMARY KEY,
            name TEXT,
            age INTEGER
          )
        ''');
      },
    );
  }
}
  1. 데이터 CRUD 작업 수행하기: DBHelper 클래스에서 데이터를 생성, 조회, 수정, 삭제(CRUD)할 수 있는 기능을 추가합니다.
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

class DBHelper {
  // ...

  Future<List<Map<String, dynamic>>> getData() async {
    final db = await database;
    return await db.query('my_table');
  }

  Future<int> insertData(Map<String, dynamic> data) async {
    final db = await database;
    return await db.insert('my_table', data);
  }

  Future<int> updateData(Map<String, dynamic> data) async {
    final db = await database;
    return await db.update(
      'my_table',
      data,
      where: 'id = ?',
      whereArgs: [data['id']],
    );
  }

  Future<int> deleteData(int id) async {
    final db = await database;
    return await db.delete(
      'my_table',
      where: 'id = ?',
      whereArgs: [id],
    );
  }
}
  1. 데이터베이스 사용하기: 이제 DBHelper 클래스를 사용하여 데이터를 생성, 조회, 수정, 삭제할 수 있습니다.
DBHelper dbHelper = DBHelper();

// 데이터 생성
int newId = await dbHelper.insertData({
  'name': 'John',
  'age': 25,
});

// 데이터 조회
List<Map<String, dynamic>> data = await dbHelper.getData();
data.forEach((row) {
  print('Name: ${row['name']}, Age: ${row['age']}');
});

// 데이터 수정
await dbHelper.updateData({
  'id': newId,
  'name': 'John Doe',
  'age': 26,
});

// 데이터 삭제
await dbHelper.deleteData(newId);

이렇게 플러터(Flutter)에서는 sqflite 패키지를 사용하여 SQLite 데이터베이스를 연동할 수 있습니다.

참고 자료

주의: 이 글에서는 데이터베이스 연동 방법에 대해 설명했지만, 보안 및 데이터 무결성을 고려해 안전한 데이터베이스 연동 방법을 선택해야 합니다. 데이터베이스 연결 및 처리 과정에서 예외 처리 및 안전한 쿼리 작성을 유념해야 합니다.