依赖
获取数据库路径
// 定义一个异步函数来获取数据库路径
Future<String> getDatabasePath(String dbName) async {
// 获取应用的文档目录
final directory = await getApplicationDocumentsDirectory();
// 拼接路径
final path = join(directory.path, dbName);
return path;
}
实体
class TbUserData {
late String phone;
late String name;
late String portraits;
late String token;
// 构造函数
TbUserData({required this.phone, required this.name, required this.portraits, required this.token});
// 将MyData对象转换为Map
Map<String, dynamic> toMap() {
return {
'phone': phone,
'name': name,
'portraits': portraits,
'token': token,
};
}
TbUserData.fromJson(Map<String, dynamic> json) {
phone = json['phone'];
name = json['name'];
portraits = json['portraits'];
token = json['token'];
}
}
}
创建
Future<Database> createDatabase() async {
// 获取数据库路径
final path = await getDatabasePath('tomato_kid.db');
print("================================================================$path");
// 打开数据库
final database = openDatabase(
path,
version: 1,
// 当数据库第一次被创建时,执行创建表的操作
onCreate: (db, version) {
return db.execute(
"CREATE TABLE tb_users_login(id INTEGER PRIMARY KEY,phone TEXT,name TEXT, portraits TEXT, token TEXT)",
);
},
);
return database;
}
添加
Future<void> insertData(TbUserData data, Database db) async {
try {
// 查询数据库中是否已存在相同电话号码的记录
List<Map<String, dynamic>> existingRecords = await db.query(
'tb_users_login',
where: 'phone = ?',
whereArgs: [data.phone],
);
if (existingRecords.isNotEmpty) {
// 如果存在相同电话号码的记录,则替换旧记录
await db.update(
'tb_users_login',
data.toMap(),
where: 'phone = ?',
whereArgs: [data.phone],
);
} else {
// 如果不存在相同电话号码的记录,则插入新记录
await db.insert(
'tb_users_login',
data.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
} catch (e) {
// 打印错误信息
print('Failed to insert data: $e');
}
}
删除
Future<void> deleteData(String phone, Database db) async {
// 调用delete方法删除指定id的数据
await db.delete(
'tb_users_login',
// where子句用于指定要删除的数据
where: "phone = ?",
whereArgs: [phone],
);
}
查看
Future<List<Map<String, dynamic>>> queryAll(Database db) async {
// 查询所有数据
return await db.query('tb_users_login');
}
Map转换为MyData对象
Future<List<TbUserData>> getMyDataFromDB(Database db) async {
// 获取所有数据
final List<Map<String, dynamic>> maps = await queryAll(db);
// 将Map转换为MyData对象
return List.generate(maps.length, (i) {
return TbUserData(
phone: maps[i]['phone'],
name: maps[i]['name'],
portraits: maps[i]['portraits'],
token: maps[i]['token']);
});
}