Linux操作系統——數據庫

數據庫
?? ??? ?sun
?? ??? ?solaris ?gnu
1、分類: 大型 ? ?中型 ? ??? ??? ?小型
?? ??? ? ORACLE ? MYSQL/MSSQL ? SQLITE ?DBII powdb
?? ??? ?關系型數據庫 ? ? ? ?
2、名詞:
?? ??? ?DB?? ??? ?數據庫 select update database
?? ??? ?DBMS?? ?數據庫管理系統
?? ??? ?MIS ? ? 管理信息系統
?? ??? ?OA ? ? ?辦公自動化
3、嵌入式數據庫:
?? ??? ?sqlite3 ? ?www.sqlite.org ?www.kernal.org
?? ?GNU ??
?? ?特點:
?? ??? ? ?1、開源 ?C語言開發
?? ??? ? ?2、代碼量少 1萬行左右,總大小10M以內
?? ??? ? ?3、綠色軟件無需安裝
?? ??? ? ?4、文件型數據庫,可以移動。
?? ??? ? ?5、數據容量最大 2T ??
?? ??? ? ?


whereis sqlite3
sqlite3:

4、sqlite3的安裝: LTS long term support?
??? ?1、在線安裝 :
?? ??? ??? ??? ?sudo apt-get install sqlite3?
?? ??? ??? ??? ?sudo apt-get install libsqlite3-dev

?? ?
?? ??? ?gcc test.c -lsqlite3 -lpthread
?? ??? ?
?? ?2、驗證是否安裝成功:
?? ??? ?sqlite3 --version
?? ??? ?sqlite3 --help

5、sqlite3的使用:
?? ?0、啟動sqlite3?
?? ??? ??? ?sqlite3 xxx.db ?
?? ??? ??? ?===>用sqlite3 來打開一個名稱為test.db的本地數據庫。

?? ??? ??? ?出現如下提示符:表明數據庫管理系統啟動。
?? ??? ??? ?sqlite>?

?? ? ??? ??? ?退出數據庫:?
?? ? ? ?? ??? ?.q 命令
?? ??? ??? ?
?? ??? ??? ?注意:如果一直出現如下符號:
?? ??? ??? ?...> ??
?? ??? ??? ?則寫';'結束。

?? ?以下所有命令必須在 sqlite> 后執行。

?? ?創建一個數據庫:
?? ??? ?1、touch ?xxx.db
?? ??? ?2、sqlite3 xxx.db

?? ?1、系統維護命令:===> .help
?? ??? ?出現所有相關的系統維護命令,都是以 "."開頭。
?? ??? ?.database ?列出當前庫和系統中那個文件在關聯
?? ??? ?.tables ? ?列出當期數據庫中的所有表
?? ??? ?.schema xxx 列出當前指定的xxx表結構
?? ??? ?.dump user ? ===>導出數據庫
?? ??? ?重定向
?? ??? ?sqlite3 test.db .dump > 123.sql
?? ??? ?sqlite3 xxx.db < test.sql ===>導入數據庫

?? ??? ?

?? ?2、標準SQL語句:===》通用語法在其他平臺可以直接使用。struct query language;
?? ??? ?注意:所有的sql語句都以';'結尾。
?? ??? ?創建一個表:ddl
?? ??? ?create table ?表名(表字段1,表字段2,...);

?? ??? ?eg: create table user(id,name,age);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? char (有長度限制)字符串
?? ??? ?注意:以上表的表字段,支持如下數據類型。int? ? ? ? ? ?text? ? ? ? ? ?real? ? ? ? ? blob(照片)
?? ??? ??? ? ?默認是text類型。char;


?? ??? ?create table 表名 (表字段 類型,表字段 類型,。。。。);
?? ??? ?eg:
?? ??? ?create table user(id int ?,name char,age int);

刪除一個表:
?? ??? ?drop table ?表名;

?? ??? ?eg:drop table user;
?? ? ? 數據庫常規操作: 增加 刪除 修改 查詢
?? ? ?

