当前位置: 首页 > news >正文

网站专题页面模板wordpress hppts

网站专题页面模板,wordpress hppts,小企业网页制作,网架加工价格前言 今天在观阅掘金大佬文章的时候#xff0c;了解到了该 sqflite 插件#xff0c;结合官网教程和自己实践#xff0c;由此总结出该文#xff0c;希望对大家的学习有帮助#xff01; 插件详情 Flutter的 SQLite 插件。支持 iOS、Android 和 MacOS。 支持事务和batch模式…前言 今天在观阅掘金大佬文章的时候了解到了该 sqflite 插件结合官网教程和自己实践由此总结出该文希望对大家的学习有帮助 插件详情 Flutter的 SQLite 插件。支持 iOS、Android 和 MacOS。 支持事务和batch模式打开时自动进行版本管理插入/查询/更新/删除查询的助手iOS 和 Android 上的数据库操作在后台线程中执行 插件地址: https://pub.dev/packages/sqflite 本文使用插件版本为最新版本2.3.0 基础介绍 数据表创建 openDatabase() 连接数据库deleteDatabase() 删除数据库 openDataBase方法 可选参为db文件地址、版本号、相关回调 案例速览 late Database db; final database book.db; final table book;/** author Marinda* date 2023/12/13 15:53* description 连接数据库*/ connection() async{//获取var databasePath await getDatabasesPath();String path p.join(databasePath,database);//删除数据库await deleteDatabase(path);print(当前地址${path});if(File(path).existsSync()){db await openDatabase(path);}else{db await openDatabase(path,version: 1,onCreate: (database,version) async{database.execute(CREATE TABLE ${table} (id integer primary key autoincrement,name text not null,price REAL ,author TEXT NOT NULL,description TEXT));});} }语句介绍 CURD方法介绍 使用SQL语句的CURD前缀带raw (例如rawInsert)官方封装好的CURD语句不带raw(例如insert) -全文使用该方法 语法速览 //前者 Futureint rawInsert(String sql, [ListObject?? arguments]); //后者 Futureint insert(String table, MapString, Object? values,{String? nullColumnHack, ConflictAlgorithm? conflictAlgorithm});接下来看几个简单的CURD快速了解写法 insert(插入) Futureint insert() async{MapString,dynamic args {id: 1,name: 张飞,description: 猛将};//返回id table为表名return await db.insert(table,args); }delete(删除) Futureint delete(int id) async{return await db.delete(table,where: id ?,whereArgs: [id]); }update(修改) Futureint update() async{MapString,dynamic args {id: 1,name: 吕布,description: 天下无双};return await db.update(table, args,where: id ?,whereArgs: [args[id]]); }select(查询) /** author Marinda* date 2023/12/13 16:11* description 通过id查询*/ FutureMapString,dynamic? selectById(int id) async{var list await db.query(table,where: id ?,whereArgs: [id]);if(list.isNotEmpty){return list.first;}return null; }现在我们对sqflite插件的基础使用有一个初步的了解了接下来围绕一个书本表案例做实战 实战应用 定义Book书表作为实体类定义DBBookProvider类处理数据库表 book.dart /*** author Marinda* date 2023/12/13 15:42* description 书籍信息*/ class Book {int? _id;String? _name;double? _price;String? _author;String? _description;Book({int? id,String? name,double? price,String? author,String? description}) {if (id ! null) {this._id id;}if (name ! null) {this._name name;}if (price ! null) {this._price price;}if (author ! null) {this._author author;}if (description ! null) {this._description description;}}int? get id _id;set id(int? id) _id id;String? get name _name;set name(String? name) _name name;double? get price _price;set price(double? price) _price price;String? get author _author;set author(String? author) _author author;String? get description _description;set description(String? description) _description description;Book.fromJson(MapString, dynamic json) {_id json[id];_name json[name];_price json[price];_author json[author];_description json[description];}MapString, dynamic toJson() {final MapString, dynamic data new MapString, dynamic();data[id] this._id;data[name] this._name;data[price] this._price;data[author] this._author;data[description] this._description;return data;} }db_book_provider.dart /*** author Marinda* date 2023/12/13 15:43* description 书籍数据库适配器*/class DBBookProvider{late Database db;final database book.db;final table book;static DBBookProvider? _instance;static DBBookProvider instance getInstance();DBBookProvider._();factory DBBookProvider(){return instance;}static getInstance(){if(_instance null){_instance DBBookProvider._();}return _instance ?? DBBookProvider._();}/** author Marinda* date 2023/12/13 15:53* description 连接数据库*/connection() async{var databasePath await getDatabasesPath();String path p.join(databasePath,database);// await deleteDatabase(path);print(当前地址${path});if(File(path).existsSync()){db await openDatabase(path);}else{db await openDatabase(path,version: 1,onCreate: (database,version) async{database.execute(CREATE TABLE ${table} (id integer primary key autoincrement,name text not null,price REAL ,author TEXT NOT NULL,description TEXT));});}}/** author Marinda* date 2023/12/13 16:01* description 关闭数据库*/close() async{await db.close();}/** author Marinda* date 2023/12/13 16:02* description 插入*/FutureBook insert(Book book) async{int id await db.insert(table,book.toJson());book.id id;return book;}/** author Marinda* date 2023/12/13 16:08* description 删除id*/Futureint delete(int id) async{return await db.delete(table,where: id ?,whereArgs: [id]);}/** author Marinda* date 2023/12/13 16:11* description 通过id查询*/FutureBook? selectById(int id) async{var list await db.query(table,where: id ?,whereArgs: [id]);if(list.isNotEmpty){return Book.fromJson(list.first);}return null;}/** author Marinda* date 2023/12/13 16:13* description 获取所有书籍列表*/FutureListBook queryList() async{svar result await db.query(table);return result.map((e) Book.fromJson(e)).toList();}/** author Marinda* date 2023/12/13 16:15* description 修改书籍信息*/Futureint update(Book book) async{return await db.update(table, book.toJson(),where: id ?,whereArgs: [book.id]);}}实例化调用 initDatabase() async{DBBookProvider dbBookProvider DBBookProvider.instance;//连接await dbBookProvider.connection();Book book Book(name: 斗破苍穹,author: 天蚕土豆,price: 88.00,description: 一本不错的小说);//插入Book element await dbBookProvider.insert(book);print(element : ${element.toJson()});//删除for(var id in result){await dbBookProvider.delete(id);}Book newBook Book.fromJson(book.toJson());newBook.id 1;newBook.author 天蚕土豆;//修改await dbBookProvider.update(newBook);//查询全部var list await dbBookProvider.queryList();print(当前列表: ${list.map((e) e.toJson()).toList()}); }事务batch 单独拉出来讲讲的原因是我在应用中踩了个坑 事务和batch是什么这个大家如果不了解的话自行百度一下下文带大家简单看看案例 /** author Marinda* date 2023/12/13 16:17* description 批量插入全部书籍列表*/ insertAll(ListBook bookList) async{List resultList [];await db.transaction((txn) async{Batch batch txn.batch();for(var book in bookList){batch.insert(table,book.toJson());}//返回全部结果并且不跳过错误resultList await batch.commit(noResult: false,continueOnError: false);print(resultList: ${resultList});});await close();return resultList; }注在该案例中配合事务 batch.commit方法中如果continueOnError为false时 出现异常则会中止导致前面插入回推。 注在该insertAll()方法 或其他涉及事务的方法都要执行完毕后主动调用close() 断开本次连接。否则会导致 Error DomainFMDatabase Code5 “database is locked” 如果已经出现 Error DomainFMDatabase Code5 “database is locked” 错误请删除该数据库文件重新生成。 结束语 感谢你的观看希望对大家学习有帮助有不对的地方欢迎指正
http://wiki.neutronadmin.com/news/375577/

