在 Flutter 中访问 SQLite 数据库

Ben*_* OO 5 database sqlite flutter sqflite

我正在使用 SQLite 在我的本机 Android 代码中创建数据库。现在我想在 Flutter 中访问同一个数据库,下面是我的代码:

class DatabaseHelper
{
    static final _dbName="abc.db";
    static final _dbVersion=1;
    DatabaseHelper._privateConstructor();
    static final DatabaseHelper instance=DatabaseHelper._privateConstructor();
    static Database _database;
    Future<Database> get datatbase async
    {
        if(_database!=null) {
            print(_database.path);
            return _database;
        }/* */
    }


    Future<List<Map<String,dynamic>>> getAllLogs()async
    {
        final Database db= await instance.datatbase;
        return await db.query("calls_history");
    }
Run Code Online (Sandbox Code Playgroud)

每当我调用getAllLogsFlutter时Widget,我都会收到错误:calls_history doesn't exist

但是,当我在本机上运行相同的查询时,它会返回结果

小智 4

在 flutter 方面,您可以使用sqflite插件,该插件是构建在本机 SQLite 之上的,因此您不需要执行任何特殊操作,只需在 flutter 中引用相同的数据库名称即可。

在我的一个 flutter 项目中,我使用原生 android 进行编码来接收消息并将其保存在 SQLite 数据库中,在 flutter 方面,我使用 sqflite 来使用相同的数据库来显示数据库的内容。这是颤振端代码

import 'dart:async';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';

class SMSHelper {
  Database? db;

  Future open() async {
    db = await openDatabase(
        //  by default path for database on the device is /data/data/<your app id>/databases/<your database file.db>
        join(await getDatabasesPath(), 'ofs_sms_database.db'),
        version: 1, onCreate: (Database db, int version) async {
      await db.execute(
          "CREATE TABLE smslogs(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, employeeID TEXT, department TEXT, module TEXT, message TEXT, safeUnsafeStatus TEXT, contactNo Text, dateTime INTEGER)");
    });
  }

  Future<void> insertSMS(SMSLog smsLog) async {
    await db?.insert(
      'smslogs',
      smsLog.toMap(),
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  }

  Future<List<SMSLog>> getAllSMS() async {
    if (db == null) {
      open();
    }
    final List<Map<String, dynamic>>? maps = await db?.query('smslogs');

    // Convert the List<Map<String, dynamic> into a List<Dog>.
    if (maps != null) {
      return List.generate(maps.length, (i) {
        return SMSLog(
            employeeID: maps[i]['employeeID'],
            department: maps[i]['department'],
            module: maps[i]['module'],
            message: maps[i]['message'],
            safeUnsafeStatus: maps[i]['safeUnsafeStatus'],
            contactNo: maps[i]['contactNo'],
            dateTime: maps[i]['dateTime']);
      });
    } else {
      return [];
    }
  }

  Future close() async => db?.close();
}

class SMSLog {
  final String employeeID;
  final String department;
  final String module;
  final String message;
  final String safeUnsafeStatus;
  final String contactNo;
  final int dateTime;

  SMSLog(
      {required this.employeeID,
      required this.department,
      required this.module,
      required this.message,
      required this.safeUnsafeStatus,
      required this.contactNo,
      required this.dateTime});

  Map<String, dynamic> toMap() {
    return {
      'employeeID': employeeID,
      'department': department,
      'module': module,
      'message': message,
      'safeUnsafeStatus': safeUnsafeStatus,
      'contactNo': contactNo,
      'dateTime': dateTime
    };
  }
}
Run Code Online (Sandbox Code Playgroud)