Flutter中Sqlite数据库封装和使用

1、添加依赖,打开flutter项目根目录下的pubspec.yaml 文件,添加依赖。

2、开始sqlite的数据操作基本封装,我一般是在lib目录下建一个 db的包,把数据库相关操作的类都放在这个包下面,方面管理和维护,下面是的项目目录。

3、DBManger类,将数据库的创建,关闭等基础操作同一封装在一个类中统一管理。

DBManager这个类主要做了以下几件事情:
  • 定义数据库版本、数据库名称,获取数据创建路劲,适配IOS;
  • 数据库初始化,如果没有数据库则根据版本,名称,路劲在本地创建数据库并打开数据库,如果已经有则打开数据库;打开数据库时有一个回调函数,在这个回调函数中我们可以默认创建张表,我这里没有创建表;
  • 返回当前打开的数据实例,如果没有打开则先进行初始化,然后返回;实际上我们在上层调用的时候也是调用的
    getCurrentDatabase()这个方法,一般不会直接调用init()方法;
  • 判断数据库是否存在某一张表
    isTableExits();
  • 数据库关闭,用完数据必须要进行数据库关闭,释放掉资源;

我们发现这个类里面定义的都是数据库相关的操作,没有数据表相关的操作方法,我们接着往下看。

4、BaseDBProvider类,这个类定义创建数据库表的基础方法;这个类是一个抽象类,把具体创建数据库表的sql暴露出去,让子类去具体实现;由它直接和DBManager打交道,业务层实现这个接口即可。

这个类三个关键方法:

  • tableSqlString()抽象方法,由子类实现,返回创建表的具体sql;
  • tableName()抽象方法,由子类实现,返回要创建的表明;
  • tableBaseString()方法,返回表主键字段的基本sql定义,子类把其他字段的sql定义拼接到这个函数的返回值后面即可;
  • getDataBase()方法,返回一个数据库实例

5、Dao类,这个类定义类某一张具体的表的操作方法,它直接集成BaseDBProvider类;我这里叫做ChatDao,是对表ChatMessage这张表的操作的类;

这个类的前一部分定义了这张表的表明,主键字段,创建表的sql语句等。

后面这部分定义了表的基本操作,我这里只定义插入、查询两个操作,其实应该基本具备增、删、改、查等操作。大家可以聚义反三将这张表的其他操作都在这里定义。

插入方法的第二个参数使用了一个toMap()方法,这个方法是把要插入的实体转换为一个Map。

6、使用,在需要插入数据库表或者查询的地方,使用Dao的实例来进行具体的增删改查操作。

 运行程序调用以上代码,输入结果如下:

以上就是我对sqflite 库的整个封装使用,非常的简单,后面会在完善,让他完全支持面向对象的操作。

 

Flutter 状态管理之Reduxhttps://blog.csdn.net/qq_19979101/article/details/92645385

