JDBC的幾個步驟


JDBC:JAVA訪問數據庫的解決方案。
幾個步驟:1.加載驅動類;
     2.與數據庫建立連接;
           3.執行SQL語句
       4.處理結果集
     5.關閉連接
1. 第一步:加載驅動類:
  需要注意:不同的數據庫,參照的字符串不同,ORACLE的連接為:Class.forName("oracle.jdbc.driver.OracleDriver"); 這一步執行后,程序可能會拋出: ClassNotFoundException,原因一般有:
a. 數據庫的驅動jar包沒有導入到環境變量中
b. Class.forName中的字符串拼寫不正確

2. 第二步:通過DriverManager與數據庫建立連接:
其靜態方法getConnection用來獲取連接。通常需要傳入三個參數
參數1:數據庫的地址及端口(不同數據庫字符串內容不相同)
oracle的地址:jdbc:oracle:thin:@host:port:sid
參數2:數據庫的用戶名
參數3:數據庫對應用戶名的密碼
Connection conn = DriverManager.getConnect
("jdbc:oracle:thin:@host:port:oracle","user", "psd");

3.第三步:java.sql.Statement 執行SQL語句並獲取結果
Statement state = conn.createStatement();
String sql="/*這里面是SQL語句*/  ";
Statement針對不同的SQL語句提供了不同的執行方法:
ResultSet executeQuery(String sql)
  * 該方法專門用來執行DQL語句,返回的ResultSet表示查詢出來的結果集
int executeUpdate(String sql)
  * 該方法專門用來執行DML語句,返回的數字表示執行該語句影響了表中多少條數據
boolean execute(String sql)
  * 該方法理論上什么語句都可以執行了,但是由於DQL,DML都有專門的方法執行了,所以該方法通常用來執行DDL語句
ResultSet rs = state.executeQuery(sql);
輸出查詢結果:while(rs.next())

        { 輸出語句 }
ResultSet提供用於遍歷結果集的方法:
boolean next()
  *該方法有兩個作用,首先當我們查詢出結果集后rs的指針指向第一條數據之上,所以我們需要先調用一次next()使其指針移動到第一條數據上並表示該條數據。 第二個作用是看返回值,若指針向下移動后,發現沒有數據了,會返回false,若有則返回true,所以我們只有在該方法返回true的情況下才獲取當前記錄的各個字段對應的值
RS還提供了若干個getXXX(String fieldName)方法:
  *這一系列方法是用來獲取RS表示的當前記錄中給定字段對應的值。不同的字段由於類型不同需要調用相對應的方法

第4步:關閉連接,寫在finally塊中
finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

將數據庫的連接放在一個工具類里面,達到重用的效果
由於訪問數據庫是經常要用到的操作,所以在工程中,通常編寫一個訪問數據庫的工具類,此后所有訪問數據庫的操作,都從工具類中獲取連接,實現工具類的兩種方式:
1.直接把數據配置寫在工具類DBUtil中
2.把數據庫配置寫在一個properties屬性文件里,工具類讀入屬性文件,逐行獲取數據庫參數(一般使用第二種)
若使用第一種方法,在后期需要修改所使用的數據庫或者說修改host、端口、數據庫連接名、密碼等等時,就需要修改源代碼里面的數據,不便於系統的維護,故一般使用第二種方法
數據庫連接工具類DBUtil.java以及連接池的主要步驟:
Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));
//根據配置項初始化
String driverName = prop.getProperty("driverName");
String url = prop.getProperty("url");
String username = prop.getProperty("username");
String password = prop.getProperty("password");
//最大連接數
int maxActive = Integer.parseInt(prop.getProperty("maxActive"));
//最大等待時間
int maxWait = Integer.parseInt(prop.getProperty("maxWait"));
//初始化連接池
cp = new BasicDataSource();
//相當與是Class.forName()中的內容
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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM