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

西安做网站好的公司济宁网站建设电话

西安做网站好的公司,济宁网站建设电话,电子商务网站建设策略,广东网站制作平台Flutter开发进阶之并发操作数据库 尽管 Flutter 本身不包含任何数据库功能,但可以使用各种第三方库和插件来在 Flutter 应用程序中实现数据库功能; 以下将使用sqflite作为例子,sqflite允许在 Flutter 应用程序中执行 SQL 查询,创…

Flutter开发进阶之并发操作数据库

尽管 Flutter 本身不包含任何数据库功能,但可以使用各种第三方库和插件来在 Flutter 应用程序中实现数据库功能;
以下将使用sqflite作为例子,sqflite允许在 Flutter 应用程序中执行 SQL 查询,创建和管理数据库表,以及执行其他常见的数据库操作。
Flutter开发
在将sqflite添加到Flutter项目的依赖中后,就可以使用代码创建数据库和表了。

import 'package:sqflite/sqflite.dart';  Future<Database> getDatabase() async {  final dir = (await getDatabasesPath()).resolve('my_database.db');  return await openDatabase(dir.path, version: 1, onCreate: _onCreate);  
}  Future _onCreate(Database db, int version) async {  await db.execute('''  CREATE TABLE user (  id INTEGER PRIMARY KEY AUTOINCREMENT,  name TEXT,  age INTEGER  )  ''');  
}

然后我们可以做一些插入、查询、更新和删除数据库中数据的操作。

import 'package:sqflite/sqflite.dart';  Future<void> insertData() async {  final db = await getDatabase();  await db.execute(  'INSERT INTO user (name, age) VALUES (?, ?)',  ['John', 25],  );  
}  Future<List<Map<String, dynamic>>> queryData() async {  final db = await getDatabase();  return await db.query('user');  
}  Future<int> updateData() async {  final db = await getDatabase();  return await db.update(  'user',  {'age': 26},  where: 'name = ?',  whereArgs: ['John'],  );  
}  Future<int> deleteData() async {  final db = await getDatabase();  return await db.delete('user', where: 'name = ?', whereArgs: ['John']);  
}

在实际应用中并不会这么简单,特别是当我们有需求在多个位置去操作数据库的时候,这时候可能会有线程安全的问题;
比如说在一个作用域内,有多台设备需要在我所在的这台设备操作数据库;
首先我所在的设备作为主机要监听子机的UDP广播,然后将通过我验证的子机向其发送我开放的TCP的地址和端口。

  const String multicastGroup = '224.0.0.1'; // 定义多播组地址  const int port = 5000; // 定义端口号  const int bufferSize = 1024; // 定义缓冲区大小  final ByteData buffer = ByteData(bufferSize);  DatagramSocket socket = DatagramSocket();  socket.bind(port);  socket.joinMulticastGroup(multicastGroupIP);  socket.listen(buffer.length);  socket.onDatagramReceived = (Datagram datagram) async {  final String receivedData = datagram.data.toString();  // 处理接收到的数据...  };  

然后合法的子机会收到我的信息,就可以通过TCP向主机发送命令;
这时就需要主机时刻监听TCP并对其响应。

  const int port = 5000; // 定义端口号  final ServerSocket serverSocket = ServerSocket(port);  serverSocket.onAccept = (ServerSocket socket) async {  final Stream stream = socket.accept();  stream.transform(utf8.decoder).listen((String data) {  // 处理接收到的数据...  });  };  

假设对其响应的本身是对数据库进行操作,而主机内部也同时对数据库有了操作,这时候就要注意数据库的线程安全了;
首先可以通过对数据库的操作加锁来保证,比如sqflite提供了事务(Transaction),在事务中执行数据库操作可以确保操作的原子性,即要么全部成功,要么全部失败;
通过使用事务,我们可以实现对数据库操作的加锁,确保同一时间只有一个线程可以访问数据库中的特定资源。

Future<void> insertData() async {  final db = await getDatabase();  await db.transaction((txn) async {  // 在事务中执行数据库操作  await txn.execute('INSERT INTO user (name, age) VALUES (?, ?)', ('John', 25));  // 提交事务  await txn.commit();  });  
}  

或者直接使用synchronized创建锁。

import 'package:synchronized/synchronized.dart';

还可以通过数据库连接池来限制最大连接数量。

import 'package:sqflite/sqflite.dart';  class DatabaseHelper {  static final DatabaseHelper _instance = DatabaseHelper._internal();  static Database? _db;  factory DatabaseHelper() {  return _instance;  }  Future<Database> get db async {  if (_db != null) return _db;  _db = await _openDatabase();  return _db;  }  Future<void> close() async {  if (_db != null) {  await _db!.close();  _db = null;  }  }  Future<Database> _openDatabase() async {  final pool = await SqliteConnectionPool.forDatabase('path/to/database.db');  pool.maxSize = 10; // 设置最大连接数为10  return pool.openDatabase();  }  
}

这样同时还避免了直接使用Database实例。

http://www.yayakq.cn/news/425222/

相关文章:

  • 黄岐建网站网易企业邮箱登录参数错误
  • 如何做自己网站的访问记录个人网站模板html
  • 招商网站怎么做抓取式网站建设
  • 17zwd一起做业网站邢台信息港房屋出租
  • 洛阳网站建设费用山东东方路桥建设总公司官方网站
  • 帮人做网站犯法什么类型的网站开发比较困难
  • php婚庆网站源码网站开发的心得与体会
  • 那里做网站好专业企业网站建设多少钱服务
  • 做h5动画的素材网站html5手机网站返回顶部
  • 辽宁网站建设多少钱建筑产业大数据综合服务平台
  • 彩妆网站模板一个服务器可以做多个网站吗
  • 重庆做网站及公众号公司建设银行车贷网站
  • 南通网站建设方案外包建设一个网站项目预算
  • 搞个网站需要多少钱电子商务网站的功能分析
  • 广州建设网站怎么做哈尔滨seo网络推广
  • 网站平台专业开发制作appwordpress 字段
  • 网站体验步骤设计说明是什么意思
  • dell公司网站建设的特点网络公司怎么挣钱的
  • 一个网站不兼容ie怎么做郑州做网站擎天
  • 成都 高端网站建设免费做微网站
  • 建一个设计网站要多少钱手机端下载
  • 广东门户网站建设太平洋电脑配置报价官网
  • 外贸网站的作用有哪些网站描述怎么设置
  • 网站建设 有必要吗小程序制作教程零基础入门
  • pc网站开发成app难度简述网站开发步骤
  • 莱州网站定制苏州妙笔网络科技有限公司
  • 网站菜单设置自适应的网站模板
  • 网站制作需要什么资料设计北京
  • 网站开发与维护专业前景现在做网络推广网站建设怎么样
  • 云阿里云做网站ui设计主要包括什么