相关文章:

  • 做张家界旅游网站多少钱免费浏览器大全
  • 网站使用说明书模板手机网站建设公司排名
  • 网站建设需要服务器吗技能培训班
  • 南昌seo网站西安app开发
  • 淘宝网站优惠券统一修改怎么做wordpress建好后
  • 购物网站前台功能模块分析网页制作公司深圳
  • 网站建设方案书制作ip做网站域名
  • 企业网站推广的模式创建目录wordpress
  • 做网站不知道做什么内容的企业采购
  • 曲阜网站建设哪些网站可以做代理
  • 银川网站建设哪家好成都营销策划公司
  • 大型网站构建实施方案张家界商城网站建设
  • 佛山当地网站建设公司wordpress 扫码支付
  • 教育类网站框架彩票网站做代理
  • 东莞美容网站建设网站前台建设用到哪些工具
  • 网站开发在线网站的结构设计
  • 自己做一网站 多做宣传.手机如何建网站
  • 动漫做那个视频网站做网站 做好把我踢开
  • 住房城乡建设网站查询平面设计转行做什么比较好
  • 网页制作 公司网站什么网站可以帮人做ppt赚钱
  • 网站的ftp地址是什么深圳平湖网站建设
  • 长沙网站开发培训学校做统计表的网站
  • 网站系统性能定义安卓优化大师下载
  • 北京h5网站建设报价后台更新的内容在网站上不显示
  • 东莞网站关键词优化公司学建设网站去哪里学
  • 制作网站费用旅游网站开发意义和价值
  • 做网站前台要学哪些wordpress 只在首页显示
  • 平泉网站建设制作微信小程序公司
  • 网站seo入门wordpress如何防注入
  • 做网站费用可以看为广告费用吗网页设计作业水晶