Flutter笔记: 在Flutter应用中使用SQLite数据库
import 'package:flutter/foundation.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:flutter_app/models/note.dart';
class DatabaseHelper {
// 数据库实例
static Database? _database;
// 数据库版本号
static const int _version = 1;
// 初始化数据库
Future<Database?> initializeDatabase() async {
if (_database != null) return _database;
// 获取数据库路径
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'notes_database.db');
// 打开或创建数据库
_database = await openDatabase(path, version: _version, onCreate: _createDatabase);
return _database;
}
// 创建数据库
Future _createDatabase(Database db, int version) async {
const String createTableSql = '''
CREATE TABLE $tableNotes (
$columnId INTEGER PRIMARY KEY AUTOINCREMENT,
$columnTitle TEXT NOT NULL,
$columnDescription TEXT,
$columnDate TEXT
)
''';
await db.execute(createTableSql);
}
// 插入记录
Future<int> insertNote(Note note) async {
Database? db = await initializeDatabase();
return await db!.insert(tableNotes, note.toMap());
}
// 更新记录
Future<int> updateNote(Note note) async {
Database? db = await initializeDatabase();
return await db!.update(tableNotes, note.toMap(), where: '$columnId = ?', whereArgs: [note.id]);
}
// 删除记录
Future<int> deleteNote(int id) async {
Database? db = await initializeDatabase();
return await db!.delete(tableNotes, where: '$columnId = ?', whereArgs: [id]);
}
// 获取所有记录
Future<List<Note>> getAllNotes() async {
Database? db = await initializeDatabase();
final List<Map<String, dynamic>> maps = await db!.query(tableNotes, orderBy: '$columnDate DESC');
return List.generate(maps.length, (i) => Note.fromMap(maps[i]));
}
// 根据ID获取记录
Future<Note?> getNoteById(int id) async {
Database? db = await initializeDatabase();
final List<Map<String, dynamic>> maps = await db!.query(tableNotes, where: '$columnId = ?', whereArgs: [id], limit: 1);
if (maps.isNotEmpty) {
return Note.fromMap(maps.first);
}
return null;
}
}
这个代码示例提供了一个简单的Flutter应用程序可以使用的数据库帮助类。它展示了如何使用sqflite包来管理SQLite数据库,包括创建数据库、表,以及执行
评论已关闭