jdbc java database connectivity - jdbc.pdf · jdbc java database connectivity ... java database 2....

25
JDBC Java Database Connectivity ธีระยุทธ ทองเครือ

Upload: others

Post on 02-Oct-2020

79 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

JDBC

Java Database Connectivity

ธระยทธ ทองเครอ

Page 2: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

Java Database

2

Page 3: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

แนะน ำ JDBCJDBC คอ ชดค ำสงมำตรฐำน (Library หรอ API) ส ำหรบท ำงำนกบฐำนขอมล

JDBC ก ำหนดใหมค ำสงส ำหรบจดกำรฐำนขอมล สรำงฐำนขอมล ดงขอมล เพม ลบ และแกไข

JDBC อยใน package ชอ java.sql (อยใน Java Standard Edition)

3

Page 4: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

JDBC DriverJDBC Driver คอ ชดค ำสงทผผลตซอฟทแวรฐำนขอมล implement ตำมขอก ำหนด

ในของ JDBC เพอสนบสนนกำรเชอมตอกบฐำนขอมลของตนเอง

JDBC Driver จะอยในรปแบบของไฟลทบบอดในนำมสกล .jar เพอใหนกพฒนำน ำไปเกบไวในแอปพลเคชน หรออำงองถง

4

JDBC

API

ฐำนขอมล

JDBC

Driver

Java

Application

Page 5: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

สถำปตยกรรม JDBC

5

JDBC

API

Oracle

MS SQL

MySQL

Oracle

Driver

MS SQL

Driver

MySQL

Driver

Ne

tw

or

k

Java

Application

Page 6: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

JDBC DriverMySQL

https://dev.mysql.com/downloads/connector/j/

Oraclehttp://www.oracle.com/technetwork/database/features/jdbc/

Microsoft SQL Serverhttps://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx

6

Page 7: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

ใช Maven ชวยโหลด JDBC Driver

7

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion><groupId>com.teejung</groupId><artifactId>firstmaven</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version>

<dependencies>

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version>

</dependency>

</dependencies>

</project>

แทก dependency ใชครอบชอ 1 Library

ไฟล pom.xml

Page 8: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

กำรเพม JDBC Driver ในโปรเจค Dynamic Webโฟลเดอรทใชเกบ Library (ไฟล .jar) ส ำหรบโปรเจค จะอยใน

WebContent/WEB-INF/lib เมอโหลด JDBC Driver ของ MySql แลว สำมำรถลำกวำง .jar ในโฟลเดอรนไดเลย

เพอใหโปรเจครจก

8

Page 9: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

ขนตอนกำรเขยนค ำสงตดตอฐำนขอมล1. โหลด JDBC Driver

2. ก ำหนด URL ส ำหรบตดตอกบฐำนขอมล

3. เชอมตอกบฐำนขอมล

4. เตรยมค ำสง SQL ทจะประมวลผล

5. สงค ำสง SQL ไปยงฐำนขอมล

6. อำนผลลพธทฐำนขอมลสงกลบ

7. ปดกำรเชอมตอ

9

Page 10: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

1. โหลด JDBC Driverคลำสหลกส ำหรบ JDBC Driver จะอยใน package ทแตกตำงกนไปขนอยกบผผลต

ฐำนขอมล โดยใชเมธอด Class.forName( ) ดงน

Class.forName("ชอ package และคลาส JDBC Driver");

กำรโหลดจะตองดก Exception ชอ ClassNotFoundException เสมอ

10

try {// 1. โหลด JDBC DriverClass.forName("com.mysql.cj.jdbc.Driver");...

} catch (ClassNotFoundException e) {System.err.println("Error loading driver: " + e);

}

Page 11: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

ชอคลำส JDBC Driver ของฐำนขอมลตำงๆMySQL

Class.forName("com.mysql.cj.jdbc.Driver");

OracleClass.forName("oracle.jdbc.driver.OracleDriver");

Microsoft SQL ServerClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

11

Page 12: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

2. ก ำหนด URL ส ำหรบตดตอกบฐำนขอมล

URL ส ำหรบตดตอกบฐำนขอมล เปน String ซงมรปแบบดงน

String dbURL = "jdbc:mysql://localhost/blueshop?characterEncoding=utf-8";

12

ชอ Protocol ชอ domain หรอ ipของ database server

ชอฐำนขอมล ชดอกขระทใช

Page 13: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

3. เชอมตอกบฐำนขอมลประกำศ object ของคลำส Connection ส ำหรบเกบกำรเชอมตอ เรยกเมธอด getConnection( ) จำกคลำส DriverManager ซงมอำรกวเมนตดงน

13

String dbURL = "jdbc:mysql://localhost/blueshop?characterEncoding=utf-8";

Connection con = DriverManager.getConnection(dbURL,"root","1234");

URL ฐำนขอมล

username เขำฐำนขอมล

