반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

welcome to my blog

[Flutter] database 정리 (2) 본문

Flutter

[Flutter] database 정리 (2)

_annie_ 2021. 11. 4. 20:02
728x90

해볼것 : 

1. database 생성

2. 항목 추가

3. 저장내용 읽어오기

4. 항목 삭제

5. 내용 수정(update)

 

필요한 패키지 : path, path_provider, sqflite

void setPath() async {
    print('setPath !!!');
    var databasePath = await getDatabasesPath();
    _path = join(databasePath, 'demo123.db');
    print('path @@ : ${_path}');
  }

  void open() async {
    print('open !!!');
    Database database = await openDatabase(_path, version: 1,
        onCreate: (Database db, int version) async {
          // When creating the db, create the table
          await db.execute(
              'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
        });
    _database = database;
  }

1. database 생성

클래스 멤버변수로 var _database(데이터베이스)와 var _path(경로저장) 를 선언

getDatabasePath 함수로 일반적인 단말의 데이터베이스 저장 경로를 읽어온다음 setPath함수로 _path에 경로를 저장해주었다.

open()함수를 호출하면 _path에 지정해둔 경로로 demo123.db 라는 이름의 데이터베이스가 생성된다.

TABLE 이름은 Test 이고, name, value, num 이라는 이름의 Column이 생성된다.

name은 String 타입, value는 Int 타입, num은 부동소수점숫자 타입 정도로 보면 된다. 

 

void insert() async {
    print('insert !!!');
    await _database.transaction((txn) async {
      int id1 = await txn.rawInsert(
          'INSERT INTO Test(name, value, num) VALUES("이름1", 1234, 555.11)');
      print('inserted1: $id1');
      int id2 = await txn.rawInsert(
          'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
          ['이름2', 123456, 1.1234]);
      print('inserted2: $id2');
    });
  }

2. 항목 추가

이제 Database와 테이블을 생성했으니 데이터를 넣어보도록 하겠다.

첫번째로 name, value, num 에 각각 "이름1", 1234, 555.11 이라는 데이터를 넣고,

두번째로 name, value, num에 각각 "이름2", 123456, 1.1234 라는 데이터를 넣고있다.

transaction함수는 위의 두 쿼리가 모두 성공해야 동작한다. (실패하면 이전상황으로 되돌림)

 

void getData() async {
    print('getData !!!');
    List<Map> list = await _database.rawQuery('SELECT * FROM Test');
    print(list);
  }

3. 저장내용 읽어오기

입력한 데이터가 제대로 들어갔는지 확인해보겠다.

"SELECT * FROM 테이블명"으로 Test 테이블에 있는 모든 데이터를 받아와서 프린트해준다.

 

void deleteDB(String item) async {
    var database = getInstance();
    await database.transaction((txn) async {
      var count = await txn.delete('Test', where: 'name = ?', whereArgs: [item]);
      print(count);
    });
  }

4. 항목 삭제

잘못 입력했거나 필요가없어져서 데이터를 삭제하고싶다면 delete를 이용한다.

'Test' 테이블의 where절에 컬럼명을 넣고 whereArgs에 삭제하고싶은 데이터를 넣는다.

 

void updateDB(int isChecked, String item) async {
    var database = getInstance();
    await database.transaction((txn) async {
      var count = await txn.update('Test', {'isChecked': isChecked}, where: 'content = ?', whereArgs: [item]);
      print(count);
    });
  }

5. 내용 수정(update)

기존에 등록되었던 항목의 특정 값을 변경하고싶을때는 update를 사용한다.

'Test' 테이블에서

'content' 열의 데이터가 item 인 것의 데이터를 변경할것이다.

어떤 데이터를 변경할것이냐면, 'isChecked' 열의 데이터를 매개변수로 전달받은 isChecked로 변경할것이다. 

728x90
반응형