Flutter本地数据库管理插件local_database_null_safety的使用

Flutter本地数据库管理插件local_database_null_safety的使用

开始使用

在你的Flutter项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  ...
  local_database_null_safety: ^1.4.1

在你的库中添加以下导入:

import "package:local_database_null_safety/local_database_null_safety.dart";

如果你需要帮助开始使用Flutter,请查看官方文档

使用方法

该插件提供了三个主要操作:get、put 和 remove。

要使用数据库,只需使用构造函数实例化它:

Database database = new Database(/* 文件系统路径 */);

接下来,调用数据库内置的方法。

放入数据

使用 []= 操作符将数据放入数据库(注意,只能使用可以被JSON编码的类型)。该操作符的参数是用斜杠("/")分隔的数据库路径。

database["dir1"] = {
  "a": [1, 2, 3],
  "b": {"c": 5},
  "d": [
    1,
    2,
    {"e": 5}
  ]
};
database["dir2/f"] = "Data";

读取数据

使用 [] 操作符从数据库中读取数据。该操作符的参数是用斜杠("/")分隔的数据库路径。

print(await database["dir1"]);
print(await database["dir1/a/0"]);
print(await database["dir2/f"]);
print(await database["/"]); // 读取整个数据库
print(await database["nonexistent"]); // 读取不存在的元素

删除数据

使用 .remove(String path) 方法从数据库中删除数据。该方法的参数是用斜杠("/")分隔的数据库路径。

database.remove("dir1");
print(await database["dir1"]); // 应该输出 null,因为数据已被删除

完整示例

以下是一个完整的示例代码:

import "dart:io";
import "package:local_database_null_safety/local_database_null_safety.dart";

void main() async {
  String home = "";
  Map<String, String> envVars = Platform.environment;
  if (Platform.isMacOS || Platform.isLinux) {
    home = envVars["HOME"]!;
  } else if (Platform.isWindows) {
    home = envVars["UserProfile"]!;
  } else {
    throw new Exception("未知平台");
  }

  // 创建数据库实例
  Database database = new Database(home + "/data");

  // 放入复杂的数据
  database["dir1"] = {
    "a": [1, 2, 3],
    "b": {"c": 5},
    "d": [
      1,
      2,
      {"e": 5}
    ]
  };

  // 放入单个字符串
  database["dir2/f"] = "Data";

  // 读取数据
  print(await database["dir1"]);
  print(await database["dir1/a/0"]);
  print(await database["dir2/f"]);
  print(await database["/"]); // 读取整个数据库
  print(await database["nonexistent"]); // 读取不存在的元素

  // 删除数据
  database.remove("dir1");
  print(await database["dir1"]); // 应该输出 null,因为数据已被删除

  // 删除数据库目录
  new Directory(home + "/data")..deleteSync(recursive: true);
}

更多关于Flutter本地数据库管理插件local_database_null_safety的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter本地数据库管理插件local_database_null_safety的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用Flutter本地数据库管理插件local_database_null_safety的示例代码。这个示例将展示如何初始化数据库、创建表、插入数据、查询数据以及关闭数据库。

首先,确保你已经在pubspec.yaml文件中添加了local_database_null_safety依赖:

dependencies:
  flutter:
    sdk: flutter
  local_database_null_safety: ^最新版本号  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,是示例代码:

import 'package:flutter/material.dart';
import 'package:local_database_null_safety/local_database_null_safety.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Local Database Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late DatabaseHelper _dbHelper;

  @override
  void initState() {
    super.initState();
    _dbHelper = DatabaseHelper();
    _dbHelper.initializeDatabase().then((_) {
      _createTable();
      _insertData();
      _queryData();
    });
  }

  @override
  void dispose() {
    _dbHelper.close();
    super.dispose();
  }

  Future<void> _createTable() async {
    String createTableQuery = '''
      CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER NOT NULL
      )
    ''';
    await _dbHelper.execute(createTableQuery);
  }

  Future<void> _insertData() async {
    String insertDataQuery = '''
      INSERT INTO users (name, age) VALUES (?, ?)
    ''';
    List<dynamic> values = ['Alice', 30];
    await _dbHelper.rawInsert(insertDataQuery, values);

    values = ['Bob', 25];
    await _dbHelper.rawInsert(insertDataQuery, values);
  }

  Future<void> _queryData() async {
    String selectQuery = 'SELECT * FROM users';
    List<Map<String, dynamic>> results = await _dbHelper.query(selectQuery);
    
    results.forEach((row) {
      print('ID: ${row['id']}, Name: ${row['name']}, Age: ${row['age']}');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Local Database Example'),
      ),
      body: Center(
        child: Text('Check console for database operations results'),
      ),
    );
  }
}

class DatabaseHelper {
  Database? _database;

  Future<Database> initializeDatabase() async {
    _database = await openDatabase(
      join(await getDatabasesPath(), 'my_database.db'),
      version: 1,
      onCreate: (Database db, int version) async {
        // Create tables here (if needed)
      },
    );
    return _database!;
  }

  Future<void> execute(String sql) async {
    await _database!.execute(sql);
  }

  Future<void> rawInsert(String sql, List<dynamic> values) async {
    await _database!.rawInsert(sql, values);
  }

  Future<List<Map<String, dynamic>>> query(String sql) async {
    List<Map<String, dynamic>> results = await _database!.query(sql);
    return results;
  }

  void close() {
    _database?.close();
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加local_database_null_safety依赖。
  2. 初始化数据库:在DatabaseHelper类中,使用openDatabase方法初始化数据库。
  3. 创建表:在_createTable方法中,使用SQL语句创建users表。
  4. 插入数据:在_insertData方法中,使用rawInsert方法插入数据到users表中。
  5. 查询数据:在_queryData方法中,使用query方法查询users表中的数据并打印到控制台。
  6. 关闭数据库:在dispose方法中关闭数据库连接。

请注意,local_database_null_safety插件的具体API可能会有所不同,因此请务必参考该插件的官方文档以确保使用正确的API。如果插件有更新或API变动,上述代码可能需要相应调整。

回到顶部