JDBC(Java Database Connectivity,簡稱JDBC)—客戶端程序如何來訪問數據庫
前言:
主流架構:
1、BS架構(Browser and Server) 瀏覽器服務器架構
—>web、javaweb、phpweb
2、CS架構(Client and Server) 客戶端服務器架構
—>QQ、微信
簡言之就是用java
程序去訪問數據庫
正文:
JDBC的連接步驟:
加載驅動
—>建立連接
—>執行語句
—>得到結果集
1、加載驅動
加載驅動,首先是先把驅動jar包導入
<!--mysql驅動-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
編寫測試用例;
//初始化驅動
public void init(){
try {
//加載mysql驅動
Class.forName("com.mysql.cj.jdbc.Driver");
//建立連接 參數解釋:第一個參數是數據庫鏈接地址(不同數據庫會有不同的連接地址,由數據庫廠商提供),第二個參數是用戶名,第三個參數是密碼
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true", "root", "123");
//獲取數據庫預處理對象preparedStatement 並編寫sql語句
PreparedStatement preparedStatement = conn.prepareStatement("select * from user");
//執行查詢語句
ResultSet resultSet = preparedStatement.executeQuery();
//循環讀取查詢結果集(因爲查詢的結果可能不止一條)
while(resultSet.next()){
//打印查詢出來的第一個字段
System.out.println(resultSet.getString(1));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//編寫主函數測試
public static void main(String[] args) {
new MyJdbc().init();
}
要知道,我們每訪問一次數據庫,其實都是與數據庫建立了一次會話,建立會話之後,你所有的增刪改查,都是在本次會話中進行的,假如說,會話終止,或者在建立會話的時候建立失敗,那麼你所有的增刪改查的動作都無效
需要注意的是,如果你執行的是查詢語句,纔會有結果集,如果是增加更新刪除,只會有執行的條數,返回類型是型
優化:
再看看以上代碼,其實有很大一部分咱們沒有考慮到,所以他現在是爛代碼,怎麼把它變成好代碼,降低耦合。
所謂降低耦合就是降低程序之間的依賴關係,比如修改數據庫參數的時候,咱們不用改動源碼,直接在配置文件上面修改就可以運行(因爲改了源碼的話,還需要重新編譯,編譯之後的文件是.class的字節碼文件,不能直接修改參數,所以我們需要藉助配置文件的幫助)
配置文件:
java中配置文件主流的分兩種,一種是properties,一種是xml,這裏我使用的是properties。
編寫一個db.properties,存放到咱們的resource資源文件夾根目錄下(裏面一定不要爲了格式而多大空格,空格會算入內容,以鍵值對的形式編寫)
#降低程序代碼間的依賴關係,使用配置文件
jdbc.url=jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123
接下來就是讀取配置文件讓咱們的代碼依賴減少:
//讀取配置文件
Properties properties = new Properties();
properties.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
conn = DriverManager.getConnection(properties.getProperty("jdbc.url"),properties.getProperty("jdbc.username") ,properties.getProperty("jdbc.password") );
這樣幾遍改動數據庫密碼賬號,我都不需要改動源碼文件,只需要修改配置文件就可以了。
注意事項:
在一次會話結束之後,一定要注意,打開的資源要關閉,咱們jvm的內存和mysql的連接數是有限的,不能把資源一直開着,執行結束以後就關閉資源,養成良好的代碼風格
源碼展示:
MyJdbc.java
package cn.tfs.jdbc;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
public class MyJdbc {
private Connection conn;
private PreparedStatement preparedStatement;
private ResultSet resultSet;
//初始化驅動
public void init(){
try {
//加載mysql驅動
Class.forName("com.mysql.cj.jdbc.Driver");
//建立連接 參數解釋:第一個參數是數據庫鏈接地址(不同數據庫會有不同的連接地址,由數據庫廠商提供),第二個參數是用戶名,第三個參數是密碼
//讀取配置文件
Properties properties = new Properties();
properties.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
conn = DriverManager.getConnection(properties.getProperty("jdbc.url"),properties.getProperty("jdbc.username") ,properties.getProperty("jdbc.password") );
//獲取數據庫預處理對象preparedStatement 並編寫sql語句
preparedStatement = conn.prepareStatement("select * from user");
//執行查詢語句並將查詢結果拿給結果集
resultSet = preparedStatement.executeQuery();
//循環讀取查詢結果集(因爲查詢的結果可能不止一條)
while(resultSet.next()){
//打印查詢出來的第一個字段
System.out.print(resultSet.getString("id")+"\t");
System.out.print(resultSet.getString("name")+"\t");
System.out.print(resultSet.getString("age")+"\t");
System.out.println();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//釋放資源 關閉連接 (必要的)
try {
resultSet.close();
preparedStatement.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public String query(){
return "";
}
public int delete(){
return 0;
}
public int upDate(){
return 0;
}
public int add(){
return 0;
}
//編寫主函數測試
public static void main(String[] args) {
new MyJdbc().init();
}
}
db.properties
#降低程序代碼間的依賴關係,使用配置文件
jdbc.url=jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123
需要幫助的同學歡迎留言或者聯繫郵箱:[email protected]