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

发布于 1周前 作者 sinazl 来自 Flutter

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

sqlite_utils

1
2
Pub

该插件帮助扩展类以进行SQLite数据库操作。

Pub安装

pubspec.yaml文件中添加依赖:

dependencies:
  sqlite_utils: ^最新版本号

然后运行以下命令安装依赖:

flutter pub get

API

初始化连接
var db = SqliteUtils(settings: {
      'database': 'loop.db',
      'tableMap': {
          'table1':'id INTEGER PRIMARY KEY, nickname TEXT, telphone TEXT, createTime INTEGER, updateTime INTEGER',
          'table2': 'id INTEGER PRIMARY KEY, title TEXT, titleId INTEGER',
      },
      'version': 1,
    });
查询
var row = await db
    .query('select * from table id=1');
print(row);
// db.close();
多表查询
var res = await db.getAll(
  table: 'user tb1,upload tb2',
  fields: 'tb2.fileSize',
  where: 'tb2.id>0 and tb2.uid=tb1.id',
  debug: true,
);
print(res);
获取单条数据
var row = await db.getOne(
  table: 'table',
  fields: '*',
  where: {'email': 'xxx@google.com'},
);
print(row);
获取多条数据
var row = await db.getAll(
  table: 'table',
  fields: '*',
  where: {
    'email': 'xxx@dd.com',
    'id': ['>', 1],
  },
);
print(row);
插入数据
await db.insert(
  table: 'table',
  insertData: {
    'telphone': '+113888888888',
    'create_time': 1620577162252,
    'update_time': 1620577162252,
  },
);
批量插入数据
 await db.insertAll(
  table: 'table',
  insertData: [
      {
        'telphone': '13888888888',
        'create_time': 1111111,
        'update_time': 12121212,
        'email': 'teenagex@dd.com'
      },
      {
        'telphone': '13881231238',
        'create_time': 324234,
        'update_time': 898981,
        'email': 'xxx@dd.com'
      }
]);
更新数据
await db.update(
  table: 'table',
  updateData:{
    'telphone': '1231',
    'create_time': 12,
    'update_time': 12121212,
    'email': 'teenagex@dd.com'
  },
  where:{
  'id':1,
});
删除数据
await db.delete(
  table:'table',
  where: {'id':1}
);
统计数据
await db.count(
  table: 'table',
  fields: '*',
  where: {
    'id': ['>', 0]
  },
);

完整示例

import 'dart:async';
import 'dart:math';
import 'package:sqlite_utils/sqlite_utils.dart';

