JDBC鏈接數(shù)據(jù)庫(kù)的幾個(gè)步驟
此文列出了JDBC鏈接數(shù)據(jù)庫(kù)的4個(gè)步驟,供大家參考下:
JDBC:JAVA訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的解決方案。
幾個(gè)步驟:1.加載驅(qū)動(dòng)類(lèi);
2.與數(shù)據(jù)庫(kù)建立連接;
3.執(zhí)行SQL語(yǔ)句
4.處理結(jié)果集
5.關(guān)閉連接
1. 第一步:加載驅(qū)動(dòng)類(lèi):
需要注意:不同的數(shù)據(jù)庫(kù),參照的字符串不同,ORACLE的連接為:Class.forName("oracle.jdbc.driver.OracleDriver"); 這一步執(zhí)行后,程序可能會(huì)拋出: ClassNotFoundException,原因一般有:
a. 數(shù)據(jù)庫(kù)的驅(qū)動(dòng)jar包沒(méi)有導(dǎo)入到環(huán)境變量中
b. Class.forName中的字符串拼寫(xiě)不正確
2. 第二步:通過(guò)DriverManager與數(shù)據(jù)庫(kù)建立連接:
其靜態(tài)方法getConnection用來(lái)獲取連接。通常需要傳入三個(gè)參數(shù)
參數(shù)1:數(shù)據(jù)庫(kù)的地址及端口(不同數(shù)據(jù)庫(kù)字符串內(nèi)容不相同)
oracle的地址:jdbc:oracle:thin:@host:port:sid
參數(shù)2:數(shù)據(jù)庫(kù)的用戶(hù)名
參數(shù)3:數(shù)據(jù)庫(kù)對(duì)應(yīng)用戶(hù)名的密碼
Connection conn = DriverManager.getConnect
("jdbc:oracle:thin:@host:port:oracle","user", "psd");
3.第三步:java.sql.Statement 執(zhí)行SQL語(yǔ)句并獲取結(jié)果
Statement state = conn.createStatement();
String sql="/*這里面是SQL語(yǔ)句*/ ";
Statement針對(duì)不同的SQL語(yǔ)句提供了不同的執(zhí)行方法:
ResultSet executeQuery(String sql)
* 該方法專(zhuān)門(mén)用來(lái)執(zhí)行DQL語(yǔ)句,返回的ResultSet表示查詢(xún)出來(lái)的結(jié)果集
int executeUpdate(String sql)
* 該方法專(zhuān)門(mén)用來(lái)執(zhí)行DML語(yǔ)句,返回的數(shù)字表示執(zhí)行該語(yǔ)句影響了表中多少條數(shù)據(jù)
boolean execute(String sql)
* 該方法理論上什么語(yǔ)句都可以執(zhí)行了,但是由于DQL,DML都有專(zhuān)門(mén)的方法執(zhí)行了,所以該方法通常用來(lái)執(zhí)行DDL語(yǔ)句
ResultSet rs = state.executeQuery(sql);
輸出查詢(xún)結(jié)果:while(rs.next())
{ 輸出語(yǔ)句 }
ResultSet提供用于遍歷結(jié)果集的方法:
boolean next()
*該方法有兩個(gè)作用,首先當(dāng)我們查詢(xún)出結(jié)果集后rs的指針指向第一條數(shù)據(jù)之上,所以我們需要先調(diào)用一次next()使其指針移動(dòng)到第一條數(shù)據(jù)上并表示該條數(shù)據(jù)。
第二個(gè)作用是看返回值,若指針向下移動(dòng)后,發(fā)現(xiàn)沒(méi)有數(shù)據(jù)了,會(huì)返回false,若有則返回true,所以我們只有在該方法返回true的情況下才獲取當(dāng)前記錄的各個(gè)字段對(duì)應(yīng)的值RS還提供了若干個(gè)getXXX(String fieldName)方法:
*這一系列方法是用來(lái)獲取RS表示的當(dāng)前記錄中給定字段對(duì)應(yīng)的值。不同的字段由于類(lèi)型不同需要調(diào)用相對(duì)應(yīng)的方法
第4步:關(guān)閉連接,寫(xiě)在finally塊中
finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
將數(shù)據(jù)庫(kù)的連接放在一個(gè)工具類(lèi)里面,達(dá)到重用的效果
由于訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)是經(jīng)常要用到的操作,所以在工程中,通常編寫(xiě)一個(gè)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的工具類(lèi),此后所有訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的操作,都從工具類(lèi)中獲取連接,實(shí)現(xiàn)工具類(lèi)的兩種方式:
1.直接把數(shù)據(jù)配置寫(xiě)在工具類(lèi)DBUtil中
2.把數(shù)據(jù)庫(kù)配置寫(xiě)在一個(gè)properties屬性文件里,工具類(lèi)讀入屬性文件,逐行獲取數(shù)據(jù)庫(kù)參數(shù)(一般使用第二種)
若使用第一種方法,在后期需要修改所使用的數(shù)據(jù)庫(kù)或者說(shuō)修改host、端口、數(shù)據(jù)庫(kù)連接名、密碼等等時(shí),就需要修改源代碼里面的數(shù)據(jù),不便于系統(tǒng)的維護(hù),故一般使用第二種方法數(shù)據(jù)庫(kù)連接工具類(lèi)DBUtil.java以及連接池的主要步驟:
Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));
//根據(jù)配置項(xiàng)初始化
String driverName = prop.getProperty("driverName");
String url = prop.getProperty("url");
String username = prop.getProperty("username");
String password = prop.getProperty("password");
//最大連接數(shù)
int maxActive = Integer.parseInt(prop.getProperty("maxActive"));
//最大等待時(shí)間
int maxWait = Integer.parseInt(prop.getProperty("maxWait"));
//初始化連接池
cp = new BasicDataSource();
//相當(dāng)與是Class.forName()中的內(nèi)容
cp.setDriverClassName(driverName);
cp.setUrl(url);
cp.setUsername(username);
cp.setPassword(password);
cp.setMaxActive(maxActive);
cp.setMaxWait(maxWait);
public static Connection getConnection() throws Exception{
return cp.getConnection();
}
以上內(nèi)容是針對(duì)JDBC鏈接數(shù)據(jù)庫(kù)的步驟做講解,希望能夠幫助到大家!- JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql
- java jdbc連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查操作
- JSP中使用JDBC訪(fǎng)問(wèn)SQL Server 2008數(shù)據(jù)庫(kù)示例
- JSP使用JDBC連接MYSQL數(shù)據(jù)庫(kù)的方法
- JDBC數(shù)據(jù)庫(kù)的使用操作總結(jié)
- JDBC連接Oracle數(shù)據(jù)庫(kù)常見(jiàn)問(wèn)題及解決方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- jdbc連接sqlserver數(shù)據(jù)庫(kù)示例
- jsp+servlet+jdbc實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查
- Java使用JDBC連接postgresql數(shù)據(jù)庫(kù)示例
相關(guān)文章
SpringCloud筆記(Hoxton)Netflix之Ribbon負(fù)載均衡示例代碼
這篇文章主要介紹了SpringCloud筆記HoxtonNetflix之Ribbon負(fù)載均衡,Ribbon是管理HTTP和TCP服務(wù)客戶(hù)端的負(fù)載均衡器,Ribbon具有一系列帶有名稱(chēng)的客戶(hù)端(Named?Client),對(duì)SpringCloud?Ribbon負(fù)載均衡相關(guān)知識(shí)感興趣的朋友一起看看吧2022-06-06
基于idea把springboot項(xiàng)目部署到docker
這篇文章主要介紹了基于idea把springboot項(xiàng)目部署到docker,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
ArrayList的自動(dòng)擴(kuò)充機(jī)制實(shí)例解析
本文主要介紹了ArrayList的自動(dòng)擴(kuò)充機(jī)制,由一個(gè)題目切入主題,逐步向大家展示了ArrayList的相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
Springboot中路徑參數(shù)帶 (%2F)的問(wèn)題徹底解決方案
這篇文章主要介紹了徹底解決Springboot中路徑參數(shù)帶(%2F)的問(wèn)題,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Java空格替換逗號(hào)的實(shí)現(xiàn)示例
在編程中,我們經(jīng)常需要對(duì)字符串進(jìn)行各種處理,其中一個(gè)常見(jiàn)的需求是將字符串中的逗號(hào)替換為空格,本文主要介紹了Java空格替換逗號(hào)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

