JMeter學習筆記——JDBC Request之Query Type
轉自:http://www.cnblogs.com/imyalost/p/6498029.html
JDBC Request介面如下:
其中Query Type(SQL語句型別)包含十個型別,每個型別作用都不同,下面分別介紹。
1、Select statement
這是一個查詢語句型別;如果JDBC Request中的Query內容為一條查詢語句,則選擇這種型別。
PS:多個查詢語句(不使用引數的情況下)可以放在一起順序執行,需要設定Query Type為:Callable Statement;
如果Query Type為:select Statement,則只執行第一條select語句。
2、Update statement
這是一個更新語句型別(包含insert和update);如果JDBC Request中的Query內容為一條更新語句,則選擇這種型別。
PS:如果該型別下寫入多條update語句,依然只執行第一條(原因同上,具體下面介紹)。
3、Callable statement
這是一個可呼叫語句型別,CallableStatement 為所有的 DBMS 提供了一種以標準形式呼叫已儲存過程的方法。
已儲存過程儲存在資料庫中,對已儲存過程的呼叫是 CallableStatement 物件所含的內容。
這種呼叫是用一種換碼語法來寫的,有兩種形式:一種形式帶結果引數,另一種形式不帶結果引數;結果引數是一種輸出 (OUT) 引數,是已儲存過程的返回值。
兩種形式都可帶有數量可變的輸入(IN 引數)、輸出(OUT 引數)或輸入和輸出(INOUT 引數)的引數,問號將用作引數的佔位符。
在 JDBC 中呼叫已儲存過程的語法如下所示。注意,方括號表示其間的內容是可選項;方括號本身並不是語法的組成部份。
{call 過程名[(?, ?, ...)]},返回結果引數的過程的語法為: {? = call 過程名[(?, ?, ...)]};
不帶引數的已儲存過程的語法類似:{call 過程名}。
4、Prepared select statement
statement用於為一條SQL語句生成執行計劃(這也是為什麼select statement只會執行第一條select語句的原因),
Prepared statement用於繫結變數重用執行計劃,對於多次執行的SQL語句,Prepared statement無疑是最好的型別(生成執行計劃極為消耗資源,兩種實現速度差距可能成百上千倍);
PS:PreparedStatement的第一次執行消耗是很高的. 它的效能體現在後面的重複執行。
5、Prepared update statement
Prepared update statement和Prepared select statement的用法是極為相似的,具體可以參照第四種類型。
6、Commit
commit的意思是:將未儲存的SQL語句結果寫入資料庫表;而在jmeter的JDBC請求中,同樣可以根據具體使用情況,選擇這種Query型別。
7、Rollback
rollback指的是:撤銷指定SQL語句的過程;在jmeter的JDBC請求中,同樣可以根據需要使用這種型別。
8、AutoCommit(false)
MySQL預設操作模式就是autocommit自動提交模式。表示除非顯式地開始一個事務,否則每條SQL語句都被當做一個單獨的事務自動執行;
我們可以通過設定autocommit的值改變是否是自動提交autocommit模式;
而AutoCommit(false)的意思是AutoCommit(假),即將使用者操作一直處於某個事務中,直到執行一條commit提交或rollback語句才會結束當前事務重新開始一個新的事務。
9、AutoCommit(true)
這個選項的作用和上面一項作用相反,即:無論何種情況,都自動提交將結果寫入,結束當前事務開始下一個事務。
10、編輯(${})
jmeter中的JDBC請求中的SQL語句是無法使用引數的,比如:SELECT * FROM ${table_name} 是無效的。
如果需實現同時多個不同使用者使用不同的SQL,可以通過把整條SQL語句引數化來實現;(把SQL語句放在csv檔案中,然後在JDBC Request的Query 中使用引數代替 ${SQL_Statement})。