flutter - sqlite数据库小白入门,看不懂打死我

使用sqflite操作sqlite

sqflite: ^1.1.7+1
复制代码

可以先看官方sqlite教程,我觉得写的还不错, 比其他中文版的文章教程好多了(压根看不下去)。 (除了我这篇)

官方sqlite教程

初始化db

使用 openDatabase 初始化

openDatabase语法 Future<Database> openDatabase(String path, {int version, FutureOr<void> Function(Database) onConfigure, FutureOr<void> Function(Database, int) onCreate, FutureOr<void> Function(Database, int, int) onUpgrade, FutureOr<void> Function(Database, int, int) onDowngrade, FutureOr<void> Function(Database) onOpen, bool readOnly = false, bool singleInstance = true})

初始化之前需要先打开数据库

2、打开数据库

penDatabase(
    join(await getDatabasesPath(), '<数据库名称>.db'),
)
复制代码

2. 新建表

默认开始是没有表的,如果直接新建表那么需要自己搞一个表那么需要判断表是否存在。

但是 sqflite 有onCreate钩子,首次创建数据库时,就会执行。

openDatabase(
    join(await getDatabasesPath(), '<数据库名称>.db'),
    onCreate: (Database db, int version) async{
        // 新建表
        db.execute(sql语法);
    },
);
复制代码

3. 添加版本

openDatabase(
    join(await getDatabasesPath(), '<数据库名称>.db'),
    onCreate: (Database db, int version) async{
        // 新建表
        db.execute(sql语法);
    },
    // 版本
    version: 1,
);
复制代码

版本的作用是,当版本修改之后 onCreate 才会执行。

代码

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

String createSql = '''
  CREATE TABLE <表名称> (
    id       INTEGER,
    name     STRING,
);
''';
Database db = await openDatabase(
    join(await getDatabasesPath(), '<数据库名称>.db'),
    onCreate: (Database db, int version) async{
        // 新建表
        db.execute(createSql);
    },
    version: 1,
);
复制代码

这样就可以拿db使用操作数据库

操作数据库

原生操作 (以raw开头) ,和更适合flutter的操作 (适不适合不知道,但是是为了它打造的)

sqflite里面有一个DatabaseExecutor抽象类,我把所有的操作列出来

// 这部分是原生操作表(raw)
execute
rawInsert
rawDelete
rawUpdate
rawQuery
// 这部分是dart操作表方法
insert
query
update
delete
复制代码

原生操作表(raw)

方法

execute
rawInsert
rawDelete
rawUpdate
rawQuery
复制代码
直接写sqlite语句,第二个可选参数是数据 第二个的数据是代入到sql语句里面,sql里面的 ?

例子

rawInsert(
      'INSERT INTO Test(name) VALUES(?)',
      ['name']
)
复制代码

rawInsert、 rawDelete、 rawUpdate、 rawQuery

分别对应增删改查,那么新建表,统计数据等等操作怎么办?

使用execute。

(仔细看你会发现这货返回值是void,不必慌张,这是正常的)

sqlite语法

如果你不会db语法,没事,百度或者谷歌学习下。

点击进入 菜鸟教程的sqlite语法

dart操作表

方法

insert
query
update
delete
复制代码

例子

insert(
      '<表名>',
      {
          "<字段名称>": '<值>'
      },
      conflictAlgorithm: ConflictAlgorithm.replace,
);
复制代码
db.query('<表名>')
复制代码
update(
      '<表名>',
      // 条件
      where: "id = ?",
      // 值
      whereArgs: [id],
);
复制代码
delete(
      '<表名>',
      // 条件
      where: "id = ?",
      // 值
      whereArgs: [id],
);
复制代码
我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章