JDBC Java Database Connectivity - JDBC.pdf · JDBC Java Database Connectivity ... Java Database 2....

Preview:

Citation preview

JDBC

Java Database Connectivity

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

Java Database

2

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

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

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

3

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

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

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

4

JDBC

API

ฐำนขอมล

JDBC

Driver

Java

Application

สถำปตยกรรม JDBC

5

JDBC

API

Oracle

MS SQL

MySQL

Oracle

Driver

MS SQL

Driver

MySQL

Driver

Ne

tw

or

k

Java

Application

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

ใช 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

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

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

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

8

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

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

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

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

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

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

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

9

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);

}

ชอคลำส 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

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

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

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

12

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

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

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 เขำฐำนขอมล

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( ) เมอฟลดในฐำนขอมลเปนชดอกขระ

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

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

15

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

สงกลบ

ResultSet resultSet = pStatement.executeQuery();

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

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();

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);

}}}

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

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

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

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

19

ฐำนขอมล 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

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

21

username password name address mobile emailsomsak 1899 สมศกด สรเสถยร 174 ถ.มตรภำพ จ.ขอนแกน somsak@gmail.combaramee aafff1 บำรม บญหลำย 123 ถ.วภำวดรงสต กรงเทพฯ 08-9446-9955 baramee@gmail.commetasit m345 เมธำสทธ สอนสง 98/9 ถ.ศรจนทร จ.ขอนแกน 08-4456-9877 metasit@outlook.com

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

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

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

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

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

22

กำร 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

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

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

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

24

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

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

25

Recommended