Flutter 之 sqflite

本文详细介绍了一个使用Dart语言在Flutter框架下操作SQLite数据库的具体实现,包括数据库的初始化、创建、插入、查询等核心功能,并提供了一个在StatefulWidget中使用的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码吧:

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';

class DataBase {

  static final DataBase _instance = new DataBase.internal();
  factory DataBase() => _instance;

  static Database _db;

  String _dbName = 'mydb.db';

  Future<Database> get db async {
    if (_db != null) {
      return _db;
    }
    _db = await initDb();
    return _db;
  }

  DataBase.internal();

  //初始化数据库,根据路径版本号新建数据库
  initDb() async {
   // Directory directory = await getApplicationDocumentsDirectory();
    String p = await getDatabasesPath();
    String path = join(p, _dbName);
    var dataBase = await openDatabase(path, version: 1, onCreate: _onCreate);
    print('数据库创建成功,version: 1');
    return dataBase;
  }
  
  _onCreate(Database db, int version) async {
    // When creating the db, create the table
    await db.execute('CREATE TABLE Test (id INTEGER PRIMARY KEY, '
        'name TEXT, '
        'value INTEGER, '
        'num REAL)');
    print("创建表成功!");
  }

  
  closeDB() {
    if (_db != null || _db.isOpen) {
      _db.close();
      _db = null;
      print("关闭成功!");
    }
  }

  insert() async {

    var dbClient = await db;

    await dbClient.transaction((txn) async {
      int id1 = await txn.rawInsert(
          'INSERT INTO Test(name, value, num) VALUES("some name", 1234, 456.789)');
      print('inserted1: $id1');
      int id2 = await txn.rawInsert(
          'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
          ['another name', 12345678, 3.1416]);
      print('inserted2: $id2');
    });
  }

  query() async {

    var dbClient = await db;

    List<Map> list = await dbClient.rawQuery('SELECT * FROM Test');

  //  print(_db.path);

   // print(list);

//    for(int i = 0; i < list.length; i++)
//      print(list[i]['name']);

    return list;
  }
}

以下代码是在 StatefulWidget 的 State 中使用数据库的小示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值