Websocket:https://blog.csdn.net/qq_19979101/article/details/93873731

 

 

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
### 回答1: Flutter是一种跨平台的移动应用程序开发框架,它提供了使用SQLite数据库的内置支持。 要使用SQLite数据库,您需要使用Fluttersqlite包。您可以通过在pubspec.yaml文件添加以下依赖项来获取此包: ```yaml dependencies: sqflite: ^2.0.0+3 ``` 一旦您添加了依赖项并运行了`flutter packages get`,您就可以开始使用SQLite数据库了。以下是如何使用SQLite数据库的一些示例: ### 创建数据库 ```dart import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; final database = openDatabase( join(await getDatabasesPath(), 'my_database.db'), onCreate: (db, version) { return db.execute( 'CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)', ); }, version: 1, ); ``` 在这个示例,我们创建了一个名为`my_database.db`的数据库,并在其创建了一个名为“users”的表。 ### 插入数据 ```dart await database.insert( 'users', {'id': 1, 'name': 'John', 'age': 30}, ); ``` 在这个示例,我们向“users”表插入了一条数据。 ### 查询数据 ```dart final List<Map<String, dynamic>> users = await database.query('users'); ``` 在这个示例,我们查询了“users”表的所有数据。 ### 更新数据 ```dart await database.update( 'users', {'age': 31}, where: 'name = ?', whereArgs: ['John'], ); ``` 在这个示例,我们将“users”表名为“John”的用户的年龄更新为31岁。 ### 删除数据 ```dart await database.delete( 'users', where: 'name = ?', whereArgs: ['John'], ); ``` 在这个示例,我们删除了“users”表名为“John”的用户的记录。 这是使用FlutterSQLite数据库的一些基本示例。您可以使用这些示例来开始使用SQLite数据库,并根据您的需求进行修改。 ### 回答2: 在Flutter,可以使用sqflite插件来实现对SQLite数据库的增删改查操作。 首先,需要在pubspec.yaml文件添加sqflite插件的依赖: ``` dependencies: sqflite: ^x.x.x ``` 然后,在需要使用SQLite数据库的地方引入sqflite库: ``` import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; ``` 接下来,创建一个数据库的帮助类,用于管理数据库的创建和版本更新。可以创建一个名为DatabaseHelper的类,并在其内部提供一些静态方法。 ``` class DatabaseHelper { static Future<Database> database() async { String path = join(await getDatabasesPath(), 'database.db'); return await openDatabase(path, version: 1, onCreate: _createTable); } static Future<void> _createTable(Database db, int version) async { await db.execute('CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)'); } } ``` 在这个类,我们定义了一个数据库方法,该方法通过getDatabasesPath()获取数据库的路径,并将其与数据库名称拼接在一起以获取完整路径。然后,我们通过openDatabase()方法打开数据库,如果数据库不存在,则创建数据库,并在数据库创建名为users的表。 然后,可以在其他地方使用这个DatabaseHelper类,执行增删改查的操作。 ``` class UserRepository { static Future<void> addUser(String name) async { Database db = await DatabaseHelper.database(); await db.insert('users', {'name': name}); } static Future<void> deleteUser(int id) async { Database db = await DatabaseHelper.database(); await db.delete('users', where: 'id = ?', whereArgs: [id]); } static Future<void> updateUser(int id, String name) async { Database db = await DatabaseHelper.database(); await db.update('users', {'name': name}, where: 'id = ?', whereArgs: [id]); } static Future<List<Map<String, dynamic>>> getUsers() async { Database db = await DatabaseHelper.database(); return await db.query('users'); } } ``` 在这个示例,我们通过addUser()方法向数据库的users表插入一条数据,通过deleteUser()方法根据id来删除数据,通过updateUser()方法根据id来更新数据,通过getUsers()方法获取所有的用户数据。 以上就是使用sqflite插件在Flutter使用SQLite数据库实现增删改查的基本步骤。要注意的是,在实际使用,还需要处理数据库的异常情况和事务处理。 ### 回答3: 使用Flutter操作SQLite数据库的步骤如下: 1. 导入相关依赖:在pubspec.yaml文件添加sqflite和path两个依赖。 ``` dependencies: flutter: sdk: flutter sqflite: ^2.0.0 path: ^2.0.0 ``` 2. 创建数据库:在Flutter,可以使用openDatabase函数创建一个SQLite数据库。 ```dart import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; final String tableName = 'person'; // 表名 Future<Database> database() async { return openDatabase( join(await getDatabasesPath(), 'database.db'), // 数据库名 onCreate: (db, version) { return db.execute( 'CREATE TABLE $tableName(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)', ); // 创建表 }, version: 1, // 数据库版本号 ); } ``` 3. 插入数据:使用insert函数将数据插入到数据库。 ```dart Future<void> insertPerson(Person person) async { final db = await database(); await db.insert( tableName, person.toMap(), conflictAlgorithm: ConflictAlgorithm.replace, // 冲突处理策略 ); } ``` 4. 查询数据:使用query函数从数据库查询数据。 ```dart Future<List<Map<String, dynamic>>> queryAllPersons() async { final db = await database(); return db.query(tableName); } ``` 5. 更新数据:使用update函数更新数据库的数据。 ```dart Future<void> updatePerson(Person person) async { final db = await database(); await db.update( tableName, person.toMap(), where: 'id = ?', whereArgs: [person.id], // 条件参数,保证更新正确的记录 ); } ``` 6. 删除数据:使用delete函数删除数据库的数据。 ```dart Future<void> deletePerson(int id) async { final db = await database(); await db.delete( tableName, where: 'id = ?', whereArgs: [id], // 条件参数,保证删除正确的记录 ); } ``` 以上就是在Flutter使用SQLite数据库实现增删改查的基本步骤。有了这些操作,你可以方便地处理数据库数据。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值