向表中增加數據:
?? ? ? insert into 表名 (字段名稱 ) values (值名稱);

?? ? ? eg:insert into user (id,age)? ? values (1,10);

?? ? ? insert into user values(3,"wang",11);
?? ? ? insert into user (age) values ( 12);

?查詢表中的數據:
?? ? ? select 列名 from 表名 ?條件;

?? ? ? eg:select * from user ; 查詢有多少列
?? ? ? ? ? select id from user;只取某幾列:
?? ??? ? ? select id,name from user where not ?age <30
?? ??? ? ? where name ? like '三一' ? % _ 通配符?

查詢創建的表中是什么類型 :? ?.schema

要是想在查詢的列最上面顯示類型: .headers on

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?asc
?? ??? ? ? select *from user where age>20 or age<50 order by age desc limit 2 ;
?? ??? ? ? && ?||

用like 查詢通配符,=查看具體哪個re'e

%和_是0到任意多個字符? 通配符


?

?? ? ? 修改表中數據:
?? ? ? update 表名 set 表字段 = 值 ?滿足條件:

?? ? ? eg: update user set id = 1 where name = 'li';
?? ? ? update user set id = 1 where name = "li" and passwd = "123";
?? ? ? update user set id = 2 where name = "li" or ?name = "zhao";

?? ??
?? ? ?

刪除表中數據:
?? ? ? delete from 表名 ?滿足條件:

?? ? ? eg:delete from user ; ?///刪除表中所有數據
?? ? ? ?? ? ? delete from user where id ?= 1; ///刪除id=1 的數據;
?? ??? ? ? delete from user where id =1 and name = "zhang";
?? ??? ? ? delete from user where id = 1 or id ?= 2;
?? ??? ??
?? ?>2022-1-1 and <2018-12-31

插入時間列 int int;
?? ?unicode
?? ?CREATE TABLE user1(id int,name char,age int,dt datetime);

、'2022-07-01 19:00:00'

?? ?insert into user1 values (2,'張三',23,datetime('now','+8 hours'));

自動增長列
?? ?sqlite> CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime); ?主鍵?

sqlite> insert into user3 (NULL,'李四',23,datetime('now')); ? (void*)0

?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?asc?
?? ?where (group by having) order by [desc] limit;

?? ?select * from user where id<10 order by id limit 2; ?

維護命令:

1、數據的導出:
?? ??? ?sqlite3 xxx.db .dump > xxx.sql
?? ?//將數據庫名稱為xxx的數據庫整體導出到腳本中。

? ? “>”輸出重定向
?

2、數據的導入:
?? ??? ?sqlite3 xxx.db < xxx.sql

“<”輸出重定向

3、可視化工具安裝:s
?? ?sudo apt-get install sqlitebrowser?

?? ?

?? ?
==================================================
sqlite3 數據庫編程接口:

1、需要的頭文件
?? ??? ?sqlite3.h

2、編譯過程
?? ??? ?-lsqlite3

3、編程框架:
打開數據庫 ==》讀寫數據庫(增,刪,改,查) ==》關閉數據庫

sqlite3.h

3.1 打開數據庫: sqlite3_open
? ? int sqlite3_open(char * path,sqlite3 ** db);
?? ?功能:打開指定path路徑+文件名稱的數據庫,并將
?? ??? ? ?打開的地址指向db變量的句柄。
?? ?參數:path 要打開的數據庫路徑+名稱
?? ??? ? ?db ?要打開的數據庫地址指針
?? ?返回值:成功 ?0
?? ??? ??? ?失敗 ?-1;

3.2 關閉數據庫: sqlite3_close
?? ?int sqlite3_close(sqlite3 *db);
?? ?功能:關閉指定的數據庫
?? ?參數:要關閉的數據庫地址
?? ?返回值:成功 ?0
?? ??? ??? ?失敗 ?-1;

3.3 數據庫操作:
?? ?查詢操作:sqlite3_get_table(); ?select?