Future main() async {
  var rng = new Random();
  final db = SqliteUtils(settings: {
    'database': 'testDB.db',
    'tableMap': {
      'testTable':
          'id INTEGER PRIMARY KEY, nickname TEXT, telphone TEXT, createTime INTEGER, updateTime INTEGER',
      'table2': 'id INTEGER PRIMARY KEY, title TEXT, titleId INTEGER',
    },
    'version': 1,
  });

  // 插入一条数据
  var res3 = await db.insert(
    table: 'testTable',
    insertData: {
      'nickname': '中文测试-${rng.nextInt(100)}',
      'telphone': '+113888888888',
      'createTime': 1620577162252,
      'updateTime': 1620577162252,
    },
  );
  await db.close();
  print(res3); // 最后插入的ID

  // 查询一条数据
  // var row1 = await db.getOne(
  //   table: 'testTable',
  //   fields: '*',
  //   where: {
  //     'createTime': ['>', 1],
  //   },
  //   debug: true,
  // );
  // await db.close();
  // print(row1); // 返回的数据行

  // 查询多条数据
  // var row2 = await db.getAll(
  //   table: 'testTable',
  //   fields: '*',
  //   where: {
  //     'id': ['>', 1],
  //   },
  //   debug: true,
  // );
  // await db.close();
  // print(row2); // 返回的数据列表

  // 统计数据
  // var row5 = await db.count(
  //   table: 'testTable',
  //   fields: '*',
  //   where: {
  //     'id': ['>', 0]
  //   },
  //   debug: true,
  // );
  // print(row5);

  // 删除数据
  // var row9 = await db.delete(
  //   table: 'testTable',
  //   where: {
  //     'id': 3
  //   },
  //   debug: true,
  // );
  // print(row9); // 删除的行数

  // 更新数据
  // var row10 = await db.update(
  //   table: 'testTable',
  //   updateData: {
  //     'nickname': '想vvb-${rng.nextInt(100)}',
  //   },
  //   where: {
  //     'id': 4,
  //   },
  //   debug: true,
  // );
  // print(row10); // 更新的受影响行数

  // 批量插入数据
  // var row11 = await db.insertAll(table: 'testTable', insertData: [
  //   {
  //     'nickname': 'test-${rng.nextInt(100)}',
  //     'telphone': '+113888888888',
  //     'createTime': 1620577162252,
  //     'updateTime': 1620577162252,
  //   },
  //   {
  //     'nickname': 'test-${rng.nextInt(100)}',
  //     'telphone': '+113888888888',
  //     'createTime': 1620577162252,
  //     'updateTime': 1620577162252,
  //   }
  // ]);
  // print(row11);

  // 基础SQL查询
  // var row12 = await db.query('SELECT * FROM testTable');
  // print(row12);
  // await db.close();
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用sqlite_utils插件进行数据库管理的代码案例。sqlite_utils是一个流行的Flutter插件,用于在Flutter应用中方便地管理SQLite数据库。

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

dependencies:
  flutter:
    sdk: flutter
  sqlite_utils: ^x.y.z  # 请替换为最新版本号

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

以下是一个简单的Flutter应用示例,演示如何使用sqlite_utils插件创建数据库、创建表、插入数据、查询数据等操作:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter SQLite Utils Demo',
      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((_) {
      // 初始化数据库后,可以插入一些初始数据
      _dbHelper.insertData('users', {'name': 'Alice', 'age': 30});
      _dbHelper.insertData('users', {'name': 'Bob', 'age': 25});
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter SQLite Utils Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            List<Map<String, dynamic>> users = await _dbHelper.queryData('users');
            print(users); // 打印查询结果
            // 可以在这里更新UI来显示查询结果
          },
          child: Text('Query Users'),
        ),
      ),
    );
  }
}

class DatabaseHelper {
  Database? _database;

  Future<Database> initializeDatabase() async {
    // 打开数据库连接
    _database = await openDatabase(
      join(await getDatabasesPath(), 'my_database.db'),
      onCreate: (db, version) async {
        // 当数据库首次创建时,创建表
        await db.execute('CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)');
      },
      version: 1,
    );
    return _database!;
  }

  Future<void> insertData(String table, Map<String, dynamic> data) async {
    // 插入数据
    await _database!.insert(table, data);
  }

  Future<List<Map<String, dynamic>>> queryData(String table) async {
    // 查询数据
    List<Map<String, dynamic>> result = await _database!.query(table);
    return result;
  }
}

在这个示例中,我们做了以下几件事情:

  1. 添加依赖:在pubspec.yaml文件中添加了sqlite_utils依赖。
  2. 初始化数据库:在DatabaseHelper类中,我们定义了initializeDatabase方法来打开数据库连接,并在数据库首次创建时创建一个名为users的表。
  3. 插入数据:定义了insertData方法来向users表中插入数据。
  4. 查询数据:定义了queryData方法来查询users表中的数据。
  5. UI交互:在MyHomePage类中,我们创建了一个按钮,当点击按钮时,会查询users表中的数据并打印出来。

请注意,sqlite_utils的实际包名和导入路径可能会有所不同,因此请确保使用正确的包名和路径。另外,由于Flutter和依赖库的不断更新,代码中的API调用和语法可能会有所变化,请参考最新的官方文档进行调整。

回到顶部