password เขำฐำนขอมล

Page 14: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

4. เตรยมค ำสง SQL ทจะประมวลผล

ประกำศตวแปร PreparedStatement และเรยกเมธอด prepareStatement( ) ของ Connection Object โดยสงรปแบบค ำสง SQL ไปดวย

หลงจำกนนก ำหนดคำใหกบ ? ในรปแบบ SQL ดวยเมธอด setXxx( )

14

Connection con = DriverManager.getConnection(dbURL,"root","1234");

PreparedStatement pStatement = con.prepareStatement("SELECT * FROM product WHERE pid = ? or pname LIKE ?");

pStatement.setInt(1, 3);

pStatement.setString(2, "g%");

argument แรก แทนล ำดบของ ? ในประโยค SQL

argument ทสอง แทนคำทตองกำรน ำไปแทนในประโยค SQL

กำรใชเมธอดก ำหนดคำใหกบ ?- ใช setInt( ) เมอฟลดในฐำนขอมลเปนตวเลข- ใช setString( ) เมอฟลดในฐำนขอมลเปนชดอกขระ

Page 15: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

5. สงค ำสง SQL ไปยงฐำนขอมล เรยกเมธอด executeQuery() จำก PreparedStatement Object

ประกำศตวแปรของคลำส ResultSet เพอรบคำผลลพธ

15

Object ส ำหรบเกบผลลพธทฐำนขอมล

สงกลบ

ResultSet resultSet = pStatement.executeQuery();

Page 16: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

6. อำนผลลพธทฐำนขอมลสงกลบผลลพธทไดจำกฐำนขอมลจะถกเกบลง ResultSet Objectสำมำรถโหลดขอมลทละแถวดวยเมธอด next( ) เขำถงขอมลในแตละคอลมนดวยเมธอด getXxxx( )

16

while (resultSet.next()) {

int pid = resultSet.getInt("pid");

String pname = resultSet.getString("pname");

String pdetail = resultSet.getString("pdetail");

int price = resultSet.getInt("price");

System.out.println(pid + "," + pname + "," + pdetail + "," + price);

}

ระบชอคอลมน

ดงขอมลออกมำเปน Integerดงขอมลออกมำเปน String

Page 17: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

7. ปดกำรเชอมตอ เรยกเมธอด close() จำก Connection Object เพอหยดกำรเชอมตอกบฐำนขอมล

กำรปด Connection ควรท ำทกครง เพอเพมประสทธภำพกำรท ำงำนกบฐำนขอมล

17

// 1. โหลดคลาส JDBC DriverClass.forName("com.mysql.cj.jdbc.Driver");

// 2. ก าหนด URL ส าหรบตดตอกบฐานขอมลString dbURL = "jdbc:mysql://localhost/blueshop?characterEncoding=utf-8";

// 3. สราง ConnectionConnection con = DriverManager.getConnection(dbURL, "root", "1234");

. . . . .

// 7. ปดการเชอมตอcon.close();

Page 18: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

18

import java.sql.*;public class JDBCStep {

private static Connection con; // ประกาศตวแปรส าหรบใชตดตอฐานขอมลpublic static void main(String[] args) {

try {// 1. โหลด JDBC DriverClass.forName("com.mysql.cj.jdbc.Driver");

// 2. ก าหนด URL ส าหรบตดตอกบฐานขอมลString dbURL = "jdbc:mysql://localhost/blueshop?characterEncoding=utf-8";

// 3. เชอมตอกบฐานขอมลcon = DriverManager.getConnection(dbURL, "root", "1234");

// 4. เตรยมค าส ง SQL ทจะประมวลผลPreparedStatement pStatement = con.prepareStatement("SELECT * FROM product WHERE pid = ? or pname LIKE ?"); pStatement.setInt(1, 3);pStatement.setString(2, "g%");

// 5. สงค าส ง SQL ไปยงฐานขอมลResultSet resultSet = pStatement.executeQuery();

// 6. อานผลลพธท ฐานขอมลสงกลบwhile (resultSet.next()) {

int pid = resultSet.getInt("pid"); String pname = resultSet.getString("pname");String pdetail = resultSet.getString("pdetail");int price = resultSet.getInt("price");System.out.println(pid + "," + pname + "," + pdetail + "," + price);

}// 7. ปดการเชอมตอcon.close();

} catch (ClassNotFoundException e) {System.err.println("Error loading driver: " + e);

} catch (SQLException e) {System.err.println("Error database connection: " + e);

}}}

Page 19: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

กจกรรมโหลดไฟล blueshop.sql จำกเวบไซตของคอรส

สรำงฐำนขอมลใหม ชอ "blueshop" import ไฟลเขำฐำนขอมล

สรำงคลำส JDBCStep ในโฟลเดอร java แลวน ำโคดจำกไฟล "JDBCStep.txt" จำกเวบไซตของคอรสมำวำง และทดสอบรน สงเกตผลลพธ

