chapter 5 jdbc lập trình java

50 0 0
chapter 5 jdbc lập trình java

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Khái niệm◂JDBC hỗ trợ việc truy cập CSDL để thực hiện các tác vụ xử lý truy vấn, thêm, xóa, sửa, cập nhậto Tạo kết nối đến Databaseo Tạo câu lệnh truy vấn SQLo Thực thi các câu lệ

Trang 1

LẬP TRÌNH JAVA

Giảng viên: Tạ Việt Phương

Ch 5 JDBC

Trang 2

Nội dung

➢Giới thiệu JDBC

2

Trang 3

Giới thiệu

◂JDBC: Java DataBase Connectivity

◂Là Java API (Application Programming Interface) chứa tập hợp các class và interface hỗ trợ xây dựng các ứng dụng Java truy cập đến các CSDL khác

nhau (Access, SQL Server, MySQL, Oracle, …)

Trang 4

Khái niệm

◂JDBC hỗ trợ việc truy cập CSDL để thực hiện các tác vụ xử lý (truy vấn, thêm, xóa, sửa, cập nhật)

o Tạo kết nối đến Database

o Tạo câu lệnh truy vấn SQL

o Thực thi các câu lệnh SQL

o Truy vấn, hiển thị và xử lý dữ liệu trả về

◂Bao gồm 2 gói thư viện chính:

o java.sql.*: chứa các lớp và giao diện cơ sở

o javax.sql.*: chứa các lớp và giao diện mở rộng

Trang 5

Kiến trúc JDBC

Trang 6

Kiến trúc JDBC (tt)

JDBC API: Tập hợp các interface cung cấp trực tiếp cho ứng dụng để thao tác với JDBC

DriverManager: quản lý các trình điều khiển JDBC được coi là xương sống của JDBC Là một class

giúp kết nối giữa Java Application đến các JDBC Driver.

JDBC Driver: là thành phần chính giao tiếp trực tiếp với CSDL

Trang 7

JDBC DRIVERS

◂Sun cung cấp đặc tả là các JDBC interface (Connection, PreparedStatement, Statement, ResultSet, …) Tập hợp các class hiện thực các JDBC interface đối với một database engine cụ thể được gọi là JDBC driver.

◂Do các hãng xây dựng DBMS hoặc một đơn vị thứ 3

Trang 8

o Loại 2: Native API

o Loại 3: Network Protocol

o Loại 4: Native Protocol

➢Loại 1vàLoại 4được sử dụng phổbiến nhất

Trang 9

Loại 1: JDBC ODBC

oCác trình điều khiển cầu nốiJDBC- ODBC.

oỦy nhiệm công việc truy xuất dữ liệu cho ODBC API

oSUN cung cấp một phần mềm trình điều khiển JDBC/ODBC.

Trang 10

Loại 2: NATIVE API

o Chuyển lệnh gọi JDBC thành lệnh gọi API trên máy client của CSDL

o Java chuyển lệnh JDBC thànhlệnh chuẩn của DBMS

o Phụ thuộc nền tảng sử dụng

o Nâng cao hiệu quả thực hiện kết nối

o Ưu điểm: tốt hơn

o Hạn chế: Driver Type-2 và thư

viện Client-side của database cần cài đặt trên máy client

Trang 11

Loại 3: NETWORK PROTOCOL

o Được viết thuần bằng Java và sử dụng giao thức Net độc lập nhà sản xuất để tru y cập đến trình theo dõi

o Hỗ trợ việc kết nối nhiều ứng dụng với nhiều CSDL khác nhau

o Ưu điểm: có thể kết nối đến nhiều hệ quản trị CSDL khác nhau mà

Trang 12

Loại 4: NATIVE PROTOCOL

o Được viết thuần túy bằng Java, là loại hiệu quả nhất.

o Kết nối trực tiếp vào CSDL o Các drivers được hỗ trợ

bởi các provider DBMS o Ưu điểm:

• Nâng cao hiệu quả khi thực thi

• Độc lập platform

o Nhược điểm : đòi hỏi có driver cho từng loại CSDL

Trang 13

JDBC DRIVERS

Trang 14

JDBC Interface

➢ Class và Interface của JDBC API thuộc gói java.sql

DriverManager: dùng để nạp các driver và tạo Connection đến cơ sở dữ liệu.

Driver: Driver của cơ sở dữ liệu, mỗi JDBC Driver đều cài đặt lại Interface này.

Connection : thiết lập một Connection đến cơ sở dữ liệu và cho phép tạo các Statement

Statement: gắn kết với một connection đến cơ sở dữ liệu và cho phép thực thi các câu lệnh SQL.