?? ?int sqlite3_get_table(sqlite3 *db,char *sql,
?? ??? ??? ??? ??? ?char *** rest,int *nrow,int *ncol,
?? ??? ??? ??? ??? ?char ** errmsg);

?? ?功能:在db數據庫上執行sql查詢語句,并將執行的
?? ??? ? ?結果集返回到rest地址上,同時返回查詢的行和列。
?? ?參數:db 要執行查詢語句的數據庫
?? ? ? ? ?sql ?要執行的select查詢語句
?? ??? ? ?rest 查詢的結果集是一個三級指針
?? ??? ? ?nrow 查詢的結果的行數
?? ??? ? ?ncol 查詢的結果的列數
?? ??? ? ?errmsg 如果執行有錯誤,則存儲錯誤。
?? ?返回值:成功 0
?? ??? ??? ?失敗 非0;

?? ?執行sql語句:sqlite3_exec(); ? insert delete update

?? ?int sqlite3_exec(sqlite3 *db,char *sql,callback fun,
?? ??? ??? ??? ??? ?void * arg,char ** errmsg);

?? ?功能:在db數據庫上執行sql 非查詢語句。
?? ??? ? ?并將結果返回。
?? ?參數:db 要執行sql的數據庫
?? ??? ? ?sql ?要執行的非查詢sql語句。
?? ??? ? ?fun ?如果該函數要執行查詢語句,則該回調函數
?? ??? ? ??? ? ? 用來回收查詢的結果。
?? ??? ? ?arg ?回調函數的參數,如果沒有回調函數則該參數為NULL;
?? ??? ? ?errmsg ?執行過程中的錯誤信息。
?? ?返回值:執行成功 ?0
?? ??? ??? ?失敗 ?非0 ;

?? ?int fun(void *arg ,int f_num,char ** f_value,
?? ? ? ? ? ?char ** f_name)
?? ?
?? ?功能:該函數用于sqlite3_exec執行select語句的
?? ??? ? ?結果集返回數據。
?? ?參數:arg 由sqlite3_exec傳入的參數
?? ??? ? ?f_num 執行該命令所返回測結果集的字段個數。
?? ??? ? ?f_value 查詢結果集中的字段的值。
?? ??? ? ?f_name ?查詢結果集中的字段的名稱。
?? ?返回值:成功 0
?? ??? ??? ?失敗 非0
?? ?注意:該回調函數必須有返回值,否則可能導致查詢異常。

#include <stdio.h> // 引入標準輸入輸出庫  
#include <stdlib.h> // 引入標準庫,用于動態內存分配、程序控制等  
#include <sqlite3.h> // 引入SQLite3庫的頭文件  int main(int argc, char *argv[])  
{  sqlite3* db; // 聲明一個指向sqlite3結構體的指針,用于存儲數據庫連接  // 嘗試打開數據庫文件aaa.db,如果文件不存在則創建它  // sqlite3_open的第二個參數是指向sqlite3*的指針的地址,用于存儲數據庫連接  int ret = sqlite3_open("aaa.db",&db);  if(SQLITE_OK != ret) // 如果打開失敗  {  // 使用sqlite3_errmsg獲取錯誤信息,并打印到標準錯誤輸出  fprintf(stderr,"open db error:%s\n",sqlite3_errmsg(db));  // 無論成功與否,都需要關閉數據庫連接  sqlite3_close(db);   // 返回錯誤代碼1表示程序異常退出  return  1;  }  // 準備要執行的SQL命令,這里是一個插入命令  char sql_cmd[256]="insert into user values(8,'zhaosi',12);";  // 聲明一個用于接收SQL執行后可能產生的錯誤信息的指針  char * errmsg;  // 執行SQL命令  // sqlite3_exec的第四個參數和第五個參數是回調函數和數據指針,這里都不需要,所以設為NULL  // 第五個參數是指向錯誤信息的指針的地址,用于接收可能產生的錯誤信息  ret = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);  if(SQLITE_OK != ret) // 如果執行失敗  {  // 打印錯誤信息到標準錯誤輸出  fprintf(stderr,"exec sqlcmd error:%s\n",errmsg);  // 使用sqlite3_free釋放sqlite3_exec分配的錯誤信息內存  sqlite3_free(errmsg);  // 關閉數據庫連接  sqlite3_close(db);   // 返回錯誤代碼1表示程序異常退出  return  1;  }  // 如果一切順利,則關閉數據庫連接  sqlite3_close(db);  // 程序正常退出  return 0;  
}