สรำงคลำส JDBCStep2 โดยใหแสดงขอมลจำกตำรำง member ออกทำง console เลยนแบบโคดจำก JDBCStep

19

Page 20: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

ฐำนขอมล blueshop

20

*โหลดไฟล blueshop.sql เพอใชน ำเขำขอมลจำกหนำเวบ

username (PK)passwordnameaddressmobileemail

member ord_id (PK)username (FK)ord_datestatus

orders

tid (PK)ord_id (FK)pid (FK)quantity

item

pid (PK)pnamepdetailprice

product

Page 21: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

ขอมลในแตละตำรำง

21

username password name address mobile emailsomsak 1899 สมศกด สรเสถยร 174 ถ.มตรภำพ จ.ขอนแกน [email protected] aafff1 บำรม บญหลำย 123 ถ.วภำวดรงสต กรงเทพฯ 08-9446-9955 [email protected] m345 เมธำสทธ สอนสง 98/9 ถ.ศรจนทร จ.ขอนแกน 08-4456-9877 [email protected]

pid pname pdetail price1 Centrum วตำมนรวมจำก A ถง Zinc 3502 Caltrate บ ำรงกระดก เสรมวตำมนด 7603 Ester-C วตำมนซ 500 mg ไมกดกระเพำะ 5004 Glucosamine บ ำรงขอตอ ปองกนขอเสอม 1200

ord_id username ord_date status1 baramee 16/7/2013 23:25 wait2 metasit 12/2/2013 23:25 pay3 baramee 27/12/2013 23:26 send4 metasit 11/12/2013 23:27 pay

tid ord_id pid quantity1 1 2 22 1 3 53 1 4 14 2 1 25 2 3 46 2 4 37 3 2 38 3 4 59 4 1 510 4 3 1

ตาราง member

ตาราง product

ตาราง orders

ตาราง item

Page 22: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

กจกรรมสรำงฐำนขอมลใหมดวยโปรแกรม MySQL Workbench เพอเกบขอมลอำจำรย ใช

ชอตำรำง teacher มคอลมน ดงน tid INT เปน auto_increment (เชคท AI) tname Varchar(50) status Enum มคำเปน "s" หรอ "m" เทำนนหลงจำกนนเพมขอมลลงไปอยำงนอย 3 แถว

สรำงคลำสจำวำ ดงขอมลจำกตำรำง teacher ทงหมด และน ำมำแสดงท console

ใหเชคขอมลในคอลมน status และแสดงผลดงน• ถำเปน s แสดงวำ "โสด"• ถำเปน m แสดงวำ "แตงงำน"

22

Page 23: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

กำร Insert/Update/Delete กำรใชค ำสง SQL ประเภทดงขอมล จะใชเมธอด executeQuery( ) แตกำรใชค ำสง SQL ทเปนกำร

Insert/Update/Delete จะใชเมธอด executeUpdate( )

23

PreparedStatement pStatement = con.prepareStatement("SELECT * FROM product WHERE pid = ?");

pStatement.setInt(1, 3);

ResultSet resultSet = pStatement.executeQuery( ); String ทอยในรปค ำสง SQL ประเภทดงขอมล

Object ส ำหรบเกบผลลพธทฐำนขอมลสงกลบ

กำรใชค ำสงดงขอมล

กำรใชค ำสงเพม/ลบ/แกไขขอมล

PreparedStatement pStatement = con.prepareStatement("UPDATE product SET price=? WHERE pid=?");

pStatement.setInt(1, 3000);

pStatement.setInt(2, 3);

int row = pStatement.executeUpdate( );

เกบจ ำนวนแถวทมผลกระทบ

String ทอยในรปค ำสง SQL ประเภท Insert/Update/Delete

Page 24: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

กจกรรมสรำงตำรำงเพอจดเกบขอมลพนกงำนอยำงนอย 4 คน ขอมลประกอบดวย

รหสพนกงำน, ชอ-สกล, วนเดอนปเกด, เพศ (f-ชำย, m-หญง), แผนก, ต ำแหนง และเงนเดอน

สรำงคลำสจำวำ เพอตดตอกบฐำนขอมล โดยใหดงขอมลพนกงำนทมเงนเดอนอยในชวง 15,000 ถง 20,000 บำท เรยงตำมเงนเดอนจำกมำกไปนอย แสดงบน console

24

Page 25: JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2. แนะน ำ JDBC JDBC คือ ชุดคำสั่งมำตรฐำน

กจกรรมจำกกจกรรมทผำนมำ จงแทรกค ำสง HTML แทก <table> ระหวำงดงขอมล

จำกฐำนขอมล แลวน ำผลลพธไปวำงบนไฟลใหม บนทกเปน "test.html" และทดสอบเปดเพอดผลลพธบน Browser

25