###### 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. 資料完整性