掌握數(shù)據(jù)庫開發(fā)是java工程師的基本要求慨畸,而JDBC是數(shù)據(jù)庫開發(fā)的基礎(chǔ)占贫,通過JDBC可以實現(xiàn)Java程序?qū)蠖藬?shù)據(jù)庫的訪問。
雖然現(xiàn)在大多使用MyBatis先口,但明白JDBC的工作流程,對初學(xué)者來說還是非常必要的瞳收,學(xué)會之后能夠更快速的上手MyBatis碉京。下面我就介紹一下JDBC的基礎(chǔ)知識。注意:學(xué)習(xí)JDBC需要有Java基礎(chǔ)以及數(shù)據(jù)庫基礎(chǔ)螟深。
總的來說谐宙,使用JDBC的流程大概分為:
1. 裝載驅(qū)動程序
2. 建立與數(shù)據(jù)庫的連接
3. 執(zhí)行SQL語句
4. 獲取執(zhí)行結(jié)果
5. 清理資源
接下來逐步詳細(xì)說明:
1.裝載驅(qū)動程序
說到裝載驅(qū)動程序,就不得不說JDBC中的Driver類界弧、DriverManager類凡蜻。Driver類是一個接口,定義了各個驅(qū)動程序都必須實現(xiàn)的功能垢箕,是驅(qū)動程序的抽象划栓。而DriverManager類是Driver類的管理類。
想要裝載驅(qū)動程序条获,我們就要用Class.forName(DriverName)向DriverManager注冊驅(qū)動程序忠荞。DriverName就是響應(yīng)數(shù)據(jù)庫驅(qū)動的名稱。推薦用maven管理驅(qū)動程序,免去到官網(wǎng)下載的麻煩委煤。例如加載mysql驅(qū)動:
Class.forName(“com.mysql.jdbc.Driver");
2.建立與數(shù)據(jù)庫的連接
想要建立與數(shù)據(jù)庫的連接堂油,就要通過DriverManager類中的getConnection()方法調(diào)用驅(qū)動程序。
getConnection()方法返回的是一個JDBC Connection對象碧绞。Connection對象其實代表的是Java應(yīng)用程序?qū)蠖藬?shù)據(jù)庫的一條物理鏈接府框。基于這條鏈接讥邻,我們可以執(zhí)行SQL語句迫靖。Connection對象常用的方法就是createStatement()方法,這個方法用來創(chuàng)建Statement對象计维。
調(diào)用getConnection()方法需要傳入三個參數(shù)袜香,分別是URL、UserName鲫惶、PassWord蜈首。注意:使用getConnection()可能會拋出異常,所以這里要捕獲異常欠母。
例如:
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/數(shù)據(jù)庫名","root","root");
URL為相應(yīng)數(shù)據(jù)庫的地址欢策,包含協(xié)議、子協(xié)議赏淌、子名稱三部分踩寇,其中自名稱又包括主機、端口六水、數(shù)據(jù)庫名等俺孙。例如:“jdbc:mysql://127.0.0.1:3306/數(shù)據(jù)庫名”。
UserName則是你部署相應(yīng)數(shù)據(jù)庫時設(shè)置的用戶名掷贾,一般都是“root”睛榄。
PassWord就是你部署相應(yīng)數(shù)據(jù)庫時設(shè)置的密碼。
3.執(zhí)行SQL語句
要執(zhí)行SQL語句想帅,首先要用Connection連接創(chuàng)建Statement對象场靴。Statement對象,說到底就是一個SQL容器港准,這個容器可以承載一些SQL語句旨剥。
然后調(diào)用executeQuery()方法或execute()方法執(zhí)行SQL語句。其中浅缸,executeQuery()方法可執(zhí)行查詢操作轨帜,execute()方法更新、添加衩椒、刪除等操作阵谚。執(zhí)行后返回int值或ResultSet對象蚕礼。ResultSet是數(shù)據(jù)庫結(jié)果集的數(shù)據(jù)表。
例如:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select name from user");
4.獲取執(zhí)行結(jié)果
若返回的是ResultSet對象梢什,則要用循環(huán)取出ResultSet對象中的數(shù)據(jù)奠蹬。因為ResultSet對象具有指向其當(dāng)前數(shù)據(jù)行的指針。最初嗡午,指針被置于第一行之前囤躁。next方法可以將指針移動到下一行;使用該方法是會true或false(若沒有下一行則返回false)荔睹,所以可以在while循環(huán)中使用它迭代結(jié)果集狸演。(ResultSet對象的其他常用方法自行搜索其他資料,這里就不贅述了僻他。)
例如:
while(rs.next()){
System.out.println(rs.getString("name"));
}
5.清理資源
在finally{ }方法中清理資源宵距。
例如:
finally{
try{
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
}
catch(SQLException){
//ignore
}
}