練習:自己創建一個學生表,最少不能低于3個字段
?? ? ?最好有一個唯一主鍵,
?? ? ?設計程序以代碼方式,依次輸入5個學生信息
?? ? ?并存儲到數據庫中,最終查詢顯示所有學習信息。

?? ? ?id(主鍵,自動),name,age,addr,datetime,recommand;
?? ? ?
?? ? ?至少插入5條記錄。
?? ? ?
?? ? ?修改3處。
?? ? ?
?? ? ?刪除2條記錄。

?? ? ?
給數據庫表添加主鍵:
1、sqliteman 設計表過程中選擇 ;PK INTER
2、SQL 語句:
? ?create table user(id int primary key,name text);
?? ?
?? ?
?? ?新建表
?? ?create table stu_info(id int ,name char ,age int ,phone char ,email char,qq char);
?? ?
?? ?增加記錄
?? ?insert into stu_info values (2,'關二哥',55,'13011112222','gauanerge@163.com','8888888');
?? ?
?? ?查詢記錄
?? ?select * from stu_info;
?? ?
?? ?修改記錄
?? ?
?? ?
?? ?update stu_info set age = 56
?? ?where id = 2;
?? ?
?? ?刪除
?? ?delete from stu_info where id = 2;
?? ?
?? ?
?? ?select*from 表明 ?where
?? ?從句where?
?? ?
?? ?
?? ?(id int,name char,age int,kind int,salary real);
?? ?
?? ?
?? ?insert into person values(9,'周瑜',39,3,3638.20);

ldd查看使用了哪些庫?

,該代碼段使用SQLite3庫來查詢并打印user表中的數據、

#include <stdio.h> // 引入標準輸入輸出庫  
#include <stdlib.h> // 引入標準庫(雖然在這段代碼中未直接使用,但通常是C程序的標準包含之一)  
#include <sqlite3.h> // 引入SQLite3庫的頭文件  // 定義一個回調函數,用于處理sqlite3_exec查詢結果的每一行  
// 參數arg是傳遞給sqlite3_exec的第四個參數(這里未使用,設為NULL)  
// col是結果集中的列數  
// result是一個指向字符串數組的指針,每個字符串都是結果集中的一列  
// title是一個指向列名數組的指針(注意:在某些版本的SQLite中,title可能不是所有情況下都可用)  
int show(void* arg, int col, char** result, char** title) {  int i = 0;  static int flag = 0; // 靜態變量,用于控制列標題只打印一次  if (0 == flag) {  // 打印列標題(如果存在的話)  // 注意:title在某些版本的SQLite或某些配置下可能不是有效的,具體取決于編譯的SQLite版本和設置  for (i = 0; i < col; i++) {  if (title && title[i]) { // 檢查title是否為NULL以及當前列名是否為NULL  printf("%s\t", title[i]);  } else {  // 如果title不可用,可以選擇不打印標題或使用占位符  printf("Column%d\t", i + 1);  }  }  printf("\n");  flag = 1; // 設置標志位,避免重復打印標題  }  // 打印結果集的每一行數據  for (i = 0; i < col; i++) {  printf("%s\t", result[i] ? result[i] : "NULL"); // 如果結果為NULL,則打印"NULL"  }  printf("\n");  return 0; // 回調函數返回0表示成功  
}  int main(int argc, char *argv[]) {  sqlite3* db; // 聲明一個指向sqlite3結構體的指針,用于存儲數據庫連接  int ret = sqlite3_open("aaa.db", &db); // 嘗試打開數據庫文件aaa.db  if (SQLITE_OK != ret) { // 如果打開失敗  fprintf(stderr, "open db error:%s\n", sqlite3_errmsg(db)); // 打印錯誤信息  sqlite3_close(db); // 關閉數據庫連接(盡管在錯誤情況下這可能不是必須的,但是一個好習慣)  return 1; // 返回錯誤代碼1表示程序異常退出  }  char sql_cmd[256] = "select * from user;"; // 準備SQL查詢命令  char *errmsg; // 聲明一個用于接收SQL執行后可能產生的錯誤信息的指針  ret = sqlite3_exec(db, sql_cmd, show, NULL, &errmsg); // 執行SQL查詢,并注冊回調函數show來處理結果  if (SQLITE_OK != ret) { // 如果執行失敗  fprintf(stderr, "exec sqlcmd error:%s\n", errmsg); // 打印錯誤信息  sqlite3_free(errmsg); // 釋放sqlite3_exec分配的錯誤信息內存  sqlite3_close(db); // 關閉數據庫連接  return 1; // 返回錯誤代碼1表示程序異常退出  }  sqlite3_close(db); // 正常情況下也關閉數據庫連接  return 0; // 程序正常退出  
}

