flutter 中使用sqlinte

package:path/path.dart 是一个 Dart 包,它提供了一组函数来处理文件路径。使用其来进行跨平台的文件路径处理。

零散的东西

1.Future <T>是一种非常重要的异步编程构建块,它允许你在进行耗时操作(如网络请求、数据库查询或文件读写)时保持程序的响应性。Future 对象可以通过 asyncawait 关键字来进行异步编程。TFuture 完成时返回的结果的类型。

响应性:提高用户体验,不必在异步处理时一直在转圈圈

2.Map<String, dynamic>

是 Dart 编程语言中的一种数据结构,表示一个键值对的映射集合,其中键是 String 类型,dynamic 类型通常用于与 JSON 数据交互,因为 JSON 数据本质上是动态的,可以包含不同类型的值。

3.conflictAlgorithm

是 SQLite 数据库中的一个参数,用于指定在插入、更新或删除操作中如何处理冲突。

常见策略:abort replace rollback fail ignore ...

4.database?.query('items') ?? []     ? 

查表操作

"?"空安全成员访问操作符 

先判断database是否为空,不为空则执行之后操作,否则直接返回Null

5.database 数据库操作对象常见操作有:

增删改查及,自定义sql语句的增删改查 ,path,isOpen..

6.建库时建表,如要在建库后改表的话有些麻烦

并不是每次启动都会建表

Future<void> initializeDatabase() async {
    // 使用 path 库获取数据库文件的路径
    String path = join(await getDatabasesPath(), 'my_database.db');

    // 打开数据库,如果数据库不存在则创建它
    database = await openDatabase(
      path,
      version: 1,
      onCreate: (db, version) {
        // 在数据库创建时创建表
        return db.execute(
          'CREATE TABLE items(id INTEGER PRIMARY KEY, secret TEXT, sign TEXT)',
        );
      },
    );
  }

如果在建表后插入该表一个不存在的字段则会报错(需要在该表再新建字段)

导入与使用

依赖导入:

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.3.0

具体使用:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  Database? database;

  @override
  void initState() {
    super.initState();
    initializeDatabase();
  }

  // 初始化数据库
  Future<void> initializeDatabase() async {
    // 使用 path 库获取数据库文件的路径
    String path = join(await getDatabasesPath(), 'my_database.db');

    // 打开数据库,如果数据库不存在则创建它
    database = await openDatabase(
      path,
      version: 1,
      onCreate: (db, version) {
        // 在数据库创建时创建表
        return db.execute(
          'CREATE TABLE items(id INTEGER PRIMARY KEY, name TEXT)',
        );
      },
    );
  }

  // 插入数据
  Future<void> insertItem(String name) async {
    await database?.insert(
      'items',
      {'name': name},
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  }

  // 查询数据
  Future<List<Map<String, dynamic>>> fetchItems() async {
    return await database?.query('items') ?? [];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SQLite Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () async {
                // 插入数据
                await insertItem('Item 1');
              },
              child: Text('Insert Item'),
            ),
            ElevatedButton(
              onPressed: () async {
                // 查询数据
                List<Map<String, dynamic>> items = await fetchItems();
                print('Fetched items: $items');
              },
              child: Text('Fetch Items'),
            ),
          ],
        ),
      ),
    );
  }
}

   

sql默认存储位置

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值