Java_08:SQL
Transcript of Java_08:SQL
![Page 1: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/1.jpg)
JDBC 資料庫存取方式
多重執行緒
![Page 2: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/2.jpg)
JDBC 是什麼• Java Database Connectivity• Java 標準 API 的非相依性的資料庫連接方式►一支程式 , 適用於不同的資料庫•Package: java.sql
![Page 3: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/3.jpg)
JDBC 運用程序•建立與資料庫的連線•建構出 SQL 敘述句物件•執行 SQL 查詢•顯示查詢結果
Calling Java Application
JDBC API
JDBC Driver Manager
JDBC – ODBC Bridge(Type 1 Driver)
ODBC driver
Database library APIs
Database
![Page 4: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/4.jpg)
JDBC 運用程序 – 常用 JDBC 驅動類型• JDBC-ODBC 橋接驅動 (JDBC-ODBC Bridge Driver)• JDBC 原生 API(JDBC-Native API)•100% pure Java
![Page 5: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/5.jpg)
建立測試環境 - MySQL
•Windows: EasyPHP•Mac: MAMP• Linux: LAMP
![Page 6: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/6.jpg)
建立測試環境 - MySQL• 建立資料庫► Create database mytest
• 建立資料表► Create table myuser (id integer,name varchar(20))
• 建立使用者► Create user ‘javauser’@’%’ identified by ‘123456’
• 授權使用者► Grant all privileges on mytest.* to ‘javauser’@’%’► Flush privileges
![Page 7: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/7.jpg)
資料庫表操作 – 基本程序 (1)• 載入驅動程式►Class.forName()• 取得資料庫連線物件實體►Connection conn = DriverManager.getConnection()
• 建立 SQL 敘述句物件實體►Statement stmt = conn.createStatement()►PreparedStatement
![Page 8: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/8.jpg)
資料庫表操作 – 基本程序 (2)
• 執行 SQL 敘述句►stmt.execUpdate(SQL)• 關閉 SQL 敘述句►stmt.close()• 關閉資料庫連線物件實體►Conn.close()
![Page 9: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/9.jpg)
資料庫表操作 – 基本程序 (3)• 預先準備好的 Statement 物件• PreparedStatement ►conn.preparestatement(String sql)►sql: Insert into cust (custname,birthday) values (?,?)
►呼叫 putString(index, 值 ) 或 putXxx()►Index 從 1 開始計數►執行 executeQuery()►執行 executeUpdate()
![Page 10: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/10.jpg)
資料庫表操作
•程式碼維護性•執行效能性•執行安全性
Statement PreparedStatementv.s.
![Page 11: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/11.jpg)
資料庫操作 – 建立與刪除資料庫• 建立一個名為 TEST 的資料庫►String sql = “CREATE DATABASE mydb”;►stmt.executeUpdate(sql);• 刪除一個名為的 TEST 資料庫►String sql = “DROP DATABASE mydb”;►Stmt.executeUpdate(SQL);
DB URL: jdbc:mysql://127.0.0.1/
![Page 12: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/12.jpg)
資料表操作 – 建立與刪除資料表• 建立一個名為 cust 的資料表►String sql =“CREATE TABLE cust”
+“(id INTEGER PRIMARY KEY AUTO_INCREMENT,” +“custname VARCHAR(100), BIRTHDAY DATE)”;►stmt.executeUpdate(sql);• 刪除一個名為 cust 的資料表►String sql = “DROP TABLE cust”;►Stmt.executeUpdate(sql);
DB URL: jdbc:mysql://127.0.0.1/mydb
![Page 13: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/13.jpg)
資料表操作 – 增刪修查
• 新增• 刪除• 修改• 查詢
DB URL: jdbc:mysql://127.0.0.1/mydb
![Page 14: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/14.jpg)
結果集合 Result Sets• 指標巡訪方式►FORWARD_ONLY►SCROLL_INSENSITIVE►SCROLL_SENSITIVE• get 方法的運用►API• 更新方式►updateString()
![Page 15: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/15.jpg)
交易機制 Transactions•Why►增加效能►維護商業流程的完整性►使用分布式交易• Commit & Rollback• Savepoint
![Page 16: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/16.jpg)
批次處理• 建立 Statement 物件實體• 設定 auto-commit 為 false• 呼叫 addBatch()• 執行 executeBatch()• 呼叫 commit()
![Page 17: Java_08:SQL](https://reader036.fdocuments.net/reader036/viewer/2022082908/586f6f391a28ab10258b4707/html5/thumbnails/17.jpg)
預儲程序建立 CallableStatement 物件實體
Connection 的prepareCall()
關閉 CallableStatement 物件實體