在C語言中使用SQLite3庫來查詢數據庫并打印結果

#include <stdio.h>  
#include <stdlib.h>  
#include <sqlite3.h>  // 回調函數,用于處理查詢結果的每一行  
int show(void* arg, int col, char** result, char** title) {  int i = 0;  static int flag = 0; // 靜態變量,用于控制列標題只打印一次  if (0 == flag) {  // 如果flag為0,則打印列標題  for (i = 0; i < col; i++) {  // 注意:title可能為NULL或包含空字符串,這里直接打印  printf("%s\t", title ? title[i] : "Column?");  }  printf("\n");  flag = 1; // 設置flag為1,避免再次打印列標題  }  // 打印當前行的數據  for (i = 0; i < col; i++) {  // 注意:result[i]也可能為NULL,這里直接打印(如果為NULL,則打印空字符串)  printf("%s\t", result[i] ? result[i] : "");  }  printf("\n");  return 0; // 回調函數返回0表示成功  
}  int main(int argc, char *argv[]) {  sqlite3* db; // 指向SQLite數據庫連接的指針  int ret = sqlite3_open("aaa.db", &db); // 嘗試打開數據庫  if (SQLITE_OK != ret) { // 如果打開失敗  // 打印錯誤信息并關閉數據庫(盡管在錯誤情況下關閉可能不是必需的,但這是一個好習慣)  fprintf(stderr, "open db error:%s\n", sqlite3_errmsg(db));  sqlite3_close(db);  return 1; // 返回錯誤代碼  }  char sql_cmd[256] = "select * from user;"; // 準備SQL查詢語句  char *errmsg; // 用于接收可能的錯誤信息的指針  ret = sqlite3_exec(db, sql_cmd, show, NULL, &errmsg); // 執行SQL查詢并注冊回調函數  if (SQLITE_OK != ret) { // 如果執行失敗  // 打印錯誤信息,釋放錯誤信息占用的內存,并關閉數據庫  fprintf(stderr, "exec sqlcmd error:%s\n", errmsg);  sqlite3_free(errmsg);  sqlite3_close(db);  return 1; // 返回錯誤代碼  }  // 查詢成功完成,關閉數據庫連接  sqlite3_close(db);  return 0; // 程序正常退出  
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45532.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45532.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go中的defer看似很簡單,實則一點都不難

Golang 中的 Defer 在Go語言中&#xff0c;defer語句用于將一個函數調用推遲到外圍函數返回之后執行。它常用于確保某些操作在函數結束時一定會執行&#xff0c;例如資源釋放、文件關閉等。 基本語法 defer語句的基本使用方法如下&#xff1a; func main() {defer fmt.Prin…

距離變換 Distance Transformation

以下為該學習地址的學習筆記&#xff1a;Distance transformation in image - Python OpenCV - GeeksforGeeks 其他學習資料&#xff1a;Morphology - Distance Transform 簡介 距離變換是一種用于計算圖像中每個像素與最近的非零像素之間距離的技術。它通常用于圖像分割和物體…

51單片機5(GPIO簡介)

一、序言&#xff1a;不論學習什么單片機&#xff0c;最簡單的外設莫過于I口的高低電平的操作&#xff0c;接下來&#xff0c;我們將給大家介紹一下如何在創建好的工程模板上面&#xff0c;通過控制51單片機的GPIO來使我們的開發板上的LED來點亮。 二、51單片機GPIO介紹&#…

第三節SHELL腳本中的變量與運算(1.1-1.5)

一,腳本中的變量 1,1什么是變量 在編寫程序是,通常會遇到被操作對象不固定的情況我們需要用一串固定的字符來的表示不固定的值,這就是變量存在的根本意義變量的實現原理就是內存存儲單元的一個符合名稱 1,2 變量的命名規則 變量的名稱中只能包含數字,大小寫字母以及下劃線 …

PySide在Qt Designer中使用QTableView 顯示表格數據

在 PySide6 中&#xff0c;可以使用 Qt Model View 架構中的 QTableView 部件來顯示和編輯表格數據。 1、創建ui文件 在Qt Designer中新建QMainWindow&#xff0c;命名為csvShow.ui。QMainWindow上有兩個部件&#xff1a;tableview和btn_exit。 2、使用pyuic工具將ui文件轉換為…

Kafka(四) Consumer消費者

一&#xff0c;基礎知識 1&#xff0c;消費者與消費組 每個消費者都有對應的消費組&#xff0c;不同消費組之間互不影響。 Partition的消息只能被一個消費組中的一個消費者所消費&#xff0c; 但Partition也可能被再平衡分配給新的消費者。 一個Topic的不同Partition會根據分配…

MySQL集群、Redis集群、RabbitMQ集群

一、MySQL集群 1、集群原理 MySQL-MMM 是 Master-Master Replication Manager for MySQL&#xff08;mysql 主主復制管理器&#xff09;的簡稱。腳本&#xff09;。MMM 基于 MySQL Replication 做的擴展架構&#xff0c;主要用來監控 mysql 主主復制并做失敗轉移。其原理是將真…

環境變量在Gradle中的妙用:構建自動化的秘訣

環境變量在Gradle中的妙用&#xff1a;構建自動化的秘訣 在構建自動化的過程中&#xff0c;環境變量扮演著至關重要的角色。它們允許開發者根據不同的運行環境&#xff08;如開發、測試和生產環境&#xff09;來調整配置&#xff0c;而無需修改代碼。Gradle&#xff0c;作為一…

基于Faster R-CNN的安全帽目標檢測

基于Faster R-CNN的安全帽目標檢測項目通常旨在解決工作場所&#xff0c;特別是建筑工地的安全監管問題。這類項目使用計算機視覺技術&#xff0c;特別是深度學習中的Faster R-CNN算法&#xff0c;來自動檢測工人是否正確佩戴了安全帽&#xff0c;從而確保遵守安全規定并減少事…

實驗一:圖像信號的數字化

目錄 一、實驗目的 二、實驗原理 三、實驗內容 四、源程序及結果 源程序&#xff08;python&#xff09;&#xff1a; 結果&#xff1a; 五、結果分析 一、實驗目的 通過本實驗了解圖像的數字化過程&#xff0c;了解數字圖像的數據矩陣表示法。掌握取樣&#xff08;象素個…

用Python爬蟲能實現什么?得到什么?

Python爬蟲是一種強大的工具&#xff0c;可以用來自動化地從互聯網上抓取數據和信息。使用Python實現爬蟲可以達成多種目的&#xff0c;包括但不限于以下幾個方面&#xff1a; 數據收集&#xff1a; 網頁內容抓取&#xff1a;可以抓取網頁上的文本、圖片、視頻等內容。搜索引擎…

Linux 網絡配置與連接

一、網絡配置 1.1 ifconfig 網卡配置查詢 ifconfig #查看所有啟動的網絡接口信息 ifconfig 指定的網卡 #查看指定網絡接口信息 1.2 修改網絡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #ens33網絡配置文…

【電源拓撲】反激拓撲

目錄 工作模式 固定頻率 CCM連續電流模式 DCM不連續電流模式 可變頻率 CRM電流臨界模式 反激電源CRM工作模式為什么要跳頻 反激電源應用場景 為什么反激電源功率做不大 電感電流爬升 反激變壓器的限制條件 精通反激電源設計的關鍵-反激電源變壓器設計 反激電源變壓…

MySQL 事務與鎖

事務ACID特性 原子性&#xff1a;事務要么同時成功&#xff0c;要么同時失敗&#xff0c;事務的原子性通過undo log日志保證 一致性&#xff1a;業務代碼要拋出報錯&#xff0c;讓數據庫回滾 隔離性&#xff1a;事務并發執行時&#xff0c;他們內部操作不能互相干擾 持久性&…

Python 讀取esxi上所有主機的設備信息

&#xff08;主要是為了統計所有虛擬機的設備名稱和所屬主機&#xff09; 代碼&#xff1a; from pyVim import connect from pyVmomi import vim import ssldef get_vm_devices(vm):devices []try:if vm.config is not None and hasattr(vm.config, hardware) and hasattr(v…

SpringBoot解決Apache Tomcat輸入驗證錯誤漏洞

Apache Tomcat是美國阿帕奇&#xff08;Apache&#xff09;基金會的一款輕量級Web應用服務器。該程序實現了對Servlet和JavaServer Page&#xff08;JSP&#xff09;的支持。 Apache Tomcat存在輸入驗證錯誤漏洞&#xff0c;該漏洞源于HTTP/2請求的輸入驗證不正確&#xff0c;會…

postgresql簡單導出數據與手動本地恢復(小型數據庫)

問題 需要每天手動備份postgresql。 步驟 導出數據 /opt/homebrew/opt/postgresql16/bin/pg_dump --file/Users/zhangyalin/backup_sql/<IP地址>_pg-2024_07_15_17_30_15-dump.sql --dbname<數據庫名> --username<用戶名> --host<IP地址> --port54…

Day53:圖論 島嶼數量 島嶼的最大面積

99. 島嶼數量 時間限制&#xff1a;1.000S 空間限制&#xff1a;256MB 題目描述 給定一個由 1&#xff08;陸地&#xff09;和 0&#xff08;水&#xff09;組成的矩陣&#xff0c;你需要計算島嶼的數量。島嶼由水平方向或垂直方向上相鄰的陸地連接而成&#xff0c;并且四周…

低空經濟持續發熱,無人機培訓考證就業市場及前景剖析

隨著科技的不斷進步和社會需求的日益增長&#xff0c;低空經濟已成為全球及我國經濟增長的新引擎。作為低空經濟的重要組成部分&#xff0c;無人機技術因其廣泛的應用領域和顯著的經濟效益&#xff0c;受到了社會各界的廣泛關注。為滿足市場對無人機人才的需求&#xff0c;無人…

深入剖析 Android 開源庫 EventBus 的源碼詳解

文章目錄 前言一、EventBus 簡介EventBus 三要素EventBus 線程模型 二、EventBus 使用1.添加依賴2.EventBus 基本使用2.1 定義事件類2.2 注冊 EventBus2.3 EventBus 發起通知 三、EventBus 源碼詳解1.Subscribe 注解2.注冊事件訂閱方法2.1 EventBus 實例2.2 EventBus 注冊2.2.1…