Flutter数据库管理插件sqflite_tizen的使用

Flutter数据库管理插件sqflite_tizen的使用

sqflite_tizen

pub package

Tizen平台上的sqflite插件实现。

开始使用

此包不是sqflite的官方实现。因此,你需要在pubspec.yaml文件中同时包含sqflitesqflite_tizen依赖:

dependencies:
  sqflite: ^2.3.0
  sqflite_tizen: ^0.1.3

然后,在Dart代码中导入sqflite

import 'package:sqflite/sqflite.dart';

详细的使用方法可以参考这里

示例代码

以下是一个完整的示例代码,展示了如何在Tizen平台上使用sqflite_tizen插件进行数据库操作。

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:sqflite_tizen_example/batch_test_page.dart';
import 'package:sqflite_tizen_example/deprecated_test_page.dart';
import 'package:sqflite_tizen_example/exception_test_page.dart';
import 'package:sqflite_tizen_example/exp_test_page.dart';
import 'package:sqflite_tizen_example/manual_test_page.dart';
import 'package:sqflite_tizen_example/src/dev_utils.dart';

import 'model/main_item.dart';
import 'open_test_page.dart';
import 'raw_test_page.dart';
import 'slow_test_page.dart';
import 'src/main_item_widget.dart';
import 'todo_test_page.dart';
import 'type_test_page.dart';

void main() {
  mainExampleApp();
}

/// Example app main entry point, exported for external application
///
/// might move to a different shared package.
void mainExampleApp() {
  WidgetsFlutterBinding.ensureInitialized();
  // debugAutoStartRouteName = testOpenRoute;
  runApp(const SqfliteExampleApp());
}

/// Sqflite test app
class SqfliteExampleApp extends StatefulWidget {
  /// test app.
  const SqfliteExampleApp({Key? key}) : super(key: key);

  [@override](/user/override)
  // ignore: library_private_types_in_public_api
  _SqfliteExampleAppState createState() => _SqfliteExampleAppState();
}

/// Simple test page.
const String testRawRoute = '/test/simple';

/// Open test page.
const String testOpenRoute = '/test/open';

/// Slow test page.
const String testSlowRoute = '/test/slow';

/// Type test page.
const String testTypeRoute = '/test/type';

/// Batch test page.
const String testBatchRoute = '/test/batch';

/// `todo` example test page.
const String testTodoRoute = '/test/todo';

/// Exception test page.
const String testExceptionRoute = '/test/exception';

/// Manual test page.
const String testManualRoute = '/test/manual';

/// Experiment test page.
const String testExpRoute = '/test/exp';

/// Deprecated test page.
const String testDeprecatedRoute = '/test/deprecated';

class _SqfliteExampleAppState extends State<SqfliteExampleApp> {
  var routes = <String, WidgetBuilder>{
    '/test': (BuildContext context) => MyHomePage(),
    testRawRoute: (BuildContext context) => RawTestPage(),
    testOpenRoute: (BuildContext context) => OpenTestPage(),
    testSlowRoute: (BuildContext context) => SlowTestPage(),
    testTodoRoute: (BuildContext context) => TodoTestPage(),
    testTypeRoute: (BuildContext context) => TypeTestPage(),
    testManualRoute: (BuildContext context) => const ManualTestPage(),
    testBatchRoute: (BuildContext context) => BatchTestPage(),
    testExceptionRoute: (BuildContext context) => ExceptionTestPage(),
    testExpRoute: (BuildContext context) => ExpTestPage(),
    testDeprecatedRoute: (BuildContext context) => DeprecatedTestPage(),
  };

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Sqflite Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(title: 'Sqflite Demo Home Page'),
        routes: routes);
  }
}

/// App home menu page.
class MyHomePage extends StatefulWidget {
  /// App home menu page.
  MyHomePage({Key? key, this.title}) : super(key: key) {
    _items.add(
        MainItem('Raw tests', 'Raw SQLite operations', route: testRawRoute));
    _items.add(MainItem('Open tests', 'Open onCreate/onUpgrade/onDowngrade',
        route: testOpenRoute));
    _items.add(MainItem('Type tests', 'Test value types', route: testTypeRoute));
    _items.add(MainItem('Batch tests', 'Test batch operations',
        route: testBatchRoute));
    _items.add(
        MainItem('Slow tests', 'Lengthy operations', route: testSlowRoute));
    _items.add(MainItem(
        'Todo database example', 'Simple Todo-like database usage example',
        route: testTodoRoute));
    _items.add(MainItem('Exp tests', 'Experimental and various tests',
        route: testExpRoute));
    _items.add(MainItem('Exception tests', 'Tests that trigger exceptions',
        route: testExceptionRoute));
    _items.add(MainItem('Manual tests', 'Tests that requires manual execution',
        route: testManualRoute));
    _items.add(MainItem('Deprecated test',
        'Keeping some old tests for deprecated functionalities',
        route: testDeprecatedRoute));

    // Uncomment to view all logs
    //Sqflite.devSetDebugModeOn(true);
  }

  final List<MainItem> _items = [];

  /// Page title.
  final String? title;

  [@override](/user/override)
  // ignore: library_private_types_in_public_api
  _MyHomePageState createState() => _MyHomePageState();
}

String? _debugAutoStartRouteName;

/// (debug) set the route to start with.
String? get debugAutoStartRouteName => _debugAutoStartRouteName;

