Android flutter sqflite判断表是否存在及增删改查

本文详细介绍如何在Flutter应用中使用sqflite插件进行SQLite数据库操作,包括检查表是否存在、创建表、插入、查询、删除和更新数据等核心功能。通过具体代码示例,帮助开发者快速掌握数据库管理技巧。

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

Android flutter sqflite判断表是否存在及增删改查

1. pubspec.yaml

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2

  sqflite: ^1.3.0
  path: ^1.6.4

2. lib代码

main.dart

void main() {
  runApp(MyApp());
  var mySqlProvider = new SqlProvider();
  callProvider() async {
    await mySqlProvider.open();
    var myMap = {'name':'my_name', 'type':'my_type'};
    await mySqlProvider.insert(myMap);
    var myList = ['name', 'type'];
    await mySqlProvider.query(myList);
    await mySqlProvider.close();
  }
  callProvider();
}

SqlProvider.dart

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

class SqlProvider {
  Database database;
  static const dbName = 'myDb.db';
  var tableName = 'myTable';
  //初始化
  open() async {
    var databasePath = await getDatabasesPath();
    String path = join(databasePath, dbName);
    database = await openDatabase(path, version: 1, onCreate: (Database db, int version) async {
      //
    });
    //判断表是否存在
    if (await isTableExits(tableName) == true) {
      print('表存在');
    } else {
      //创建表
      await createTable(tableName);
      print('创建表成功');
    }
  }

  //判断表是否存在
  isTableExits(String tableName) async {
    //内建表sqlite_master
    var sql ="SELECT * FROM sqlite_master WHERE TYPE = 'table' AND NAME = '$tableName'";
    var res = await database.rawQuery(sql);
    var returnRes = res!=null && res.length > 0;
    return returnRes;
  }

  //创建表
  createTable(String tableName) async {
    var sql = 'CREATE TABLE $tableName (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, type TEXT)';
    await database.execute(sql);
  }

  //insert
  insert(Map map) async {
    //var values = {'name':'my_name','type':'my_type'};
    await database.insert(tableName, map);
  }

  //query
  query(List list) async {
    //var myColumns = ['name', 'type'];
    var result = await database.query(tableName, columns: list);
    for (var x in result) {
      print(x.keys);
      print(x.values);
    }
  }

  //delete
  delete(List list) async {
    var myWhere = 'name = ?';
    //var myArgs = ['cat'];
    await database.delete(tableName, where: myWhere, whereArgs: list);
  }

  //update
  update(Map map) async {
    //var values = {'name':'my_name','type':'my_type'};
    await database.update(tableName, map);
  }

  //关闭
  close () async{
    database?.close();
    database = null;
  }
}

3. 关键代码

//判断表是否存在
  isTableExits(String tableName) async {
    //内建表sqlite_master
    var sql ="SELECT * FROM sqlite_master WHERE TYPE = 'table' AND NAME = '$tableName'";
    var res = await database.rawQuery(sql);
    var returnRes = res!=null && res.length > 0;
    return returnRes;
  }
//创建表
  createTable(String tableName) async {
    var sql = 'CREATE TABLE $tableName (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, type TEXT)';
    await database.execute(sql);
  }
//关闭
  close () async{
    database?.close();
    database = null;
  }

参考链接:
sqlite查看所有表名及字段名
https://blog.csdn.net/aflyeaglenku/article/details/50884837
sqflite包文档
https://pub.dev/packages/sqflite#-readme-tab-
https://github.com/tekartik/sqflite/blob/master/sqflite/doc/sql.md
参考代码
https://www.jianshu.com/p/3995ca566d9b

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值