Flutter开发之——数据库

文章详细介绍了如何在Flutter应用中使用SQLite数据库进行插入、查询、更新和删除操作,以及如何创建Model类并配合Provider进行数据管理。还展示了如何在用户界面中通过ElevatedButton触发这些操作。
摘要由CSDN通过智能技术生成

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())),

],

)

六 Model数据库操作


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 maps = await db.query(tableTodo,

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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后我还整理了很多Android中高级的PDF技术文档。以及一些大厂面试真题解析文档。

image

Android高级架构师之路很漫长,一起共勉吧!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

745)]

[外链图片转存中…(img-48L9GG8Z-1711856606745)]

[外链图片转存中…(img-N3pZrI9T-1711856606745)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后我还整理了很多Android中高级的PDF技术文档。以及一些大厂面试真题解析文档。

[外链图片转存中…(img-vxUmhpvG-1711856606746)]

Android高级架构师之路很漫长,一起共勉吧!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值