『動善時』JMeter基礎 — 42、JDBC Request元件詳細介紹

繁華似錦Fighting發表於2021-06-15

1、JDBC Request元件介紹

JDBC Request元件可以向資料庫傳送一個JDBC請求(傳送SQL語句),它需要和配置元件中的JDBC Connection Configuration元件配合使用。

即:在使用JDBC Request元件時,必須設定一個JDBC連線配置元件,以提供連線的目標資料庫。

2、JDBC Request元件介面詳解

新增JDBC Request元件操作:選中“執行緒組”右鍵 —> 新增 —> 取樣器 —> JDBC Request

JDBC Request元件的介面,如下圖所示:

image

介面詳細說明

  • 名稱JDBC Request元件的自定義名稱,見名知意最好。
  • 註釋:即新增一些備註資訊,對該JDBC Request元件的簡短說明,以便後期回顧時檢視。

(1)Variable Name Bound to Pool:繫結一個資料庫的連結。

Variable Name of Pool declared in JDBC Connection Configuration:填寫資料庫連線池的名稱。也就是填寫與你需要呼叫的jdbc connection configuration元件中定義的變數名(Variable Name)保持一致。

(2)SQL Query:SQL查詢

  • Query Type:選擇SQL語句型別。不同形式的SQL語句,需要選擇對應的SQL語句型別。(具體介紹看下面補充)
  • Query::裡面填入查詢資料庫資料的SQL語句(填寫的SQL語句時,單條SQL語句末尾不要加;,多條SQL語句需要加;

(3)第三部分內容

  • Parameter values:填寫引數值。表示我們要新增到SQL中的資料(SQL語句中有佔位符的時候使用),需要新增不同資料的時候,可以使用引數化。多個引數用逗號分隔。
  • Parameter types:填寫上面資料的引數型別,與上面的引數一一對應。比如varchartinyint(m)smallint(m)等。填寫多個型別的時候,用逗號分隔。
  • Variable names:儲存SQL語句返回結果的變數名,與資料庫欄位對應,多個欄位儲存時,用逗號分隔。用於儲存由Select語句、Prepared Select語句或CallableStatement返回的值(查詢語句)。
    注意,當與CallableStatement一起使用時,變數列表的順序必須與呼叫返回的OUT引數相同。如果變數名少於OUT引數,則只有指定變數名的部分能返回;如果存在更多的變數名,則多餘變數將被忽略。
  • Result variable name:建立一個物件變數,儲存所有返回結果。也就是定義用於存放select操作返回的查詢結果集。
  • Query timeout:設定查詢超時的時間。
  • Handle result set:定義如何處理由callable statements語句返回的結果。(在涉及儲存過程的時候可能會用上)
    • Store As String(預設):所有變數都作為字串格式進行儲存。不會遍歷ResultSet。
    • Store As Object:變數名稱列表中的ResultSet型別的變數將被儲存為物件。不會遍歷ResultSet。
    • Count Records:結果集型別的變數將通過顯示記錄的計數作為結果進行迭代。變數將被儲存為字串。

說明:Parameter valuesParameter types:是成對出現的,且SQL語句中有多少個?,這裡就必須有多少對引數鍵值對。假設SQL語句為select * from member where id=2,那麼可以設定Parameter values${id}Parameter typesint

3、補充:Query Type型別說明

在JMeter的JDBC Request元件中,Query Type(SQL語句型別)包含十個型別,每個型別作用都不同。

(1)Select Statement(重點)

這是一個查詢語句型別;如果JDBC Request中的Query內容為一條查詢語句,則選擇這種型別。

提示:

  1. 如果有多條查詢語句(不帶有佔位符的情況下),可以放在一起順序執行,每天SQL語句用分號分隔,且需要設定Query TypeCallable Statement
  2. 執行多條查詢語句時,如果Query Type選擇為Select Statement,只會執行第一條查詢語句。
  3. 執行多條查詢語句時,如果Query Type選擇為Prepared Select Statement,也只會執行第一條查詢語句。

前提:在JMeter中執行多條查詢語句時,需要在JDBC Connection Configuration元件中配置Database URL新增?allowMultiQueries=true,例如:jdbc:mysql://127.0.0.1:3306/ecshop4?serverTimezone=GMT&allowMultiQueries=true。不填寫,則會報錯。

(2)Update Statement(重點)

這是一個更新語句型別,包含updateinsertdelete操作。如果JDBC Request元件中的Query內容為一條更新語句,則選擇這種型別。

提示:

  1. 如果執行多條更新語句(不帶有佔位符的情況下),可以放在一起順序執行,每天SQL語句用分號分隔。
  2. Query Type設定為Update StatementPrepared Update StatementCallable Statement都可以(親測5.4.1版本)。
  3. 前提是Database URL新增了allowMultiQueries=true引數,如上。
  4. 如果新增中文亂碼,則需要在Database URL新增characterEncoding=UTF-8引數。
  5. 如果多條語句中夾雜Select語句,則自動忽略。
  6. 多條語句中,若第一條語句為Select語句,則報錯。

(3)Prepared Select Statement(重點)

Select Statement用於為一條SQL語句生成執行計劃,如果只執行一條查詢SQL語句,Select Statement是最好的型別。

Prepared Select Statement用於繫結變數重用執行計劃,對於多次執行的SQL語句,Prepared Select Statement無疑是最好的型別生成執行計劃極為消耗資源,兩種實現速度差距可能成百上千倍。

提示:Prepared Select Statement的第一次執行消耗是很高的,它的效能體現在後面的重複執行。

總結:Prepared Select Statement是預編譯的,對於批量處理可以大大提高效率。所以對於多條查詢語句的執行,選擇這個是最好的。

(4)Prepared Update Statement(重點)

Prepared Update StatementPrepared Select Statement的用法是極為相似的,具體可以參照前三種型別的關係。

(5)Callable Statement

這是一個可呼叫語句型別,Callable Statement為所有的 DBMS(資料庫管理系統) 提供了一種以標準形式呼叫已儲存過程的方法。

簡單的理解:

  1. 也就是說如果需要呼叫儲存過程就選這個這個型別。具體的使用,可以自行去擴充。
  2. Callable Statement語句型別,只要語法正確,任何語句,再多的條數都能支援。

(6)Commit

Commit的意思是:將未儲存的SQL語句結果寫入資料庫表,而在JMeter的JDBC請求中,同樣可以根據具體使用情況,選擇這種Query型別。(無特殊情況,不推薦使用)

(7)Rollback

Rollback指的是:撤銷指定SQL語句的過程,而在JMeter的JDBC請求中,同樣可以根據需要使用這種型別。(無特殊情況,不推薦使用)

(8)AutoCommit(false)

MySQL預設操作模式就是AutoCommit自動提交模式。表示除非顯式地開始一個事務,否則每條SQL語句都被當做一個單獨的事務自動執行。

我們可以通過設定AutoCommit的值,改變是否執行自動提交模式。

AutoCommit(false)的意思是不執行自動提交模式,即將使用者操作一直處於某個事務中,直到執行一條Commit提交或Rollback語句,才會結束當前事務,重新開始一個新的事務。

(9)AutoCommit(true)

這個選項的作用和上面AutoCommit(false)作用相反,即:無論何種情況,都自動提交將結果寫入資料庫,並結束當前事務開始下一個事務。

(10)編輯(${}

如果需實現同時多個不同使用者使用不同的SQL,可以通過把整條SQL語句引數化來實現。

把SQL語句放在CSV檔案中,然後在JDBC Request的Query中,使用引數化 ${SQL_Statement}代替。

參考:https://www.cnblogs.com/imyalost/p/6498029.html

相關文章