PreparedStatement: tương tự như Statement nhưng thực thi câu lệnh SQL được biên dịch trước (Precompiled SQL) và có truyền tham số

Trang 15

JDBC Interface (tt)

ResultSet: Cung cấp thông tin rút trích từ cơ sở dữ liệu, cho phép truy xuất các dòng dữ liệu.

ResultSetMetaData: Cung cấp các thông tin như kiểu dữ liệu và các thuộc tính trong Resultset.

DatabaseMetaData: Cung cấp các thông tin của cơ sở dữ liệu kết nối.

SQLException: Cung cấp thông tin các ngoại lệ xảy ra khi tương tác với cơ sở dữ liệu.

Trang 16

CÁC BƯỚC SỬ DỤNG JDBC

➢Đăng ký driver của JDBC (Load driver) ➢Xác định các thông số CSDL – DB kết nối ➢Tạo kết nối CSDL

➢Tạo lệnh SQL cần thực thi ➢Thực thi lệnh

➢Xử lý kết quả trả về➢Đóng Connection

Trang 17

CÁC BƯỚC SỬ DỤNG JDBC

Trang 18

Đăng ký driver (LOAD DRIVER)

➢ Driver là phần mềm hỗ trợ giao tiếp.

➢ JDBC driver là Java class thực hiện chuyển đổi các lệnh Java thành câu lệnh SQL tương ứng.

➢ Load driver là tạo các instance hỗ trợ liên kết và đăng ký

Trang 19

Đăng ký driver (LOAD DRIVER)

➢VD khi dùng MySQL

Trang 20

Đăng ký driver (LOAD DRIVER)

Trang 21

Đăng ký driver (LOAD DRIVER)

◂Driver được cài đặt trong JAR file.

◂JAR phải được khai báo trong classpath:

◂1 Thêm jar file to vào IDE project

◂2 Thêm JAR file vào CLASSPATH

Trang 24

Tạo kết nối đến CSDL

◂Phương thức getConnection() của lớp

DriverManager dung để thiết lập kết nối với database

Trang 25

Ví dụ Load Driver và tạo kết nối

conn = DriverManager.getConnection(url);

System.out.println("Connected to the database"); return true;

Trang 26

Tạo kết nối SQL Server

StringuserName = "hung";Stringpassword = "12345";

➢ Tạo kết nối trong SQL Server

