1. 下載jdbc 的驅(qū)動(dòng) mysql-connector-java-5.1.41-bin.jar,并將該驅(qū)動(dòng)放到路徑:
站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到吐魯番網(wǎng)站設(shè)計(jì)與吐魯番網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋吐魯番地區(qū)。
D:\apache-jmeter-3.0\lib\
2. 打開(kāi)Jmeter 工具,添加線程組 ,如圖所示:
3. 在Jmeter工具中,添加JDBC Connection Configuration ,如圖所示:
4.添加JDBC Request ,如圖所示:
5. 添加 查看結(jié)果樹(shù),如圖所示:
6.配置 JDBC Connection Configuration ,如圖所示:
7.配置JDBC Request 處,添加需要使用的sql語(yǔ)句,如圖所示:
8.將已經(jīng)下載的jdbc驅(qū)動(dòng)加載到Jmeter工具中,這樣就使得mysql與Jmeter連接起來(lái)。如圖所示:
選擇 測(cè)試計(jì)劃 —? 進(jìn)入頁(yè)面,點(diǎn)擊 瀏覽按鈕,如圖所示:
9.點(diǎn)擊 綠色的 運(yùn)行按鈕,執(zhí)行結(jié)果,如圖所示:
你可以做一個(gè)下拉框,選項(xiàng)有教師和學(xué)生,不過(guò)這個(gè)的話,一般是通過(guò)權(quán)限來(lái)控制的,這樣教師和學(xué)生登錄之后,看到的菜單就不一樣了。JDBC連接數(shù)據(jù)庫(kù)?創(chuàng)建一個(gè)以JDBC連接數(shù)據(jù)庫(kù)的程序,包含7個(gè)步驟:1、加載JDBC驅(qū)動(dòng)程序:在連接數(shù)據(jù)庫(kù)之前,首先要加載想要連接的數(shù)據(jù)庫(kù)的驅(qū)動(dòng)到JVM(Java虛擬機(jī)),這通過(guò)java.lang.Class類(lèi)的靜態(tài)方法forName(StringclassName)實(shí)現(xiàn)。例如:try{//加載MySql的驅(qū)動(dòng)類(lèi)Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){System.out.println("找不到驅(qū)動(dòng)程序類(lèi),加載驅(qū)動(dòng)失??!");e.printStackTrace();}成功加載后,會(huì)將Driver類(lèi)的實(shí)例注冊(cè)到DriverManager類(lèi)中。2、提供JDBC連接的URL?連接URL定義了連接數(shù)據(jù)庫(kù)時(shí)的協(xié)議、子協(xié)議、數(shù)據(jù)源標(biāo)識(shí)。?書(shū)寫(xiě)形式:協(xié)議:子協(xié)議:數(shù)據(jù)源標(biāo)識(shí)協(xié)議:在JDBC中總是以jdbc開(kāi)始子協(xié)議:是橋連接的驅(qū)動(dòng)程序或是數(shù)據(jù)庫(kù)管理系統(tǒng)名稱(chēng)。數(shù)據(jù)源標(biāo)識(shí):標(biāo)記找到數(shù)據(jù)庫(kù)來(lái)源的地址與連接端口。例如:(MySql的連接URL)jdbc:mysql://localhost:3306/test?useUnicode=truecharacterEncoding=gbk;useUnicode=true:表示使用Unicode字符集。如果characterEncoding設(shè)置為gb2312或GBK,本參數(shù)必須設(shè)置為true。characterEncoding=gbk:字符編碼方式。3、創(chuàng)建數(shù)據(jù)庫(kù)的連接?要連接數(shù)據(jù)庫(kù),需要向java.sql.DriverManager請(qǐng)求并獲得Connection對(duì)象,該對(duì)象就代表一個(gè)數(shù)據(jù)庫(kù)的連接。?使用DriverManager的getConnectin(Stringurl,Stringusername,Stringpassword)方法傳入指定的欲連接的數(shù)據(jù)庫(kù)的路徑、數(shù)據(jù)庫(kù)的用戶(hù)名和密碼來(lái)獲得。例如://連接MySql數(shù)據(jù)庫(kù),用戶(hù)名和密碼都是rootStringurl="jdbc:mysql://localhost:3306/test";Stringusername="root";Stringpassword="root";try{Connectioncon=DriverManager.getConnection(url,username,password);}catch(SQLExceptionse){System.out.println("數(shù)據(jù)庫(kù)連接失?。?);se.printStackTrace();}4、創(chuàng)建一個(gè)Statement?要執(zhí)行SQL語(yǔ)句,必須獲得java.sql.Statement實(shí)例,Statement實(shí)例分為以下3種類(lèi)型:1、執(zhí)行靜態(tài)SQL語(yǔ)句。通常通過(guò)Statement實(shí)例實(shí)現(xiàn)。2、執(zhí)行動(dòng)態(tài)SQL語(yǔ)句。通常通過(guò)PreparedStatement實(shí)例實(shí)現(xiàn)。3、執(zhí)行數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程。通常通過(guò)CallableStatement實(shí)例實(shí)現(xiàn)。具體的實(shí)現(xiàn)方式:Statementstmt=con.createStatement();PreparedStatementpstmt=con.prepareStatement(sql);CallableStatementcstmt=con.prepareCall("{CALLdemoSp(?,?)}");5、執(zhí)行SQL語(yǔ)句Statement接口提供了三種執(zhí)行SQL語(yǔ)句的方法:executeQuery、executeUpdate和execute1、ResultSetexecuteQuery(StringsqlString):執(zhí)行查詢(xún)數(shù)據(jù)庫(kù)的SQL語(yǔ)句,返回一個(gè)結(jié)果集(ResultSet)對(duì)象。2、intexecuteUpdate(StringsqlString):用于執(zhí)行INSERT、UPDATE或DELETE語(yǔ)句以及SQLDDL語(yǔ)句,如:CREATETABLE和DROPTABLE等3、execute(sqlString):用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的語(yǔ)句。具體實(shí)現(xiàn)的代碼:ResultSetrs=stmt.executeQuery("SELECT*FROM");introws=stmt.executeUpdate("INSERTINTO");booleanflag=stmt.execute(Stringsql);6、處理結(jié)果兩種情況:1、執(zhí)行更新返回的是本次操作影響到的記錄數(shù)。2、執(zhí)行查詢(xún)返回的結(jié)果是一個(gè)ResultSet對(duì)象。?ResultSet包含符合SQL語(yǔ)句中條件的所有行,并且它通過(guò)一套get方法提供了對(duì)這些行中數(shù)據(jù)的訪問(wèn)。?使用結(jié)果集(ResultSet)對(duì)象的訪問(wèn)方法獲取數(shù)據(jù):while(rs.next()){Stringname=rs.getString("name");Stringpass=rs.getString(1);//此方法比較高效}(列是從左到右編號(hào)的,并且從列1開(kāi)始)7、關(guān)閉JDBC對(duì)象操作完成以后要把所有使用的JDBC對(duì)象全都關(guān)閉,以釋放JDBC資源,關(guān)閉順序和聲明順序相反:1、關(guān)閉記錄集2、關(guān)閉聲明3、關(guān)閉連接對(duì)象if(rs!=null){//關(guān)閉記錄集try{rs.close();}catch(SQLExceptione){e.printStackTrace();}}if(stmt!=null){//關(guān)閉聲明try{stmt.close();}catch(SQLExceptione){e.printStackTrace();}}if(conn!=null){//關(guān)閉連接對(duì)象try{conn.close();}catch(SQLExceptione){e.printStackTrace();}}
IDEA軟件開(kāi)發(fā)集成工具,常用于java軟件項(xiàng)目開(kāi)發(fā),軟件項(xiàng)目中使用到了mysql數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的時(shí)候,需要使用客戶(hù)端圖形化工具連接數(shù)據(jù)查看或修改數(shù)據(jù)內(nèi)容,使用IDEA就可以直接連接數(shù)據(jù)庫(kù)查詢(xún)或修改數(shù)據(jù),不需要再單獨(dú)下載數(shù)據(jù)庫(kù)客戶(hù)端軟件了,下面我介紹下如何使用IDEA連接mysql數(shù)據(jù)庫(kù)查詢(xún)數(shù)據(jù)內(nèi)容的方法:
1、
打開(kāi)IDEA軟件工具,正常打開(kāi)一個(gè)項(xiàng)目工程之后,在工具類(lèi)的右側(cè)會(huì)看到Database圖標(biāo),點(diǎn)擊打開(kāi)之后,如果之前沒(méi)有連接過(guò)任何數(shù)據(jù)庫(kù),這個(gè)窗口頁(yè)面都是空的點(diǎn)擊如圖所示的加號(hào)按鈕,創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)連接
;
2、選擇Data Source,然后再選擇MySQL,這里可以看到支持很多種數(shù)據(jù)庫(kù)類(lèi)型,這里選擇您自己對(duì)應(yīng)使用的數(shù)據(jù)庫(kù)類(lèi)型,這里我們演示使用的是mysql數(shù)據(jù)庫(kù);
3、在這個(gè)頁(yè)面需要填寫(xiě)連接的數(shù)據(jù)庫(kù)host,數(shù)據(jù)庫(kù)名稱(chēng),用戶(hù)名以及密碼,端口如果是mysql默認(rèn)是3306,如果沒(méi)有修改保持默認(rèn)即可;
4、連接mysql需要配置mysql連接的數(shù)據(jù)庫(kù)驅(qū)動(dòng)文件,如果沒(méi)有配置的話,會(huì)提示沒(méi)有可用的驅(qū)動(dòng),在頁(yè)面點(diǎn)擊加號(hào)按鈕找到電腦的驅(qū)動(dòng)文件位置、添加上即可
;
5、驅(qū)動(dòng)文件和連接配置信息填寫(xiě)完成之后,點(diǎn)擊Test Connection按鈕測(cè)試連接是否可以正常連接,當(dāng)出現(xiàn)Connection successful提示即表示測(cè)試連接成功,以上配置信息填寫(xiě)正確
;
6、直接點(diǎn)擊確定按鈕,即可正常打開(kāi)連接進(jìn)行mysql數(shù)據(jù)庫(kù)內(nèi)容的查詢(xún)了,可以看到tables是數(shù)據(jù)庫(kù)表,下面是函數(shù)對(duì)象
;
7、在某個(gè)表名稱(chēng)上,雙擊鼠標(biāo)左鍵,即可打開(kāi)表數(shù)據(jù)內(nèi)容窗口,查詢(xún)到了數(shù)據(jù)表中內(nèi)容數(shù)據(jù),可以針對(duì)數(shù)據(jù)進(jìn)行增刪改查等操作;
8、從以上操作可以看到,一般寫(xiě)代碼一般調(diào)試數(shù)據(jù)的時(shí)候,可以都在IDEA工具中完成了,不需要再多次切換工具那么麻煩了。
眾所周知, MySQL的驅(qū)動(dòng)表與被驅(qū)動(dòng)表是優(yōu)化器自動(dòng)優(yōu)化選擇的結(jié)果 (與表連接的前后順序等無(wú)關(guān)),我們可以用explain執(zhí)行計(jì)劃來(lái)知曉:
如上所示,前面一行t1是驅(qū)動(dòng)表,后面一行t2是被驅(qū)動(dòng)表。那么驅(qū)動(dòng)表與被驅(qū)動(dòng)表的選擇是否有規(guī)律可循呢?下面是百度搜索兩個(gè)主流的博文對(duì)驅(qū)動(dòng)表與被驅(qū)動(dòng)表的闡釋?zhuān)?/p>
1. MySQL連接查詢(xún)驅(qū)動(dòng)表被驅(qū)動(dòng)表以及性能優(yōu)化 - 阿偉~ - 博客園 博文A 主要結(jié)論:
2. mysql驅(qū)動(dòng)表與被驅(qū)動(dòng)表及join優(yōu)化_java小小小黑的博客-CSDN博客_mysql驅(qū)動(dòng)表和被驅(qū)動(dòng)表 博文B 其主要結(jié)論:
兩個(gè)帖子的結(jié)論是都差不多,而且還給出了例子來(lái)佐證。那么網(wǎng)上的結(jié)論是否權(quán)威?是否有普遍性?是否存在缺陷?
讓我們來(lái)一起打破砂鍋問(wèn)到底。下面有兩張表結(jié)構(gòu)一模一樣的表t1,t2:其中t1 100條數(shù)據(jù),t2 1000條數(shù)據(jù);t1(t2)結(jié)構(gòu)如下:
按照上面博文的結(jié)論,left join左邊是t2表,應(yīng)該是驅(qū)動(dòng)表。我們查看下結(jié)果:
與 博文B 中觀點(diǎn)1相違背(同理觀點(diǎn)2也違背),與實(shí)際不符,但究竟這是為什么呢?
下面發(fā)一張MySQL的執(zhí)行過(guò)程(來(lái)源于《MySQL實(shí)戰(zhàn)45講》中01講【一條SQL查詢(xún)語(yǔ)句是如何執(zhí)行的】)
so die si ne,原來(lái)sql執(zhí)行的過(guò)程是這樣呀。等等,不對(duì),這跟剛才SQL又有什么關(guān)系,上面left join中t2表還是左邊的呀。
我們知道MySQL高版本的性能越來(lái)越好,它是不斷進(jìn)行優(yōu)化迭代的。遠(yuǎn)古的mysql版本可能還需要人工把小表放在前面,大表放在后面等這些需要人工調(diào)優(yōu)的經(jīng)驗(yàn)早就已經(jīng)被解決了。也就是說(shuō)我們寫(xiě)的語(yǔ)句,MySQL為了追求更好的效率,它在執(zhí)行器執(zhí)行前已經(jīng)幫我們優(yōu)化了。那么實(shí)際優(yōu)化后的sql如何查看呢?用show warning命令:
其中Message就是優(yōu)化后實(shí)際執(zhí)行的sql語(yǔ)句,格式化后如下:
優(yōu)化后left join左連接變成了內(nèi)連接(inner) join。所以用優(yōu)化后的sql看,表t1是小表所以作為驅(qū)動(dòng)表,與實(shí)際結(jié)果相符。
left join 竟然優(yōu)化成了join,太神奇了,但這是為什么呢?原因在于mysql中null與任何值做等值或者不等值比較的時(shí)候都是null,即使是select null=null 也是null。這樣where 條件t1.a=t2.a查詢(xún)條件不會(huì)包含t2.a為NULL的行,實(shí)際效果其實(shí)跟join一樣,被優(yōu)化器智能的優(yōu)化了。
我們直接看執(zhí)行計(jì)劃看實(shí)際結(jié)果吧:
結(jié)果顯示t2是驅(qū)動(dòng)表,t1是被驅(qū)動(dòng)表。t2是1000條數(shù)據(jù)按理說(shuō)是大表應(yīng)該是被驅(qū)動(dòng)表,與 博文A , 博文B 的結(jié)論又不一致了。
《MySQL實(shí)戰(zhàn)45講》中34講【到底可不可以使用join】已經(jīng)講的很透徹了,很深入了,我就不在這里獻(xiàn)丑了。啰嗦幾句大概就是驅(qū)動(dòng)表是全表掃描不走索引,所以選被驅(qū)動(dòng)表t1可以走索引,不會(huì)全表掃描,減少I(mǎi)O次數(shù),性能高。里面對(duì)大表小表的總結(jié),簡(jiǎn)直是精髓,特意在此再次著重強(qiáng)調(diào):
在決定哪個(gè)表做驅(qū)動(dòng)表的時(shí)候,應(yīng)該是兩個(gè)表按照各自的條件過(guò)濾,過(guò)濾完成之后,計(jì)算參與join的各個(gè)字段的總數(shù)據(jù)量,數(shù)據(jù)量小的那個(gè)表,就是“小表”,應(yīng)該作為驅(qū)動(dòng)表。
按照上面分析,我們先獨(dú)立思考下MySQL會(huì)選擇哪張表作為驅(qū)動(dòng)表呢?
表t1,t2在字段a上都有索引不會(huì)全表掃描,其中t1.a=5條件過(guò)濾后只有一條,很顯然嘛,t1數(shù)據(jù)量少是小表,肯定是驅(qū)動(dòng)表,錯(cuò)不了,再說(shuō)了前面的紅色粗體已經(jīng)強(qiáng)調(diào)了,不會(huì)有錯(cuò)的。
有冇搞錯(cuò)?事實(shí)又被打臉了。還記得在開(kāi)篇我們說(shuō)過(guò)的mysql優(yōu)化器會(huì)對(duì)sql語(yǔ)句進(jìn)行優(yōu)化的嗎?下面我們看下執(zhí)行計(jì)劃與優(yōu)化的sql語(yǔ)句:
格式化后的優(yōu)化SQL如下:
優(yōu)化后兩表t1,t2都走索引,并且都只有一條結(jié)果返回,因此都只會(huì)掃描一行,數(shù)據(jù)量一樣,所以誰(shuí)在前面誰(shuí)就是驅(qū)動(dòng)表,也就是上面sql中表t2。一切都釋然,豁然開(kāi)通!
回頭再仔細(xì)想想,高,實(shí)在是高!仔細(xì)深思之后MySQL優(yōu)化后的句子真讓人猛拍大腿。高明之處在于:
1. 本來(lái)join連接是個(gè)M*N的嵌套循環(huán),優(yōu)化后變成了M+N的判斷,兩表不再嵌套判斷了。
2. 優(yōu)化后,兩表沒(méi)有多大必然聯(lián)系,只需把兩表的結(jié)果集拼接即可,互不干擾。如果mysql未來(lái)可以多線程查詢(xún),豈不十分快哉!
小伙伴們還記得我們?cè)谏弦徽? MySQL索引初探 中編碼類(lèi)型不一致發(fā)生隱式轉(zhuǎn)換時(shí)有時(shí)候走索引,有時(shí)候索引又失效的問(wèn)題嗎?下面我們選取有代表性的一條記錄來(lái)分析:
其中表demo_test總共有640條數(shù)據(jù),demo_test_ass有3條數(shù)據(jù)。顯然經(jīng)過(guò)過(guò)濾條件t.rid1完成后demo_test_ass數(shù)據(jù)量小,應(yīng)該作為驅(qū)動(dòng)表。雖然test.c_utf8mb4 = t.c2兩字段連接中發(fā)生了t.c2字段發(fā)生隱式轉(zhuǎn)換,但是實(shí)際上并不影響被驅(qū)動(dòng)表test上的c_utf8mb4索引。
好了,本章到此結(jié)束,讓我們一起 總結(jié)一下MySQL驅(qū)動(dòng)表與被驅(qū)動(dòng)表的選取原則 :
?? ? 同等條件,優(yōu)先選取有索引的表作為被驅(qū)動(dòng)表。 在此介紹一下什么叫同等條件,比如上面的②中的語(yǔ)句。 兩表沒(méi)有其他額外的過(guò)濾條件,因此選關(guān)聯(lián)字段有索引的t1作為被驅(qū)動(dòng)表。但是如果加了條件(and t1.id=3),此時(shí)t1數(shù)據(jù)量少,就選取了t2作為被驅(qū)動(dòng)表。
??? MySQL選擇驅(qū)動(dòng)表與被驅(qū)動(dòng)表是基于優(yōu)化器優(yōu)化后的,小表是驅(qū)動(dòng)表,大表是被驅(qū)動(dòng)表。 基于優(yōu)化器優(yōu)化后開(kāi)篇的 博文A與B 結(jié)論成立。
當(dāng)然這都是我一家之言,并不是官方結(jié)論,目前暫未找到官方確切對(duì)于驅(qū)動(dòng)表與被驅(qū)動(dòng)表的解釋?zhuān)?qǐng)大家踴躍拍磚!
網(wǎng)站題目:mysql的驅(qū)動(dòng)怎么連接,怎樣下載mysql驅(qū)動(dòng)
當(dāng)前鏈接:http://chinadenli.net/article14/heisde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、面包屑導(dǎo)航、App開(kāi)發(fā)、虛擬主機(jī)、網(wǎng)站制作、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)