###### tags: `Java`
# Java關鍵字(口訣?)
## 介面五大功能
1. 多重繼承
2. 定義規格
3. 貼標籤
4. 型別轉換
5. 降低相依性
## 交易三大方法
1. setAutoCommit(boolean autoCommit):設定自動提交模式
2. commit():結束目前的交易,並將所有暫存資料正式存入資料庫
3. rollback():結束目前的交易並遺棄所有暫存資料
## 交易四基本要求
1. A:原子性
2. C:一致性
3. I:隔離行為
4. D:持續性
## Servlet生命週期
1. 創建實體
2. 初始化
3. 服務
4. 卸載
## JDBC四大箴言
1. 載入驅動
2. 建立連結
3. 建立statement物件
4. 執行SQL指令
### 在開始之前......
請先初始化以下設定:
```
Connection con = null;
Statement stmt = null; 或 PreparedStatement pstmt = null;
ResultSet rs = null;
```
(一種「起初,神創造天地」的概念......)
### 1. 載入驅動
一般而言就是載入要連結資料庫的驅動到JVM裡面,程式碼大概長這樣:
```
try {
Class.forName("com.mysql.cj.jdbc.Driver"); //會因載入不同資料庫的驅動而有所差異
System.out.println("Loading driver successfully! (載入成功!)");
} catch (ClassNotFoundException ce) {
ce.printStackTrace();
}
```
但小吳老師的習慣是把Driver、登入資料庫的帳號密碼寫在util.java檔裡,在載入驅動時直接讀取,所以會變成:
```
try {
Class.forName(Util.DRIVER); ←就不用寫com.mysql.cj.jdbc啦~~
} catch (ClassNotFoundException ce) {
ce.printStackTrace();
}
```
### 2. 建立連結
載入驅動後,就能以用DriverManager類別的getConnection()類別方法建立Connection物件(資料庫的URL、帳號、密碼在此輸入):
```
try {
con = DriverManager.getConnection(Util.URL, Util.USER, Util.PASSWORD);
System.out.println("Connecting to database successfully! (連線成功!)");
} catch (SQLException se) {
System.out.println(se.getMessage());
```
載入驅動與建立連結時常寫在一起:
```
try {
Class.forName(Util.DRIVER);
con = DriverManager.getConnection(Util.URL, Util.USER, Util.PASSWORD);
System.out.println("Connecting to database successfully! (連線成功!)");
} catch (ClassNotFoundException ce) { ←找無驅動阿阿阿阿阿
System.out.println(ce);
} catch (SQLException se) { ←連線失敗阿阿阿阿阿
System.out.println(se);
```
### 3. 建立statement物件
Statement物件的目的是執行SQL指令,在建立好Connection物件後,就可以使用createStatement()方法建立Statement物件。
但基本上我們更偏好使用prepareStatement啦......
```
stmt = con.createStatement();
pstmt = con.prepareStatement();
```
Statement設定好後,就能夠各種更動(玩弄)資料庫啦!例如這樣:
```
pstmt.setInt(1, 7015);
pstmt.setString(2, "DAVID");
pstmt.setString(3, "MANAGER");
pstmt.setDate(4, java.sql.Date.valueOf("2016-01-01"));
pstmt.setDouble(5, 2500);
pstmt.setDouble(6, 0.0);
pstmt.setInt(7, 40);
```
或是這樣:
```
stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
↑只能義無反顧勇往直前的讀取,不可後退、更動資料庫內容
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
↑可前後移動和更新資料,但不反應資料修改
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
↑僅能來回滾動讀取,無法修改資料,但可反應資料修改
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
↑可來回滾動讀取與更動、反映資料修改
```
### 4. 執行SQL指令
英文
* BLOB:存檔案(圖片 or 影音資料)
* CLOB:存大量文字
* FIFO:先進先出
* LIFO:後進先出
* ACID:交易四基本要求
#### 網站安全四大任務
1. 驗證
2. 授權
3. 資料保密性
4. 資料完整性