Class.forName("com.microsoft.sqlserver.jdbc

Trang 27

Tạo câu lệnh thực thi

o Statement statement = connection.createStatement() ;

o ResultSet executeQuery (String sql) o int executeUpdate (String sql)

o boolean execute (String sql)

Trang 28

Tạo câu lệnh thực thi

String SQL = "SELECT * FROM hocsinh"; Statement stat = con.createStatement(); o Có 03 loại Statement

Trang 29

Thực thi lệnh

o executeQuery() đối với câu lệnh truy vấn

String strSQL = “Select * From Registration”; ResultSet rs = stat.executeQuery(strSQL);

o executeUpdate():đối câu lệnh Insert, Update và Delete

String strSQL = “Insert into RegistrationValues(“Aptech”, “Aptech”);

int nRow = stat executeUpdate(strSQL);

o execute() dùng để tạo và xóa đối tượng như table

Trang 30

Xử lý kết quả trả về và đóng kết nối

Xử lý kết quả

oSử dụng ResultSet nhận kết quả trả về

oSử dụng phương thức getXxx (số thứ tự/ hay tên field) của ResultSet để lấy giá trị của field

Số thứ tự bắt đầu từ 1

Xxx tương ứng với loại dữ liệu của field• getInt(): lấy về giá trị int từ dòng hiện hành.

getString(): lấy về giá trị String từ dòng hiện hành.

getDate(): lấy về giá trị Date từ dòng hiện hành.

getFloat(): lấy về giá trị float từ dòng hiện hành.

getObject(): lấy về giá trị từ dòng hiện hành và xem giá trị

này như là 1 object.

o Sử dụng phương thức next() của ResultSet để duyệt lần

lượt các record

Trang 31

o Resultset 2 chiều hỗ trợ các phương thức truy cập như:

first, isFirst, last,

Trang 32

Xử lý kết quả trả về và đóng kết nối

◂Đóng đối tượng Connection, thì đối tượng Statement và

ResultSet sẽ tự động đóng

◂Nên đóng connection sau khi hoàn tấtConnection connection =

DriverManager.getConnection( );

/* use the database */

/* done using database */

public void close( ) {

if ( connection == null ) return; try { connection.close(); }

catch ( SQLException sqle ) { /* ignore it */ }finally { connection = null; }}

Trang 33

Làm việc với ResultSet & Cursor

ResultSet chứa các "rows" thỏa hay trả về từ câu query.Là

đối tượng dạng bảng trong RAM, có gắn với Cursor.

Cursor được sinh ra khi một ResultSet được sinh ra.

Cursor cho phép chúng ta có thể xử lý một ResultSet từ

trên xuống dưới hoặc từ dưới lên (theo cả 2 hướng) hoặc đi đến 1 dòng chỉ định nào đó.

Trang 34

Làm việc với ResultSet & Cursor

ResultSet hỗ trợ các phương thức để lấy dữ liệu từ cột:

◂"get" by column number starts at 1 (not 0)!

◂"get" by column name field names in table/query

String query = "SELECT * FROM Country WHERE ";ResultSet rs = statement.executeQuery( query );

// go to first row of results

Trang 35

Làm việc với ResultSet & Cursor

◂ResultSet hỗ trợ các phương thức để lấy từng dòng và cột

getInt( name: String ) getInt( index: int )

go to next row of results "false" if no more go to previous row "false" if 1st result go to first row of results.

go to last row of results.go to k-th row of results.get int value of field "name"

get int value of k-th column in a record

Trang 36

Làm việc với ResultSet & Cursor

◂Các phương thức get(…) trả về dữ liệu cột:

getLong(3): get by column index (most efficient)

getLong("population"): get by field name (safest)

getInt( ), getLong( ) - get Integer field valuegetFloat( ), getDouble() - get floating pt value

getString( ) getDate( ) - get Char or Varchar field value- get Date or Timestamp field value

getBoolean( ) - get a Bit field value getBytes( ) - get Binary data

getBigDecimal( ) - get Decimal field as BigDecimal

getBlob( ) getObject( ) - get Binary Large Object- get any field value

Trang 37

Đối tuợng PreparedStatement

PreparedStatement kế thừa từ Statement.

◂Thường được dùng với các câu lệnh SQL có tham số Thay vì thực thi đối tượng Statement nhiều lần, có thể

dung PreparedStatement.

Đối tượng PreparedStatement chứa 1 câu lệnh SQL đã

được biên dịch trước khi gởi đến DBMS, khác với

Trang 38

Đối tuợng PreparedStatement

String sql = "INSERT INTO user_info (name, address) VALUES (?, ?);";

List<User> listUser = new ArrayList<User>();listUser.add(new User("Harry", "England"));listUser.add(new User("Batman", "USA"));

Trang 39

String SQL = "SELECT * FROM hocsinh"; Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery(SQL);

Trang 40

String SQL1="INSERT hocsinh VALUES(‘Nguyen Van A')";

Statement stat1 = conn.createStatement(); stat1.executeUpdate(SQL1);

Trang 41

Delete một dòng

Xóa một dòng thỏa mãn điều kiện trong bảng

Statement st = con.createStatement();

String sql = "DELETE FROM hocsinh WHERE ten =

Trang 42

Delete tất cả các dòng

Statement st = con.createStatement(); String sql = "DELETE FROM hocsinh"; int delete = st.executeUpdate(sql); if(delete == 0){

System.out.println("All rows are completel ly deleted!");

}

Trang 43

Delete một bảng

Statement st = con.createStatement(); st.execute("DROP TABLE Employee1");

System.out.println ("Table Deletion process iscompletly successfully!");

Trang 44

Update

Cập nhật dòng thỏa điều kiện dùng PrepareStatement

String sql = "UPDATE movies SET title = ? WHERE

Trang 45

System.out.println("Enter table name:"); String table = bf.readLine();

ResultSet res = st.executeQuery("SELECT COUNT(*)FROM "+table);

int count=0;

while (res.next()){

Trang 46

(Trong đó tương ứng với mỗi dấu ? là 1 tham số của store procedure

đã tạo trong Database )

oTạo 1 thể hiện của interface CallableStatement thông qua phương

thức prepareCall() dựa trên đối tượng Connection

o Gọi phương thức executeQuery() để trả về kết quả là 1 ResultSet.

String strCall = "{call

Trang 47

String strCall = "{call deleteAccount(?)}";

CallableStatement caSt = con.prepareCall(strCall); caSt.setString(1, user);

Trang 48

Sử dụng Transaction

Statement statement1= con.createStatement(); Statement statement2= con.createStatement();

Trang 49

Statement statement1= con.createStatement();Statement statement2= con.createStatement();

Trang 50

Q & A

Giảng viên: Tạ Việt PhươngE-mail: phuongtv@uit.edu.vn

Ngày đăng: 27/04/2024, 10:57

Tài liệu cùng người dùng

Tài liệu liên quan