Flutter sqflite 사용 - 테이블 구조 업그레이드

6227 단어
전언
sqflite는 경량급 데이터베이스로 SQLite와 유사하다.Flutter 플랫폼에서 우리는 sqflite 라이브러리를 사용하여 안드로이드와 iOS를 동시에 지원합니다.sqflite는 테이블 구조의 업그레이드를 지원할 수 있습니다.
1、pubspec.yaml 라이브러리 가져오기
#   
sqflite: ^1.3.0
#  
path_provider: ^1.5.0

2, 가져오기 헤더 파일
import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart’;
3. 흔한 필드의 정의
//                
final _version = 2;
//     
final _name = "DataBase.db";
//   
final _table = "SearchTable";
//   
final _userId   = "userId";
final _nickName = "nickName";
final _mobile   = "mobile";
//           
final _sex       = "sex”;

4、데이터베이스 만들기name
ATQueue.internal();
//     
static Database _database;
Future get database async {
  if (_database == null) {
    var databasesPath = await getDatabasesPath();
    String path = join(databasesPath, _name);
    _database =  await openDatabase(path,version: _version,onCreate: _onCreate,onUpgrade:_onUpgrade);
  }
  return _database;
}

5、테이블 생성table
//   
void _onCreate(Database db,int version) async{
  print("createTable version $version");
  final sql = '''
      create table if not exists $_table (
      $_userId   integer primary key,
      $_nickName text not null,
      $_mobile text not null,
      $_sex  text)
    ''';
  var batch = db.batch();
  batch.execute(sql);
  await [batch.commit();](http://batch.commit();/)
}
//                   sex ,           
void _onUpgrade(Database db, int oldVersion, int newVersion) async{
  if (oldVersion < 2){
    var batch = db.batch();
    print("updateTable version $oldVersion $newVersion");
    batch.execute('alter table $_table add column $_sex text');
    await [batch.commit();](http://batch.commit();/)
  }
//   if (oldVersion < 2){
//     var batch = db.batch();
//     try{
//       final sal = 'select $_sex from $_table';
//       await db.rawQuery(sal);
//     }catch (error){
//       print(error);
//       print("======================");
//       batch.execute('alter table $_table add column $_sex text');
//       await [batch.commit();](http://batch.commit();/)
//       //       sex
//     }
//   }
}

6, 열기, 데이터베이스 닫기
//  
Future open() async{
  return await database;
}
///  
Future close() async {
  var db = await database;
  return db.close();
}

7. 데이터 삽입 일반 삽입/사무 삽입
static Future insertData(int userId,String nickName,String mobile,{String sex = " "}) async{
  Database db = await ATQueue.internal().open();
  //1、    
  //await db.rawInsert("insert or replace into $_table ($_userId,$_nickName,$_mobile,$_sex) values (?,?,?,?)",[userId,nickName,mobile,sex]);
  //2、    
  db.transaction((txn) async{
     txn.rawInsert("insert or replace into $_table ($_userId,$_nickName,$_mobile,$_sex) values (?,?,?,?)",[userId,nickName,mobile,sex]);
  });
  await db.batch().commit();
}

8. 데이터 수정 일반 제출/사무 제출
static Future updateData(int userId,String nickName,String mobile) async{
  Database db = await ATQueue.internal().open();
  //1、    
 // await db.rawUpdate("update $_table set $_nickName =  ?,$_mobile =  ? where $_userId = ?",[nickName,mobile,userId]);
  //2、    
  db.transaction((txn) async{
     txn.rawUpdate("update $_table set $_nickName =  ?,$_mobile =  ? where $_userId = ?",[nickName,mobile,userId]);
  });
  await db.batch().commit();
}

9. 데이터 삭제 일반 제출/사무 제출
static Future deleteData(int userId) async{
  Database db = await ATQueue.internal().open();
  //1、    
  //await db.rawDelete("delete from $_table where $_userId = ?",[userId]);
  //2、    
  db.transaction((txn) async{
     txn.rawDelete("delete from $_table where $_userId = ?",[userId]);
  });
  await db.batch().commit();
}

10. 데이터 조회 단일 조회 모든 조회 페이지 조회
static Future searchData(int userId) async {
  Database db = await ATQueue.internal().open();
  List> maps = await db.rawQuery("select * from $_table where $_userId = $userId");
  print(maps);
  return maps;
}
static Future searchDatas() async {
  Database db = await ATQueue.internal().open();
  List> maps = await db.rawQuery("select * from $_table");
  print(maps);
  return maps;
}
static Future searchDataSize(int page,int size) async {
  Database db = await ATQueue.internal().open();
  List> maps = await db.rawQuery("select * from $_table order by $_userId asc limit ?,?",[(page - 1) * size,size]);
  print(maps);
  return maps;
}

11. 사용 방법
ATUserQueue.insertData(110, "  ", "15160023363”);
ATUserQueue.updateData(110, "     ", "15280592811”);
ATUserQueue.searchDatas();
ATUserQueue.deleteData(110);

12. 주의
표 구조의 업그레이드와 관련이 있기 때문이다.모든 이쪽에는 두 가지 버전 번호가 있어요. 1과 2, 1 버전.
final _userId   = "userId";
final _nickName = "nickName";
final _mobile   = "mobile";

그래서 표를 만들 때도 이 세 개의 필드만 있고 삽입할 때도 세 개의 필드만 있다는 것을 주의해야 한다.
  final sql = '''
      create table if not exists $_table (
      $_userId   integer primary key,
      $_nickName text not null,
      $_mobile text not null
    ''';

2 버전 번호가 sex가 하나 더 생겼어요.
final _userId   = "userId";
final _nickName = "nickName";
final _mobile   = "mobile";
//           
final _sex       = "sex”;

그래서 표를 만들 때도 이 네 개의 필드가 있고 삽입할 때도 네 개의 필드가 있다는 것을 주의해야 한다.
  final sql = '''
      create table if not exists $_table (
      $_userId   integer primary key,
      $_nickName text not null,
      $_mobile text not null,
      $_sex  text)
    ''';

시계 업그레이드와 관련이 있기 때문에 오래된 버전 번호가 지정된 버전 번호 2보다 작을 때 업그레이드를 촉발하는 방법입니다. 물론 2라는 버전 번호에 설치하면 오래된 버전 번호가 없으면 업그레이드를 촉발하지 않고 4개의 필드의 시계를 직접 만듭니다.잘 못 썼으니 양해해 주십시오

좋은 웹페이지 즐겨찾기