5.2 插入数据库
rawDBInsert() async {
var path = await initDb(‘raw_simple.db’);
var db = await openDatabase(path);
try {
var insertResult= await db.rawInsert(‘INSERT INTO Test (name) VALUES (?)’, [‘test’]);
if (insertResult>0) {
Fluttertoast.showToast(msg: “数据插入成功”,gravity: ToastGravity.CENTER);
}else {
print(“其他”);
}
} finally {
await db.close();
}
}
5.3 查询数据库
rawDBQuery() async {
var path = await initDb(‘raw_simple.db’);
var db = await openDatabase(path);
try {
var result = await db.query(“Test”);
if (result.isNotEmpty) {
Fluttertoast.showToast(
msg: “数据查询成功:$result”, gravity: ToastGravity.CENTER);
} else {
Fluttertoast.showToast(
msg: “数据为空,请先写入数据”, gravity: ToastGravity.CENTER);
}
} catch (ex) {
Fluttertoast.showToast(msg: “$ex”, gravity: ToastGravity.CENTER);
} finally {
await db.close();
}
}
5.4 更新数据库
rawDBUpdate() async {
var path = await initDb(‘raw_simple.db’);
var db = await openDatabase(path);
try {
var update = await db.rawUpdate(‘UPDATE Test SET name = ? WHERE name = ?’,
[‘updated name’, ‘test’]);
var result = await db.query(‘Test’);
if (result!=null) {
Fluttertoast.showToast(msg: “数据更新成功:$result”,gravity: ToastGravity.CENTER,);
}else {
print(“其他”);
}
} finally {
await db.close();
}
}
5.5 删除数据库
rawDBDelete() async {
var path = await initDb(‘raw_simple.db’);
var db = await openDatabase(path);
try {
deleteDatabase(path);
Fluttertoast.showToast(msg: “数据删除成功”,gravity: ToastGravity.CENTER,);
} finally {
await db.close();
}
}
5.6 界面布局
ListView(
children: [
Center(child: Text(“Raw数据库操作”, style: TextStyle(color: Colors.orange, fontSize: 15.0),),),
Padding(padding: const EdgeInsets.all(5.0), child: ElevatedButton(child: const Text(‘rawDBTableCreate’), onPressed: () => rawDBTableCreate())),
Padding(padding: const EdgeInsets.all(5.0), child: ElevatedButton(child: const Text(‘rawDBInsert’), onPressed: () => rawDBInsert())),
Padding(padding: const EdgeInsets.all(5.0), child: ElevatedButton(child: const Text(‘rawDBQuery’), onPressed: () => rawDBQuery())),
Padding(padding: const EdgeInsets.all(5.0), child: ElevatedButton(child: const Text(‘rawDBUpdate’), onPressed: () => rawDBUpdate())),
Padding(padding: const EdgeInsets.all(5.0), child: ElevatedButton(child: const Text(‘rawDBDelete’), onPressed: () => rawDBDelete())),
],
)
6.1 Model类及数据库操作类
import ‘dart:io’;
import ‘package:path/path.dart’;
import ‘package:path_provider/path_provider.dart’;
import ‘package:sqflite/sqflite.dart’;
/// todo
table name
final String tableTodo = ‘todo’;
/// id column name
final String columnId = ‘_id’;
/// title column name
final String columnTitle = ‘title’;
/// done column name
final String columnDone = ‘done’;
/// Todo model.
class Todo {
/// Todo model.
Todo();
/// Read from a record.
Todo.fromMap(Map map) {
id = map[columnId] as int?;
title = map[columnTitle] as String?;
done = map[columnDone] == 1;
}
/// id.
int? id;
/// title.
String? title;
/// done.
bool? done;
/// Convert to a record.
Map<String, Object?> toMap() {
var map = <String, Object?>{
columnTitle: title,
columnDone: done == true ? 1 : 0
};
if (id != null) {
map[columnId] = id;
}
return map;
}
@override
String toString() {
return “id= i d , t i t l e = id,title= id,title=title,done=$done”;
}
}
/// Todo provider.
class TodoProvider {
/// The database when opened.
late Database db;
/// Open the database.
Future open(String path) async {
db = await openDatabase(path, version: 1,
onCreate: (Database db, int version) async {
await db.execute(‘’’
create table $tableTodo (
$columnId integer primary key autoincrement,
$columnTitle text not null,
$columnDone integer not null)
‘’');
});
}
/// Insert a todo.
Future insert(Todo todo) async {
todo.id = await db.insert(tableTodo, todo.toMap());
return todo;
}
/// Get a todo.
Future<Todo?> getTodo(int id) async {
List
columns: [columnId, columnDone, columnTitle],
where: ‘$columnId = ?’,
whereArgs: [id]);
if (maps.isNotEmpty) {
return Todo.fromMap(maps.first);
}
return null;
}
/// Delete a todo.
Future delete(int id) async {
return await db.delete(tableTodo, where: ‘$columnId = ?’, whereArgs: [id]);
}
/// Update a todo.
Future update(Todo todo) async {
return await db.update(tableTodo, todo.toMap(),
where: ‘$columnId = ?’, whereArgs: [todo.id!]);
}
/// Close database.
Future close() async => db.close();
}
6.2 Model初始化
modelOpenDB() async {
var path = await initDb(‘simple_todo.db’);
var todoProvider = TodoProvider();
await todoProvider.open(path);
await todoProvider.close();
}
6.3 Model添加
modelInsertDB() async {
var path = await initDb(‘simple_todo.db’);
var todoProvider = TodoProvider();
await todoProvider.open(path);
var todo = Todo()…title = ‘test’;
todo = await todoProvider.insert(todo);
if (todo != null) {
Fluttertoast.showToast(msg: “数据插入成功:$todo”);
}
}
6.4 Model查询
modelQuerytDB() async {
var path = await initDb(‘simple_todo.db’);
var todoProvider = TodoProvider();
await todoProvider.open(path);
var todo = await todoProvider.getTodo(1);
if (todo != null) {
Fluttertoast.showToast(msg: “数据查询成功:$todo”);
} else {
print(“其他”);
}
await todoProvider.close();
}
6.5 Model更新
modelUpdateDB() async {
var path = await initDb(‘simple_todo.db’);
var todoProvider = TodoProvider();
await todoProvider.open(path);
var todo = await todoProvider.getTodo(1);
if (todo != null) {
expect(todo.done, false);
todo.done = true;
var modify = await todoProvider.update(todo);
if (modify > 0) {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后我还整理了很多Android中高级的PDF技术文档。以及一些大厂面试真题解析文档。
Android高级架构师之路很漫长,一起共勉吧!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
745)]
[外链图片转存中…(img-48L9GG8Z-1711856606745)]
[外链图片转存中…(img-N3pZrI9T-1711856606745)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后我还整理了很多Android中高级的PDF技术文档。以及一些大厂面试真题解析文档。
[外链图片转存中…(img-vxUmhpvG-1711856606746)]
Android高级架构师之路很漫长,一起共勉吧!