Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。
給你java學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

一、JDBC連接數(shù)據(jù)庫步驟(以MYSQL為例)
1、加載JDBC驅(qū)動(dòng)程序:
通過Class類的forName方法實(shí)現(xiàn),并將驅(qū)動(dòng)地址放進(jìn)去
成功加載后,會(huì)將Driver類的實(shí)例注冊到DriverManager類中。
2、提供JDBC連接的URL 、創(chuàng)建數(shù)據(jù)庫的連接
?要連接數(shù)據(jù)庫,需要向java.sql.DriverManager請求并獲得Connection對象,
該對象就代表一個(gè)數(shù)據(jù)庫的連接。
?使用DriverManager的getConnectin()方法傳入指定的欲連接的數(shù)據(jù)庫的路徑、數(shù) 據(jù)庫的用戶名和密碼。
Connection con=DriverManager.getConnection(url , username , password);
&&&:"jdbc:mysql://localhost/test?user=root&password=123&useUnicode=true&characterEncoding=utf-8”;
3、創(chuàng)建一個(gè)Statement
?要執(zhí)行SQL語句,必須獲得java.sql.Statement實(shí)例
?執(zhí)行靜態(tài)SQL語句。通常通過Statement實(shí)例實(shí)現(xiàn)。
?執(zhí)行動(dòng)態(tài)SQL語句。通常通過PreparedStatement實(shí)例實(shí)現(xiàn)。
String sql = “”;
Statement st = con.createStatement() ;
PreparedStatement pst = con.prepareStatement(sql) ;
4、執(zhí)行SQL語句
Statement接口提供了executeQuery、executeUpdate、execute三種方法
executeQuery:執(zhí)行select語句,返回ResultSet結(jié)果集
ResultSet rst = pst.executeQuery();
? executeUpdate:執(zhí)行insert、update、delete語句
pst.executeUpdate();

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
5、關(guān)閉JDBC對象
操作完成以后要把所有使用的JDBC對象全都關(guān)閉,以釋放JDBC資源。
二、數(shù)據(jù)庫連接池
數(shù)據(jù)庫連接池的優(yōu)點(diǎn)運(yùn)行原理:
在我們不使用數(shù)據(jù)庫連接池的時(shí)候,每次訪問數(shù)據(jù)庫都需要?jiǎng)?chuàng)建連接,
使用完成之后需要釋放關(guān)閉連接,而這樣是很耗費(fèi)資源的。當(dāng)我們使用
數(shù)據(jù)庫連接池的時(shí)候,在tomcat啟動(dòng)的時(shí)候就創(chuàng)建了指定數(shù)量的連接,
之后當(dāng)我們程序使用的時(shí)候就直接從連接池里面取,而不需要?jiǎng)?chuàng)建,同理,
當(dāng)我們使用完的時(shí)候也不需要關(guān)閉連接,而是將連接返回到連接池中,供
其他請求繼續(xù)使用。
DBCP:比較穩(wěn)定。
C3P0: 性能比較高。
三、mysql的數(shù)據(jù)庫導(dǎo)入導(dǎo)出
配置:
首先找到mysql的安裝目錄,進(jìn)入bin目錄下復(fù)制路徑
將mysql的bin目錄粘貼在計(jì)算機(jī)環(huán)境變量的path中
授權(quán):
登錄mysql
將某張表的某個(gè)權(quán)限賦給某個(gè)用戶
grant [select,insert,update,delete,create,drop] on [databaseName].[tableName] to [userName]@[userIP] identified by [‘連接口令’]
grant select,insert,update,delete,create,drop on oa_ssh.user to root@[IP] identified by 'root';
將所有庫的所有權(quán)限賦給某個(gè)用戶
grant all privileges on *.* to [userName]@[userIp] identified by [‘連接口令’]
grant all privileges on *.* to root@[IP] identified by ‘root';
將所有庫的所有權(quán)限賦給所有用戶
grant all privileges on *.* to root@'%' identified by ‘root’;
導(dǎo)出本地?cái)?shù)據(jù)庫:
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 > 磁盤:導(dǎo)出的文件名(加后綴)
遠(yuǎn)程導(dǎo)出數(shù)據(jù)庫:
mysqldump -h IP -u 用戶名 -p 數(shù)據(jù)庫名稱 >導(dǎo)出的文件名(加后綴)
遠(yuǎn)程導(dǎo)出數(shù)據(jù)表:
mysqldump -u root -p -d --add-drop-table 數(shù)據(jù)庫名稱 > 導(dǎo)出文件
名(加后綴)
導(dǎo)入數(shù)據(jù):
mysql -u root -p登錄成功后 ==》 source 磁盤:導(dǎo)入的文件名(加后綴)
四、jdbc分段批量提交的時(shí)候出現(xiàn)異常怎么處理?
通過Map來解決性能問題。首先在分段批量提交的時(shí)候,我們不采用事務(wù),這樣就保證了合法的數(shù)據(jù)就自動(dòng)提交,不合法的數(shù)據(jù)就自己自動(dòng)進(jìn)行回滾,為了避免不合法數(shù)據(jù)影響后續(xù)合法數(shù)據(jù)的提交,采用定義業(yè)務(wù)規(guī)則字典表,實(shí)現(xiàn)對數(shù)據(jù)的驗(yàn)證,將不合法的數(shù)據(jù)記錄下來,供用戶進(jìn)行后續(xù)處理,而合法的數(shù)據(jù)就全部提交。
五、jdbc批量處理數(shù)據(jù)
批量處理數(shù)據(jù):(代碼優(yōu)化:提高程序執(zhí)行性能)
降低了java程序代碼(客戶端)和數(shù)據(jù)庫之間的 網(wǎng)絡(luò)通信的次數(shù)。
在jdbc中進(jìn)行批量插入的核心API為 addBatch,executeBatch
大數(shù)據(jù)量的插入問題:(jdbc,hibernate,ibatis)
1.每次只插入一條和數(shù)據(jù)庫交互多次(很耗時(shí)間)
2.批量插入和數(shù)據(jù)庫只交互一次(內(nèi)存溢出)
3.分段批量插入(推薦)
jdbc批量處理數(shù)據(jù)是通過PreparedStatement對象的 addbatch(), executebatch() clearbatch()進(jìn)行和數(shù)據(jù)庫的交互。通常我們使用分段批量處理的方式 這樣可以提高程序的性能 ,防止內(nèi)存溢出。

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
1.每個(gè)sql語句都和數(shù)據(jù)庫交互一次(非批量操作)
2.只和數(shù)據(jù)庫交互一次(批量操作)(內(nèi)存溢出)
當(dāng)數(shù)據(jù)達(dá)到一定額度的時(shí)候就和數(shù)據(jù)庫進(jìn)行交互,分多次進(jìn)行(分段批量操作)
(500或者1000)
pst.addBatch();
if (i > 0 && i%1000 == 0) {
pst.executeBatch();
pst.clearBatch();
}


