Java_08:SQL

17
JDBC 資資資資資資資 多多多多多

Transcript of Java_08:SQL

Page 1: Java_08:SQL

JDBC 資料庫存取方式

多重執行緒

Page 2: Java_08:SQL

JDBC 是什麼• Java Database Connectivity• Java 標準 API 的非相依性的資料庫連接方式►一支程式 , 適用於不同的資料庫•Package: java.sql

Page 3: Java_08:SQL

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

JDBC 運用程序 – 常用 JDBC 驅動類型• JDBC-ODBC 橋接驅動 (JDBC-ODBC Bridge Driver)• JDBC 原生 API(JDBC-Native API)•100% pure Java

Page 5: Java_08:SQL

建立測試環境 - MySQL

•Windows: EasyPHP•Mac: MAMP• Linux: LAMP

Page 6: Java_08:SQL

建立測試環境 - 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

資料庫表操作 – 基本程序 (1)• 載入驅動程式►Class.forName()• 取得資料庫連線物件實體►Connection conn = DriverManager.getConnection()

• 建立 SQL 敘述句物件實體►Statement stmt = conn.createStatement()►PreparedStatement

Page 8: Java_08:SQL

資料庫表操作 – 基本程序 (2)

• 執行 SQL 敘述句►stmt.execUpdate(SQL)• 關閉 SQL 敘述句►stmt.close()• 關閉資料庫連線物件實體►Conn.close()

Page 9: Java_08:SQL

資料庫表操作 – 基本程序 (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

資料庫表操作

•程式碼維護性•執行效能性•執行安全性

Statement PreparedStatementv.s.

Page 11: Java_08:SQL

資料庫操作 – 建立與刪除資料庫• 建立一個名為 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

資料表操作 – 建立與刪除資料表• 建立一個名為 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

資料表操作 – 增刪修查

• 新增• 刪除• 修改• 查詢

DB URL: jdbc:mysql://127.0.0.1/mydb

Page 14: Java_08:SQL

結果集合 Result Sets• 指標巡訪方式►FORWARD_ONLY►SCROLL_INSENSITIVE►SCROLL_SENSITIVE• get 方法的運用►API• 更新方式►updateString()

Page 15: Java_08:SQL

交易機制 Transactions•Why►增加效能►維護商業流程的完整性►使用分布式交易• Commit & Rollback• Savepoint

Page 16: Java_08:SQL

批次處理• 建立 Statement 物件實體• 設定 auto-commit 為 false• 呼叫 addBatch()• 執行 executeBatch()• 呼叫 commit()

Page 17: Java_08:SQL

預儲程序建立 CallableStatement 物件實體

Connection 的prepareCall()

關閉 CallableStatement 物件實體