添加依赖
sqflite: 1.3.1
官方文档:https://pub.dev/packages/sqflite
建立辅助类
import 'dart:async';
import 'package:flutterdemo/library/sqflite/article_provider.dart';
import 'package:flutterdemo/library/sqflite/person_provider.dart';
import 'package:sqflite/sqflite.dart';
class SqfliteHelper {
Database database;
//饿汉式单例
static SqfliteHelper _instance = SqfliteHelper._();
//工厂模式,单例公开访问点
factory SqfliteHelper() => _getInstance();
//私有构造
SqfliteHelper._();
static SqfliteHelper _getInstance() {
return _instance;
}
Future<Database> init() async {
String path = await getDatabasesPath();
path = '$path/flutter_demo.db';
print('路径:$path');
database = await openDatabase(
path,
version: 2,
singleInstance: false,
onCreate: _onCreate,
onUpgrade: _onUpgrade,
onDowngrade: _onDowngrade,
);
return database;
}
FutureOr<void> _onUpgrade(Database db, int oldVersion, int newVersion) async {
Batch batch = db.batch();
if (oldVersion == 1) {
batch.execute('alter table ta_person add fire text');
} else if (oldVersion == 2) {
batch.execute('alter table ta_person add water text');
} else if (oldVersion == 3) {}
oldVersion++;
//升级后版本还低于当前版本,继续递归升级
if (oldVersion < newVersion) {
_onUpgrade(db, oldVersion, newVersion);
}
await batch.commit();
}
FutureOr<void> _onCreate(Database db, int version) async {
db.execute(ArticleProvider().createSql);
db.execute(PersonProvider().createSql);
}
FutureOr<void> _onDowngrade(
Database db, int oldVersion, int newVersion) async {
Batch batch = db.batch();
await batch.commit();
}
Future<bool> isTableExists(String table) async {
String sql =
"select * from Sqlite_master where type='table' and name= '$table'";
var result = await database.rawQuery(sql);
return result != null && result.length > 0;
}
tableName() async {
String sql = "select * from Sqlite_master where type='table' ";
var result = await database.rawQuery(sql);
result.forEach((element) {
print(element.toString());
});
}
}
import 'package:flutterdemo/library/sqflite/sqflite_helper.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sqflite/sqlite_api.dart';
final String _id = 'id';
final String _title = 'title';
final String _content = 'content';
class Article {
int id;
String title;
String content;
Article({this.id, this.title, this.content});
Map<String, dynamic> toMap() {
Map<String, dynamic> map = {
_title: title,
_content: content,
};
return map;
}
Article.fromMap(Map<String, dynamic> map) {
id = map[_id];
title = map[_title];
content = map[_content];
}
}
class ArticleProvider {
Database _database;
static const String _table = 'ta_article';
String createSql =
'CREATE TABLE $_table ($_id INTEGER PRIMARY KEY, $_title TEXT, $_content TEXT)';
ArticleProvider() {
_database = SqfliteHelper().database;
}
Future insert(Article article) async {
return await _database.insert(_table, article.toMap());
}
Future inserts(List<Article> articles) async {
Batch batch = _database.batch();
articles.forEach((element) {
batch.insert(_table, element.toMap());
print('${DateTime.now()}--${element.toMap()}');
});
return await batch.commit();
}
Future<Article> query(int id) async {
List<Map> maps = await _database.query(
_table,
columns: [_id, _title, _content],
where: '$_id=?',
whereArgs: [id],
limit: 1,
);
if (maps.length == 1) {
return Article.fromMap(maps.first);
} else {
return null;
}
}
Future<List<Article>> queryAll() async {
List<Map> maps = await _database.query(_table);
List<Article> list = [];
maps.forEach((element) {
list.add(Article.fromMap(element));
});
return list;
}
Future delete(int id) async {
return await _database.delete(
_table,
where: '$_id=?',
whereArgs: [id],
);
}
Future update(Article article) async {
return await _database.update(
_table,
article.toMap(),
);
}
Future close() async {
return await _database.close();
}
Future drop() async {
String path = await getDatabasesPath();
path = '$path/demo.db';
return await deleteDatabase(path);
}
Future clear() async {
await _database.delete(_table);
}
}
import 'package:sqflite/sqflite.dart';
import 'package:sqflite/sqlite_api.dart';
import 'sqflite_helper.dart';
final String _id = 'id';
final String _name = 'name';
final String _age = 'age';
class Person {
int id;
String name;
int age;
Person(this.id, this.name, this.age);
Map<String, dynamic> toMap() {
Map<String, dynamic> map = {
_name: name,
_age: age,
};
return map;
}
Person.fromMap(Map<String, dynamic> map) {
id = map[_id];
name = map[_name];
age = map[_age];
}
}
class PersonProvider {
Database _database;
static const String _table = 'ta_person';
String createSql =
'CREATE TABLE $_table ($_id INTEGER PRIMARY KEY, $_name TEXT, $_age INTEGER)';
PersonProvider() {
_database = SqfliteHelper().database;
}
Future insert(Person person) async {
return await _database.insert(_table, person.toMap());
}
Future inserts(List<Person> persons) async {
Batch batch = _database.batch();
persons.forEach((element) {
batch.insert(_table, element.toMap());
print('${DateTime.now()}--${element.toMap()}');
});
return await batch.commit();
}
Future<Person> query(int id) async {
List<Map> maps = await _database.query(
_table,
columns: [_id, _name, _age],
where: '$_id=?',
whereArgs: [id],
limit: 1,
);
if (maps.length == 1) {
return Person.fromMap(maps.first);
} else {
return null;
}
}
Future<List<Person>> queryAll() async {
List<Map> maps = await _database.query(_table);
List<Person> persons = [];
maps.forEach((element) {
persons.add(Person.fromMap(element));
});
return persons;
}
Future delete(int id) async {
return await _database.delete(
_table,
where: '$_id=?',
whereArgs: [id],
);
}
Future update(Person person) async {
return await _database.update(
_table,
person.toMap(),
);
}
Future close() async {
return await _database.close();
}
Future drop() async {
String path = await getDatabasesPath();
path = '$path/demo.db';
return await deleteDatabase(path);
}
Future clear() async {
await _database.delete(_table);
}
}
附带创建表的工具类
https://gitee.com/jiangzhuqingfeng/SmartSevice.git java工程
建立Model
/**
* 实体类model
*/
public class Model {
/**
* 设备序列号
* 通行时间
* 人员ID
* 人员name
* 对比分值
* error_code
* 图片1
* 图片2
*/
private String deviceNo;
private String compareTime;
private String staff_no;
private String staff_name;
private double score;
private int errorCode;
private String faceCropUrl;
private String openFaceUrl;
}
执行如下代码生成dart建表需要的列
static void jsonToDartProperty() {
String jsonStr = "";
Model model = new Model();
Map<String, String> stringStringMap = ConvertMapHelper.objectSelefToMap(model);
for (String key : stringStringMap.keySet()) {
System.out.println(String.format("static const String %s='%s';", key,
stringStringMap.get(key)));
}
}
static const String _compareTime='compareTime';
static const String _deviceNo='deviceNo';
static const String _errorCode='errorCode';
static const String _faceCropUrl='faceCropUrl';
static const String _openFaceUrl='openFaceUrl';
static const String _score='score';
static const String _staff_name='staff_name';
static const String _staff_no='staff_no';