반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- identifierForVender
- androidId
- Babel standalone
- KakaoMap
- Excel
- RouteObserver
- Completer
- uint16array
- node
- Flutter
- REST API
- Raycasting
- uint8array
- typescript
- web track
- Game js
- userevent_tracker
- Three-fiber
- react
- jszip
- methodChannel
- Three js
- Image Resize typescript
- Redux
- babel
- FirebaseAnalytics
- code editor
- swagger-typescript-api
- webrtc
- Prism.js
Archives
- Today
- Total
Never give up
Flutter - When you store data in SQFLlite 본문
반응형
기본적으로 SQLite에서는 NULL, INTEGER, REAL, TEXT, BLOB형태로 저장이 됩니다
NULL은 데이터 값이 비어있을때
INTEGER는 정수형 (int value, DateTime, bool 등)
DateTime의 경우 INSERT할 때 DateTime.millisecondsSinceEpoch
값으로 저장 후 불러올 때는 DateTime.fromMillisecondsSinceEpoch(value)과 같은 형태로 불러옵니다
ex)
데이터 클래스
void setTodayData(DateTime time, int percent) async {
_map[time] = percent;
notifyListeners();
await _manager.setStatus(time.millisecondsSinceEpoch, percent);
}
DBHelper
Future<int> setStatus(int date, int percent) async {
var database = await _openDB();
int insert = await database.rawInsert(
'INSERT INTO $statusTable(date, percent) VALUES (?, ?)',
[date, percent]);
return insert;
}
Future<Map<DateTime, int>> getStatus() async {
var database = await _openDB();
List<Map> rawList = await database.rawQuery('SELECT * FROM $statusTable');
return Map.fromIterable(rawList,
key: (value) => DateTime.fromMillisecondsSinceEpoch(value['date']),
value: (value) => value['percent']);
}
bool 같은 경우 data class에서 다음과 같이 변환 유틸을 만들어 주면 간단합니다
ex)
데이터 클래스
class MyItem{
String title;
int checkbox;
MyItem({this.title, this.checkbox = 0}); //1 : true 0 : false
bool get getCheckBox{
return (checkbox == 1);
}
void toggleCheckbox(){
if(getCheckBox){
checkbox = 0;
} else{
checkbox = 1;
}
}
}
TEXT는 문자열
DateTime을 문자열로 저장하고 싶을때는
DateTime.toIso8601String()과 같은 형태로 저장 후 DateTime.parse로 불러오면 됩니다
currentTime.toIso8601String();
time = DateTime.parse(currentTime.toIso8601String());
위의 INTEGER예와 같은 DB에서는 다음과 같이 하면 될것같습니다
Future<int> setStatus(String date, int percent) async {
var database = await _openDB();
int insert = await database.rawInsert(
'INSERT INTO $statusTable(date, percent) VALUES (?, ?)',
[date, percent]);
return insert;
}
Future<Map<DateTime, int>> getStatus() async {
var database = await _openDB();
List<Map> rawList = await database.rawQuery('SELECT * FROM $statusTable');
return Map.fromIterable(rawList,
key: (value) => DateTime.parse(value['date']),
value: (value) => value['percent']);
}
이외에 REAL과 BLOB형태가 있는데
REAL은 소수점이 있는 실수형을 저장할 때 사용되고
BLOB은 bitmap을 byte array로 변환된 값 등을 저장할 때 사용됩니다
반응형
'Flutter' 카테고리의 다른 글
Flutter - Provider Consumer and Selector (0) | 2020.08.03 |
---|---|
Flutter - List<Map> to Map or List with SQFLite (0) | 2020.08.03 |
Flutter - How to solve Error: No pubspec.yaml file found. (8) | 2020.08.03 |
Flutter - SharedPreferences set and get Color (0) | 2020.08.03 |
Flutter - Provider listen : false with http (0) | 2020.08.03 |
Comments