Database database = await openDatabase(path, version: 1,
onCreate: (Database db, int version) async {
// 创建数据库时创建表
await db.execute(
'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
});
复制代码
3. 增
在事务中向表中插入几条数据
await database.transaction((txn) async {
int id1 = await txn.rawInsert(
'INSERT INTO Test(name, value, num) VALUES("some name", 1234, 456.789)');
print(‘inserted1: $id1’);
int id2 = await txn.rawInsert(
'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
['another name', 12345678, 3.1416]);
print(‘inserted2: $id2’);
});
复制代码
4. 删
删除表中的一条数据
count = await database
.rawDelete('DELETE FROM Test WHERE name = ?', ['another name']);
复制代码
5. 改
修改表中的数据
int count = await database.rawUpdate(‘UPDATE Test SET name = ?, value = ? WHERE name = ?’,
['updated name', '9876', 'some name']);
print(‘updated: $count’);
复制代码
6. 查
查询表中的数据
// Get the records
List
List
{‘name’: ‘updated name’, ‘id’: 1, ‘value’: 9876, ‘num’: 456.789},
{‘name’: ‘another name’, ‘id’: 2, ‘value’: 12345678, ‘num’: 3.1416}
];
print(list);
print(expectedList);
复制代码
查询表中存储数据的总条数
count = Sqflite.firstIntValue(await database.rawQuery(‘SELECT COUNT(*) FROM Test’));
复制代码
7. 关闭数据库
await database.close();
复制代码
8. 删除数据库
await deleteDatabase(path);
复制代码
### []( )使用SQL助手
1. 创建表中的字段及关联类
//字段
final String tableTodo = ‘todo’;
final String columnId = ‘_id’;
final String columnTitle = ‘title’;
final String columnDone = ‘done’;
//对应类
class Todo {
int id;
String title;
bool done;
//把当前类中转换成Map,以供外部使用
Map<String, Object?> toMap() {
var map = <String, Object?>{
columnTitle: title,
columnDone: done == true ? 1 : 0
};
if (id != null) {
map[columnId] = id;
}
return map;
}
//无参构造
Todo();
//把map类型的数据转换成当前类对象的构造函数。
Todo.fromMap(Map<String, Object?> map) {
id = map[columnId];
title = map[columnTitle];
done = map[columnDone] == 1;
}
}
复制代码
2. 使用上面的类进行创建删除数据库以及数据的增删改查操作。
class TodoProvider {
Database db;
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)
''');
});
}
//向表中插入一条数据,如果已经插入过了,则替换之前的。
Future insert(Todo todo) async {
todo.id = await db.insert(tableTodo, todo.toMap(),conflictAlgorithm: ConflictAlgorithm.replace,);
return todo;
}
Future getTodo(int id) async {
List<Map> maps = await db.query(tableTodo,
columns: [columnId, columnDone, columnTitle],
where: '$columnId = ?',
whereArgs: [id]);
if (maps.length > 0) {
return Todo.fromMap(maps.first);
}
return null;
}
Future delete(int id) async {
return await db.delete(tableTodo, where: '$columnId = ?', whereArgs: [id]);
}
Future update(Todo todo) async {
return await db.update(tableTodo, todo.toMap(),
where: '$columnId = ?', whereArgs: [todo.id]);
}
Future close() async => db.close();
}
复制代码
3. 查询表中的所有数据
List<Map<String, Object?>> records = await db.query(‘my_table’);
复制代码
4. 获取结果中的第一条数据
Map<String, Object?> mapRead = records.first;
复制代码
5. 上面查询结果的列表中Map为只读数据,修改此数据会抛出异常
mapRead[‘my_column’] = 1;
// Crash… mapRead
is read-only
复制代码
6. 创建map副本并修改其中的字段
// 根据上面的map创建一个map副本
Map<String, Object?> map = Map<String, Object?>.from(mapRead);
// 在内存中修改此副本中存储的字段值
map[‘my_column’] = 1;
复制代码
7. 把查询出来的List< map>类型的数据转换成List< Todo>类型,这样我们就可以痛快的使用啦。
// Convert the List<Map<String, dynamic> into a List.
return List.generate(maps.length, (i) {
return Todo(
id: maps[i][columnId],
title: maps[i][columnTitle],
done: maps[i][columnDown],
);
});
复制代码
### []( )批处理
1. 您可以使用批处理来避免dart与原生之间频繁的交互。
batch = db.batch();
总结
Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》
【Android高级架构视频学习资源】
;
复制代码
### []( )批处理
1. 您可以使用批处理来避免dart与原生之间频繁的交互。
batch = db.batch();
总结
Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
[外链图片转存中…(img-tBXDgF5n-1630845415300)]
CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》
【Android高级架构视频学习资源】
Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!