- sqflite是Flutter的SQLite插件,支持iOS和Android,目前官方版本是sqflite1.1.6+1
- sqflite插件地址:https://pub.dartlang.org/packages/sqflite#-readme-tab-
- sqflite支持事務(wù)和批處理
- sqflite支持打開期間自動(dòng)版本管理
- sqflite支持插入/查詢/更新/刪除查詢的助手
- sqflite支持在iOS和Android上的后臺(tái)線程中執(zhí)行數(shù)據(jù)庫(kù)操作
1.首選需要在pubspec.yaml 導(dǎo)入庫(kù)
#https://pub.dev/packages/sqflite 數(shù)據(jù)庫(kù)管理 相當(dāng)于sqllite
sqflite: ^1.1.6+1
2.創(chuàng)建一個(gè)sql 管理器
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
/**
* Created with IntelliJ IDEA.
* Package: db
* Author: sirai
* Create Time: 2019-06-27 15:16
* QQ: 785716471
* Email: 785716471@qq.com
* Description:數(shù)據(jù)庫(kù)管理
*/
class SqlManager{
static const _VERSION=1;
static const _NAME="qss.db";
static Database _database;
///初始化
static init() async {
var databasesPath=await getDatabasesPath();
String path = join(databasesPath, _NAME);
_database=await openDatabase(path,version: _VERSION,onCreate: (Database db,int version) async{});
}
///判斷表是否存在
static isTableExits(String tableName) async {
await getCurrentDatabase();
var res=await _database.rawQuery("select * from Sqlite_master where type = 'table' and name = '$tableName'");
return res!=null && res.length >0;
}
///獲取當(dāng)前數(shù)據(jù)庫(kù)對(duì)象
static Future<Database> getCurrentDatabase() async {
if(_database == null){
await init();
}
return _database;
}
///關(guān)閉
static close() {
_database?.close();
_database = null;
}
}
- 創(chuàng)建一個(gè)父類 主要應(yīng)用于 獲取表名 判斷表是否存在等
import 'package:bigtoe/db/sql_manager.dart';
import 'package:sqflite/sqflite.dart';
import 'package:meta/meta.dart';
/**
* Created with IntelliJ IDEA.
* Package: db
* Author: sirai
* Create Time: 2019-06-27 15:29
* QQ: 785716471
* Email: 785716471@qq.com
* Description:數(shù)據(jù)庫(kù)表
*/
abstract class BaseDbProvider {
bool isTableExits = false;
createTableString();
tableName();
///創(chuàng)建表sql語(yǔ)句
tableBaseString(String sql) {
return sql;
}
Future<Database> getDataBase() async {
return await open();
}
///super 函數(shù)對(duì)父類進(jìn)行初始化
@mustCallSuper
prepare(name, String createSql) async {
isTableExits = await SqlManager.isTableExits(name);
if (!isTableExits) {
Database db = await SqlManager.getCurrentDatabase();
return await db.execute(createSql);
}
}
@mustCallSuper
open() async {
if (!isTableExits) {
await prepare(tableName(), createTableString());
}
return await SqlManager.getCurrentDatabase();
}
}
4.新建一個(gè)表 里邊包含 增刪改查 等方法
import 'package:bigtoe/model/user_model.dart';
import 'package:sqflite/sqlite_api.dart';
import '../sql_provider.dart';
/**
* Created with IntelliJ IDEA.
* Package: db.provider
* Author: sirai
* Create Time: 2019-06-28 17:27
* QQ: 785716471
* Email: 785716471@qq.com
* Description:
*/
class PersonDbProvider extends BaseDbProvider{
///表名
final String name = 'PresonInfo';
final String columnId="id";
final String columnMobile="mobile";
final String columnHeadImage="headImage";
PersonDbProvider();
@override
tableName() {
return name;
}
@override
createTableString() {
return '''
create table $name (
$columnId integer primary key,$columnHeadImage text not null,
$columnMobile text not null)
''';
}
///查詢數(shù)據(jù)庫(kù)
Future _getPersonProvider(Database db, int id) async {
List<Map<String, dynamic>> maps =
await db.rawQuery("select * from $name where $columnId = $id");
return maps;
}
///插入到數(shù)據(jù)庫(kù)
Future insert(UserModel model) async {
Database db = await getDataBase();
var userProvider = await _getPersonProvider(db, model.id);
if (userProvider != null) {
///刪除數(shù)據(jù)
await db.delete(name, where: "$columnId = ?", whereArgs: [model.id]);
}
return await db.rawInsert("insert into $name ($columnId,$columnMobile,$columnHeadImage) values (?,?,?)",[model.id,model.mobile,model.headImage]);
}
///更新數(shù)據(jù)庫(kù)
Future<void> update(UserModel model) async {
Database database = await getDataBase();
await database.rawUpdate(
"update $name set $columnMobile = ?,$columnHeadImage = ? where $columnId= ?",[model.mobile,model.headImage,model.id]);
}
///獲取事件數(shù)據(jù)
Future<UserModel> getPersonInfo(int id) async {
Database db = await getDataBase();
List<Map<String, dynamic>> maps = await _getPersonProvider(db, id);
if (maps.length > 0) {
return UserModel.fromJson(maps[0]);
}
return null;
}
}
- 使用方法
static insert() async{
PersonDbProvider provider = new PersonDbProvider();
UserModel userModel= UserModel();
userModel.id=1143824942687547394;
userModel.mobile="15801071158";
userModel.headImage="http://www.img";
provider.insert(userModel);
}
static update() async{
PersonDbProvider provider = new PersonDbProvider();
UserModel userModel= await provider.getPersonInfo(1143824942687547394);
userModel.mobile="15801071157";
userModel.headImage="http://www.img1";
provider.update(userModel);
}