Java的JDBC程式設計_我的總結

2020-08-14 19:09:36

JDBC

JDBC,即Java Database Connectivity,java數據庫連線。
是一種用於執行SQL語句的Java API,它是 Java中的數據庫連線規範。

JDBC 工作原理

JDBC存取數據庫層次結構:
在这里插入图片描述
JDBC優勢:

  1. Java語言存取數據庫操作完全面向抽象介面程式設計
  2. 開發數據庫應用不用限定在特定數據庫廠商的API
  3. 程式的可移植性大大增強

JDBC使用

JDBC開發案例:

  • 建立數據庫連線
// 載入JDBC驅動程式:反射,這樣呼叫初始化com.mysql.jdbc.Driver類,
// 即將該類載入到JVM方法 區,並執行該類的靜態方法塊、靜態屬性。
Class.forName("com.mysql.jdbc.Driver");

// 建立數據庫連線
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test? user=root&password=root&useUnicode=true&characterEncoding=UTF-8");
//MySQL數據連線的URL參數格式如下: 
jdbc:mysql://伺服器地址:/數據庫名?參數名=參數值
  • 建立操作命令(Statement)
Statement statement = connection.createStatement();
  • 執行SQL語句
ResultSet resultSet= statement.executeQuery(
"select id, sn, name, qq_mail, classes_id from student");
  • 處理結果集
	while (resultSet.next()) {
        int id = resultSet.getInt("id");
        String sn = resultSet.getString("sn"); 
        String name = resultSet.getString("name");
        int classesId = resultSet.getInt("classes_id"); 
        System.out.println(String.format("Student: id=%d, sn=%s, name=%s, classesId=%s", id, sn, name, classesId));
    }
  • 釋放資源(關閉結果集,命令,連線)
//關閉結果集
if (resultSet!= null) { 
    try {
        resultSet.close();
    } catch (SQLException e) { 
    	e.printStackTrace();
    }
}
    
//關閉命令
if (statement != null) { 
    try {
        statement.close();
    } catch (SQLException e) { 
    	e.printStackTrace();
    }
}

// 關閉連線命令
if (connection!= null) { 
    try {
        connection.close();
    } catch (SQLException e) { 
    	e.printStackTrace();
    }
}

JDBC使用步驟總結:

  1. 建立數據庫連線Connection
  2. 建立操作命令Statement
  3. 使用操作命令來執行SQL
  4. 處理結果集ResultSet
  5. 釋放資源

JDBC API

數據庫連線Connection:

Connection介面實現類由數據庫提供,獲取Connection物件通常有兩種方式:

  • 通過DriverManager(驅動管理類)的靜態方法獲取:
// 載入JDBC驅動程式
Class.forName("com.mysql.jdbc.Driver");

// 建立數據庫連線
Connection connection = DriverManager.getConnection(url);
  • 通過DataSource(數據源)物件獲取。
DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test"); 
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("root"); 
Connection connection = ds.getConnection();

以上兩種方式的區別是:

  1. DriverManager類來獲取的Connection連線,是無法重複利用的,每次使用完以後釋放資源時,通過 connection.close() 都是關閉物理連線。
  2. DataSource提供連線池的支援。連線池在初始化時將建立一定數量的數據庫連線,這些連線 是可以複用的,每次使用完數據庫連線,釋放資源呼叫connection.close()都是將 Conncetion連線物件回收。

Statement物件

Statement 物件主要是將SQL語句發送到數據庫中。
在这里插入图片描述
PreparedStatement物件:
在这里插入图片描述
兩種執行SQL的方法:

  • executeQuery() 方法執行後返回單個結果集的,通常用於select語句。
  • executeUpdate()方法返回值是一個整數,指示受影響的行數,通常用於update、insert、delete 語句。

ResultSet物件

ResultSet物件它被稱爲結果集,它代表符合SQL語句條件的所有行,並且它通過一套getXXX方法提供 了對這些行中數據的存取。

ResultSet裡的數據一行一行排列,每行有多個欄位,並且有一個記錄指針,指針所指的數據行叫做當前數據行,我們只能來操作當前的數據行。我們如果想要取得某一條記錄,就要使用ResultSet的next() 方法,如果我們想要得到ResultSet裡的所有記錄,就應該使用while回圈。

重點總結

JDBC使用步驟:

  1. 建立數據庫連線Connection
    DriverManager建立
    DataSource獲取
  2. 建立操作命令Statement
    PreparedStatement
  3. 使用操作命令來執行SQL
// 查詢操作
preparedStatement.executeQuery();

// 新增、修改、刪除操作
preparedStatement.executeUpdate();
  1. 處理結果集ResultSet
while (resultSet.next()) {
	int xxx = resultSet.getInt("xxx"); 	
	String yyy= resultSet.getString("yyy");
	...
}
  1. 釋放資源
try {
	if(resultSet != null){
		resultSet.close();
	}
	if(preparedStatement != null){ 	
		preparedStatement.close();
	}
	if(connection != null){ 
		connection.close();
	}
} catch (SQLException e) {
	e.printStackTrace();
	throw new RuntimeException("數據庫錯誤");
}