/// Deprecated to avoid calls
[@Deprecated](/user/Deprecated)('Deb only')
set debugAutoStartRouteName(String? routeName) => _debugAutoStartRouteName = routeName;

class _MyHomePageState extends State<MyHomePage> {
  int get _itemCount => widget._items.length;

  [@override](/user/override)
  void initState() {
    super.initState();

    Future<void>.delayed(Duration.zero).then((_) async {
      if (mounted) {
        // Use it to auto start a test page
        if (debugAutoStartRouteName != null) {
          // only once

          // await Navigator.of(context).pushNamed(testExpRoute);
          // await Navigator.of(context).pushNamed(testRawRoute);
          final future = Navigator.of(context).pushNamed(debugAutoStartRouteName!);
          // ignore: deprecated_member_use_from_same_package
          debugAutoStartRouteName = null;
          await future;
          // await Navigator.of(context).pushNamed(testExceptionRoute);
        }
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Center(
              child: Text('Sqflite demo', textAlign: TextAlign.center)),
        ),
        body: ListView.builder(itemBuilder: _itemBuilder, itemCount: _itemCount));
  }

  //new Center(child: new Text('Running on: $_platformVersion\n')),

  Widget _itemBuilder(BuildContext context, int index) {
    return MainItemWidget(widget._items[index], (MainItem item) {
      Navigator.of(context).pushNamed(item.route!);
    });
  }
}

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

1 回复

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


sqflite_tizen 是一个用于在 Tizen 平台上使用 SQLite 数据库的 Flutter 插件。它是 sqflite 插件的一个扩展,专门为 Tizen 设备进行了适配。sqflite 是一个流行的 Flutter 插件,用于在移动应用中管理 SQLite 数据库。

安装 sqflite_tizen

首先,你需要在 pubspec.yaml 文件中添加 sqflite_tizen 依赖:

dependencies:
  flutter:
    sdk: flutter
  sqflite_tizen: ^2.0.0+4

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

基本用法

  1. 打开数据库

    使用 openDatabase 方法来打开或创建一个 SQLite 数据库。如果数据库不存在,它会被自动创建。

    import 'package:sqflite_tizen/sqflite.dart';
    import 'package:path/path.dart';
    
    Future<Database> initializeDatabase() async {
      String path = join(await getDatabasesPath(), 'my_database.db');
      return openDatabase(
        path,
        onCreate: (db, version) {
          return db.execute(
            "CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)",
          );
        },
        version: 1,
      );
    }
    
  2. 插入数据

    使用 insert 方法将数据插入到数据库中。

    Future<void> insertUser(Database db, Map<String, dynamic> user) async {
      await db.insert(
        'users',
        user,
        conflictAlgorithm: ConflictAlgorithm.replace,
      );
    }
    
  3. 查询数据

    使用 query 方法从数据库中查询数据。

    Future<List<Map<String, dynamic>>> getUsers(Database db) async {
      return await db.query('users');
    }
    
  4. 更新数据

    使用 update 方法更新数据库中的数据。

    Future<void> updateUser(Database db, int id, Map<String, dynamic> user) async {
      await db.update(
        'users',
        user,
        where: 'id = ?',
        whereArgs: [id],
      );
    }
    
  5. 删除数据

    使用 delete 方法从数据库中删除数据。

    Future<void> deleteUser(Database db, int id) async {
      await db.delete(
        'users',
        where: 'id = ?',
        whereArgs: [id],
      );
    }
    
  6. 关闭数据库

    当你不再需要数据库连接时,记得关闭它。

    Future<void> closeDatabase(Database db) async {
      await db.close();
    }
    

完整示例

以下是一个完整的示例,展示了如何使用 sqflite_tizen 进行数据库操作:

import 'package:flutter/material.dart';
import 'package:sqflite_tizen/sqflite.dart';
import 'package:path/path.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final database = await initializeDatabase();

  // 插入用户
  await insertUser(database, {'id': 1, 'name': 'Alice', 'age': 30});
  await insertUser(database, {'id': 2, 'name': 'Bob', 'age': 25});

  // 查询用户
  List<Map<String, dynamic>> users = await getUsers(database);
  print(users);

  // 更新用户
  await updateUser(database, 1, {'age': 31});

  // 删除用户
  await deleteUser(database, 2);

  // 查询用户
  users = await getUsers(database);
  print(users);

  // 关闭数据库
  await closeDatabase(database);
}

Future<Database> initializeDatabase() async {
  String path = join(await getDatabasesPath(), 'my_database.db');
  return openDatabase(
    path,
    onCreate: (db, version) {
      return db.execute(
        "CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)",
      );
    },
    version: 1,
  );
}

Future<void> insertUser(Database db, Map<String, dynamic> user) async {
  await db.insert(
    'users',
    user,
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}

Future<List<Map<String, dynamic>>> getUsers(Database db) async {
  return await db.query('users');
}

Future<void> updateUser(Database db, int id, Map<String, dynamic> user) async {
  await db.update(
    'users',
    user,
    where: 'id = ?',
    whereArgs: [id],
  );
}

Future<void> deleteUser(Database db, int id) async {
  await db.delete(
    'users',
    where: 'id = ?',
    whereArgs: [id],
  );
}

Future<void> closeDatabase(Database db) async {
  await db.close();
}
回到顶部