JDBC的基本概念及簡單使用

JDBC

概念

1.Java + DataBase + Connectivity:Java連接數據庫的技術。
2.是一套由Java代碼編寫開發數據庫應用程序的標準(接口)。
3.對程序員而言,JDBC就是一套訪問數據庫的API,能夠實現對數據庫的增刪改查。
4.對於數據庫廠商而言,JDBC是一套底層的實現接口的模型。

工作原理

1.Java application:應用程序
2.JDBC API:Java程序與各種不同的數據庫交互的標準接口。
1)Connection
2)Statement
3)ResultSet
3.JDBC Driver Manager:驅動程序管理器

JDBC API

1.DriverManager類:裝載驅動程序,併爲創建的數據庫連接提供的文件。
2.Connection接口:負責連接數據庫。
3.Statement接口:由Connection產生,負責執行SQL語句。
4.ResultSet接口:保存和處理Statement處理後的結果(查詢)
5.PreparedStatement接口:屬於Statement接口的子接口,負責執行SQL語句,性能和安全性比較高,可讀性維護性好。

JDBC操作步驟

1.加載驅動:calss.forName();將給定的jdbc驅動類加載到jvm;
2.建立數據庫連接:url數據庫服務地址(協議名稱+數據庫服務器IP:端口號/數據庫名稱),user,password
3.發送SQL語句
4.執行SQL語句
5.返回處理結果
6.釋放連接

常見包

1.PO:持久化對象,一個PO就是數據庫中的一條記錄
2.VO:視圖層對象,一個VO對象對應一個界面的所有數據
3.POJO:簡單的Java對象,只有私有屬性及公開的get、set方法,只能裝載對象。
4.DTO:數據傳輸對象,只傳需要的數據字段。

非託管資源

需要手動關閉的資源.close();

代碼實例

1.初始硬編碼
package com.hpe.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/*
 * 存在的問題:
 * 1.通過配置文件加載數據:違背開閉原則
 * 2.頻繁打開關閉連接:數據庫連接池(c3p0,dbcp)
 */
public class TestJDBC {
	public static void main(String[] args) {
		Connection connection = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 1.加載驅動
			Class.forName("com.mysql.jdbc.Driver");
			// 2.創建連接
			String url = "jdbc:mysql://localhost:3306/students";
			String user = "root";
			String password = "1234";
			connection = DriverManager.getConnection(url, user, password);
			// 3.編寫SQL語句
			//String stuId = " '' OR 1=1 --";//存在SQL注入攻擊危險
			int stuId = 1;
			//String sql = "SELECT stuId,stuName FROM student WHERE stuId="+stuId;
			String sql = "SELECT stuId,stuName,stuAge,stuAddress FROM student WHERE stuId=?";
			// 將編寫好的SQL語句發送給數據庫服務器執行SQL語句
			//Statement statement = connection.createStatement();
			//ResultSet resultSet = statement.executeQuery(sql);
			//System.out.println(resultSet.next());
			// 4.預編譯對象,將編寫好的SQL語句發送給數據庫服務器
			ps = connection.prepareStatement(sql);
			// 5.填充佔位符,索引從1開始
			ps.setInt(1, stuId);
			// 6.執行SQL語句,通過預編譯對象調用executeQuery方法執行SQL語句
			rs = ps.executeQuery();
			// 7.判斷結果集中有沒有數據
			if(rs.next()) {
				// 8.獲取結果集中的數據
				// 獲取具體數據getXXX(String columLable)或者getInt(int columnIndex)
				int id = rs.getInt(1);
				String stuName = rs.getString("stuName");
				int age = rs.getInt("stuAge");
				String address = rs.getString("stuAddress");
				System.out.println("編號:"+id+"姓名:"+stuName+"地址:"+address+"年齡:"+age);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 9.關閉連接:最早打開,最晚關閉
			try {
				rs.close();
				ps.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

2.修正問題後的編碼

1)先寫連接數據庫的必要參數,單獨再src下新建的File類型文件,名爲db.properties,代碼如下:

jdbc.url=jdbc:mysql://localhost:3306/students?characterEncoding=utf-8
jdbc.user=root
jdbc.password=1234
jdbc.driver=com.mysql.jdbc.Driver

注意上面代碼變量與值之間不能加空格、不能加引號。
2)編寫獲取連接,釋放連接工具類:

package com.hpe.util;
/**
 * 類描述:數據庫操作工具類
 * 作者: chuliju 
 * 創建日期:2020年3月23日
 * 修改人:
 * 修改日期:
 * 修改內容:
 * 版本號: 1.0.0
 */

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
	// 數據庫的url地址
	private static String url;
	// 用戶名
	private static String user;
	// 密碼
	private static String password;
	// 驅動
	private static String driver;
	// 加載驅動,只執行一次
	static {
		// 讀取配置文件
		InputStream is = DBUtil.class.getResourceAsStream("/db.properties");
		// 從輸入流中加載數據到集合中
		Properties properties = new Properties();
		try {
			properties.load(is);
			// 讀取用戶名、密碼、url地址,驅動
			url = properties.getProperty("jdbc.url");
			user = properties.getProperty("jdbc.user");
			password = properties.getProperty("jdbc.password");
			driver = properties.getProperty("jdbc.driver");
			// 加載驅動
			Class.forName(driver);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 方法描述:獲取連接
	 * @return 連接對象
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	/**
	 * 方法描述:釋放資源
	 * @param rs 結果集
	 * @param ps 預編譯對象
	 * @param conn 連接對象
	 */
	public static void releaseDB(ResultSet rs,PreparedStatement ps,
			Connection conn) {
		try {
			if(rs != null) {
				rs.close();
			}
			if(ps != null) {
				ps.close();
			}
			if(conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章