Flutter sqflite插件
数据库插件
dependencies:sqflite: ^2.4.2
class MyState extends State {String dbPath = "";Database? database;///获取数据库路径void getDBPath() {Future<String> path = getDatabasesPath();path.then((value) {dbPath = value;print(value);});}void initDB() {//如果没有word数据库,则会调用onCreate方法创建数据库。Future<Database> db = openDatabase(version: 2,"$dbPath/word.db",onCreate: (db, version) {String createSql ='CREATE TABLE "word" ("id" integer PRIMARY KEY AUTOINCREMENT,"def" text,"pron" text,"word" text)';db.execute(createSql);},onUpgrade: (db, oldVersion, newVersion) {//当前版本大于原版本,则执行if (newVersion >= 2) {db.execute("ALTER TABLE word ADD COLUMN collect integer");}print("$oldVersion,$newVersion");},);db.then((value) {database = value;print(value);});}Widget build(BuildContext context) {return DefaultTabController(length: 5,child: Scaffold(appBar: AppBar(title: Text("购物")),body: Column(children: [OutlinedButton(onPressed: () {getDBPath();},child: Text("获取数据库路径"),),OutlinedButton(onPressed: () {initDB();},child: Text("初始化数据库"),),OutlinedButton(onPressed: () {if (database == null) {initDB();} else {Future<int>? add = database?.rawInsert('INSERT INTO word(id, def, pron, word) VALUES (?,?,?,?)',[2, "抛弃;放纵", " əˈbændənmənt", "abandonment"],);add?.then((value) {print("添加数据的id:$value");});}},child: Text("插入数据"),),OutlinedButton(onPressed: () {if (database == null) {initDB();} else {Future<int>? add = database?.rawUpdate('update word set collect = ? where id = ?',[1, 2],);add?.then((value) {print("修改了$value条");});}},child: Text("修改数据"),),OutlinedButton(onPressed: () {if (database == null) {initDB();} else {Future<List<Map<String, Object?>>>? qu = database?.rawQuery('select * from word where id = ?',[2],);qu?.then((value) {print("查询数据:$value");});}},child: Text("查询数据"),),OutlinedButton(onPressed: () {if (database == null) {initDB();} else {Future<int>? del = database?.rawDelete('delete from word where id = ?',[2],);del?.then((value) {print("删除了$value条");});}},child: Text("删除数据"),),],),),);}
}
直接使用db文件的情况
File file = File("$path/school.db");rootBundle.load("assert/db/school.db").then((value) {file.writeAsBytes(value.buffer.asUint8List());},);Future<Database> db = openDatabas("$path/school.db");