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