반응형
다음 링크에서 기본적인 SQLite 사용법이 정리되어있다.
2021.12.13 - 플러터 SQLite 기본 사용법 - CRUD, sqflite, Flutter, 패키지
이미 배포된 앱의 DB 내용을 바꿔야 하는 경우 처음 Database 객체를 가져올 때 onUpgrade 속성을 이용하여 바꿔줄 수 있다.
기존 Database
코드
class SqliteTestModel {
Database? _database;
Future<Database> get database async {
if (_database != null) return _database!;
return await initDB();
}
initDB() async {
String path = join(await getDatabasesPath(), 'test_database.db');
return await openDatabase(
path,
version: 1,
onCreate: _onCreate,
onUpgrade: _onUpgrade
);
}
FutureOr<void> _onCreate(Database db, int version) {
String sql = '''
CREATE TABLE testTable(
No INTEGER PRIMARY KEY AUTOINCREMENT,
UserID TEXT,
Content TEXT,
RecordDate DATETIME)
''';
db.execute(sql);
}
FutureOr<void> _onUpgrade(Database db, int oldVersion, int newVersion) {}
... 생략 ...
}
- DB에 접근하기 위해서 database 프로퍼티를 호출하게되면 openDatabase 메서드를 통해서 DB 버전 비교 후에 Database 객체를 생성해준다.
기존 Database
Database Update
기존에 만들어 놓은 테이블에 'NewColumn' 이라는 컬럼을 추가해보려한다.
코드
class SqliteTestModel {
Database? _database;
Future<Database> get database async {
if (_database != null) return _database!;
return await initDB();
}
initDB() async {
String path = join(await getDatabasesPath(), 'test_database.db');
return await openDatabase(
path,
version: 2,
onCreate: _onCreate,
onUpgrade: _onUpgrade
);
}
FutureOr<void> _onCreate(Database db, int version) {
String sql = '''
CREATE TABLE testTable(
No INTEGER PRIMARY KEY AUTOINCREMENT,
UserID TEXT,
Content TEXT,
RecordDate DATETIME,
NewColumn TEXT)
''';
db.execute(sql);
}
FutureOr<void> _onUpgrade(Database db, int oldVersion, int newVersion) {
if (oldVersion < newVersion) {
db.execute('ALTER TABLE testTable ADD COLUMN NewColumn TEXT');
}
}
... 생략 ...
}
- openDatabase 메서드를 호출할 때 DB 변경이 있음을 알려주기 위해 version을 1에서 2로 변경해주었다.
- DB가 수정된 버전의 앱을 새로 받는 사용자를 위해 _onCreate 메서드에도 'NewColumn' 컬럼을 추가해서 테이블을 생성하도록 하였다.
- _onUpgrade 메서드에는 DB 변경내용 ('NewColumn' 컬럼 추가)을 적용해주었다.
결과
반응형
'APP > Flutter' 카테고리의 다른 글
[플러터] Admob 보상형 광고 - 애드몹, Flutter (0) | 2022.01.11 |
---|---|
[플러터] Admob 전면 광고 - 애드몹, Flutter (0) | 2022.01.04 |
[플러터] Admob 기본 배너 사용법 - 안드로이드, flutter, 애드몹, 광고 (1) | 2021.12.27 |
[플러터] SQLite 기본 사용법 - CRUD, sqflite, Flutter, 패키지 (0) | 2021.12.13 |
[플러터] Database Inspector 안 보이는 경우 해결방법 - Flutter, Android Studio, 안드로이드 스튜디오 (0) | 2021.12.12 |