中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

高頻網(wǎng)站開發(fā)百度關(guān)鍵詞查詢工具免費(fèi)

高頻網(wǎng)站開發(fā),百度關(guān)鍵詞查詢工具免費(fèi),北京微信網(wǎng)站建設(shè),政府類網(wǎng)站建設(shè)Flutter開發(fā)進(jìn)階之并發(fā)操作數(shù)據(jù)庫 盡管 Flutter 本身不包含任何數(shù)據(jù)庫功能,但可以使用各種第三方庫和插件來在 Flutter 應(yīng)用程序中實現(xiàn)數(shù)據(jù)庫功能; 以下將使用sqflite作為例子,sqflite允許在 Flutter 應(yīng)用程序中執(zhí)行 SQL 查詢,創(chuàng)…

Flutter開發(fā)進(jìn)階之并發(fā)操作數(shù)據(jù)庫

盡管 Flutter 本身不包含任何數(shù)據(jù)庫功能,但可以使用各種第三方庫和插件來在 Flutter 應(yīng)用程序中實現(xiàn)數(shù)據(jù)庫功能;
以下將使用sqflite作為例子,sqflite允許在 Flutter 應(yīng)用程序中執(zhí)行 SQL 查詢,創(chuàng)建和管理數(shù)據(jù)庫表,以及執(zhí)行其他常見的數(shù)據(jù)庫操作。
Flutter開發(fā)
在將sqflite添加到Flutter項目的依賴中后,就可以使用代碼創(chuàng)建數(shù)據(jù)庫和表了。

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  )  ''');  
}

然后我們可以做一些插入、查詢、更新和刪除數(shù)據(jù)庫中數(shù)據(jù)的操作。

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']);  
}

在實際應(yīng)用中并不會這么簡單,特別是當(dāng)我們有需求在多個位置去操作數(shù)據(jù)庫的時候,這時候可能會有線程安全的問題;
比如說在一個作用域內(nèi),有多臺設(shè)備需要在我所在的這臺設(shè)備操作數(shù)據(jù)庫;
首先我所在的設(shè)備作為主機(jī)要監(jiān)聽子機(jī)的UDP廣播,然后將通過我驗證的子機(jī)向其發(fā)送我開放的TCP的地址和端口。

  const String multicastGroup = '224.0.0.1'; // 定義多播組地址  const int port = 5000; // 定義端口號  const int bufferSize = 1024; // 定義緩沖區(qū)大小  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();  // 處理接收到的數(shù)據(jù)...  };  

然后合法的子機(jī)會收到我的信息,就可以通過TCP向主機(jī)發(fā)送命令;
這時就需要主機(jī)時刻監(jiān)聽TCP并對其響應(yīng)。

  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) {  // 處理接收到的數(shù)據(jù)...  });  };  

假設(shè)對其響應(yīng)的本身是對數(shù)據(jù)庫進(jìn)行操作,而主機(jī)內(nèi)部也同時對數(shù)據(jù)庫有了操作,這時候就要注意數(shù)據(jù)庫的線程安全了;
首先可以通過對數(shù)據(jù)庫的操作加鎖來保證,比如sqflite提供了事務(wù)(Transaction),在事務(wù)中執(zhí)行數(shù)據(jù)庫操作可以確保操作的原子性,即要么全部成功,要么全部失敗;
通過使用事務(wù),我們可以實現(xiàn)對數(shù)據(jù)庫操作的加鎖,確保同一時間只有一個線程可以訪問數(shù)據(jù)庫中的特定資源。

Future<void> insertData() async {  final db = await getDatabase();  await db.transaction((txn) async {  // 在事務(wù)中執(zhí)行數(shù)據(jù)庫操作  await txn.execute('INSERT INTO user (name, age) VALUES (?, ?)', ('John', 25));  // 提交事務(wù)  await txn.commit();  });  
}  

或者直接使用synchronized創(chuàng)建鎖。

import 'package:synchronized/synchronized.dart';

還可以通過數(shù)據(jù)庫連接池來限制最大連接數(shù)量。

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; // 設(shè)置最大連接數(shù)為10  return pool.openDatabase();  }  
}

這樣同時還避免了直接使用Database實例。

http://m.risenshineclean.com/news/48411.html

相關(guān)文章:

  • 建一個外貿(mào)網(wǎng)站要多少錢投放廣告的渠道有哪些
  • 做網(wǎng)站需要空間自動引流免費(fèi)app
  • wordpress 面板站長工具seo綜合查詢降級
  • 自己做網(wǎng)站哪家好電話百度
  • 網(wǎng)站建設(shè)優(yōu)化托管優(yōu)秀的軟文
  • 重慶哪里可以做網(wǎng)站的可以免費(fèi)打開網(wǎng)站的軟件下載
  • 做網(wǎng)站前期工作網(wǎng)絡(luò)銷售怎么樣
  • 做簡歷的網(wǎng)站有汕頭百度網(wǎng)絡(luò)推廣
  • 摹客 2023年設(shè)計師必備設(shè)計工具嘉興seo外包服務(wù)商
  • 網(wǎng)站解析后 問題電商運(yùn)營怎么做如何從零開始
  • 縣區(qū)網(wǎng)站集約化建設(shè)google谷歌搜索
  • 2016wap網(wǎng)站開發(fā)語言北京網(wǎng)絡(luò)推廣公司排行
  • 專門做視頻的網(wǎng)站嗎網(wǎng)站seo分析常用的工具是
  • 網(wǎng)站公司怎么做業(yè)務(wù)外鏈在線發(fā)布工具
  • html網(wǎng)站分頁怎么做的流量精靈app
  • 女孩學(xué)網(wǎng)站開發(fā)與運(yùn)營方向怎么樣網(wǎng)站推廣廣告
  • 做相冊視頻的網(wǎng)站短視頻代運(yùn)營方案策劃書
  • 在美國建設(shè)網(wǎng)站seo點(diǎn)擊排名器
  • 愛站網(wǎng)seo工具查詢電商平臺
  • 今天最新消息長沙seo結(jié)算
  • b站推廣mmmseo是哪個英文的簡寫
  • 西安 網(wǎng)站建設(shè) 1免費(fèi)的網(wǎng)絡(luò)推廣有哪些
  • 山東高端網(wǎng)站建設(shè)服務(wù)商中國互聯(lián)網(wǎng)公司排名
  • 寬屏網(wǎng)站尺寸營銷型網(wǎng)站制作
  • 做網(wǎng)站注意什么北京網(wǎng)絡(luò)推廣外包公司排行
  • 自己做的網(wǎng)站怎么搜不到焊工培訓(xùn)技術(shù)學(xué)校
  • 網(wǎng)站腦圖用什么做站長統(tǒng)計app
  • wordpress捐贈按鈕seo搜索引擎優(yōu)化步驟
  • 青島微網(wǎng)站開發(fā)長沙關(guān)鍵詞優(yōu)化平臺
  • 企業(yè)推廣語句東莞seo顧問