1. Trang chủ
  2. » Công Nghệ Thông Tin

Java làm việc với CSDL

46 509 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 46
Dung lượng 542,71 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

• Các trình điều khiển JDBC đưa ra các kết nối cơ sở dữ liệu và thực hiện các giao thức protocol để trao đổi các truy vấn và kết quả giữa khách hàng và cơ sở dữ liệu.. Giao tiếp trong

Trang 1

LÀM VIỆC VỚI

CƠ SỞ DỮ LIỆU

Trang 2

Nội dung

• Khái niệm JDBC

• Các bước sử dụng JDBC trong ứng dụng Java

• Các đối tượng Statement

• ResultSet

– ResultSet cuộn được

– ResultSet cập nhật

Trang 3

Khái niệm về JDBC

• Là một phần của các hàm Java API cho môi trường ứng dụng Java.

• JDBC thì tương tự như ODBC drivers, ADO.NET data

providers và OLE DB providers.

• Để kết nối đến CSDL, JDBC yêu cầu trình điều khiển

(driver) cho mỗi CSDL

• Các trình điều khiển JDBC đưa ra các kết nối cơ sở dữ

liệu và thực hiện các giao thức (protocol) để trao đổi các

truy vấn và kết quả giữa khách hàng và cơ sở dữ liệu.

• Các trình điều khiển JDBC được chia làm 4 nhóm.

Trang 4

Loại 1: JDBC-ODBC bridge

• Cầu nối JDBC-ODBC: Cung cấp

các truy cập JDBC thông qua các

truy cập ODBC Driver này

chuyển các lời gọi JDBC thành lời

gọi các hàm trong ODBC

• Gói driver cho JDBC-ODBC:

sun.jdbc.odbc.JdbcOdbcDriver

• Client -> JDBC Driver -> ODBC

Driver -> Database

Trang 5

Loại 1: JDBC-ODBC bridge

• Ưu điểm: Dễ kết nối, kết

nối thẳng đến CSDL.

• Khuyết điểm: ODBC

driver phụ thuộc vào hệ điều hành và đòi hỏi client phải được cài driver

• Tốc độ truy xuất chậm.

• Trên Access, ODBC driver

bị lỗi khi chuyển mã ký

tự

Trang 6

Loại 2: Native-API partly Java driver

• Chuyển các lệnh gọi JDBC thành các lệnh gọi

API trên máy client của CSDL (như Oracle,

SyBase, DB2, …).

• Như vầy, nó đòi hỏi trên máy client cần phải

nạp trước một số lệnh nhị phân của các trình

chạy trên máy client của CSDL.

• JDBC driver loại này phụ thuộc nền tảng sử

dụng.

• Không phải CSDL nào cũng có driver dạng này.

• Driver này tương tích hầu hết tất cả các ứng

dụng Java ngoại trừ Applet.

Trang 7

Loại 3: Network-Protocol driver

• Đây là dạng driver giao thức mạng

Driver này chuyển các lệnh gọi JDBC

thành các giao thức mạng độc lập với

hệ quản trị CSDL (DBMS

Independent Net Protocol).

• Chính phần mềm trên máy chủ trung

gian này có thể kết nối các máy

khánh có nên Java với nhiều loại

CSDL khác nhau.

• Client -> JDBC Driver ->

Network-protocol driver -> Middleware-Net

Server -> bất cứ CSDL nào

Trang 8

Loại 3: Network-Protocol driver

• Ưu điểm: JDBC này rất linh hoạt vì có thể kết nối đến

nhiều loại hệ quản trị CSDL khác nhau mà không cần cài đặt driver dưới máy client

• Khuyết điểm: Phụ thuộc nhiều vào nhà cung cấp

Trang 9

Loại 4: Native-Protocol driver

• Đây là dạng driver với giao thức

gốc hoàn toàn Java Được viết

hoàn toàn bằng Java

• Biến các lệnh gọi JDBC thành các

giao thức mạng gọi trực tiếp từ hệ

quản trị CSDL

• Trình này cho phép gọi trực tiếp từ

máy khách đến máy chủ chứa

Trang 10

Loại 4: Native-Protocol driver

• Ưu điểm: JDBC này không cần chuyển sang lời gọi

nào (như ODBC)

• Không cần lớp trung gian để liên hệ với các CSDL

• Được viết bằng Java nên hoàn toàn không phụ thuộc nào nền tảng sử dụng

• Cải thiện hiệu suất truy cập

• Khuyết điểm: Cần driver riêng cho từng loại CSDL

Trang 11

Cơ chế hoạt động của JDBC

• Chương trình Java tạo một đối tượng kết nối để kết nối với cơ sở dữ liệu.

• Tạo một đối tượng lệnh (Statement) và chuyển các câu SQL đến CSDL thông qua đối tượng này

Trang 13

Giao tiếp trong gói java.sql

Array Kiểu mảng.

Blob Kiểu dữ liệu Blob.

CallableStatement Giao diện dùng để thực thi các các hàm đã được cài sẵn (Stored

Procedure).

Clob Kiểu dữ liệu Clob.

Connection Một phiên kết nối với CSDL cụ thể.

DatabaseMetaData Thông tin về toàn bộ CSDL.

Driver Giao diện mà các trình điều khiển đều phải cài đặt.

NClob Kiểu dữ liệu Nclob.

ParameterMetaData Đối tượng dùng để lấy thông tin về kiểu và thuộc tình cho mỗi tham số

được đánh dấu trong đối tượng PreparedStatement

PreparedStatement Đối tượng dành cho các câu lệnh được biên dịch trước (precompiled

SQL statement).

Ref Một tham khảo đến giá trị của một dữ liệu có cấu trúc.

ResultSet Tập hợp các records cho phép truy xuất đến cac bảng trong CSDL.

Trang 14

Giao tiếp trong gói java.sql

ResultSetMetaData Một đối tượng dùng để lấy thông tin về loại và thuộc tính cùa các cột trong một

đối tượng ResultSet.

RowId Một thể hiện của giá trị cột trong SQL.

Savepoint Một điểm lưu, một điểm trong giao dịch hiện tại, có thể được tham chiếu thông

qua phương thức Connection.rollback.

SQLData Giao tiếp dùng để ánh xạ kiểu dữ liệu người dùng.

SQLInput Luồng dữ liệu nhập chứa các giá trị biểu diễn các kiểu dữ liệu cấu trúc hay phân

biệt.

SQLOutput Luồng dữ liệu xuất cho việc ghi xuống CSDL các thuộc tính của các kiểu dữ liệu

người dùng.

SQLXML Kiểu ánh xạ cho kiểu XML trên SQL.

Statement Đối tượng dùng để thực thi các câu lệnh SQL và nhận về kết quả.

Struct Mô tả dữ liệu kiểu cấu trúc.

Trang 15

Lớp trong gói java.sql

Date Biểu diễn kiểu DATE.

DriverManager Một dịch vụ quản lý bộ các JDBC Driver.

Chú ý: Giao tiếp DataSource, phần mới trong JDBC 2.0 API, cải tiến một cách khác để kết nối đến một data source.

DriverPropertyInfo Thông tin driver để tạo kết nối.

SQLPermission Quản lý quyền truy cập cho các kết nối.

Time Biểu diễn kiểu TIME.

Timestamp Biểu diễn kiểu TIMESTAMP.

Types Lớp định nghĩa các hằng cho phép định danh các kiểu dữ liệu

SQL, hay còn gọi là kiểu dữ liệu JDBC.

Trang 16

Ngoại lệ trong gói java.sql

BatchUpdateException Ngoại lệ xảy ra thi thực thi các bó lệnh.

DataTruncation Ngoại lệ xảy ra khi có sự cắt bớt dữ liệu lúc đọc hoặc ghi.

SQLException Ngoại lệ khi lỗi trong các câu truy vấn SQL.

SQLWarning Ngoại lệ cung cấp các thông tin nhắc nhở khi truy cập

CSDL.

Trang 17

Giao tiếp trong gói javax.sql

ConnectionEventListener Giao tiếp dùng trong các thành phần chia sẻ.

ConnectionPoolDataSour

ce Là nguồn tạo các đối tượng PooledConnection.

DataSource Là nguồn tạo các đối tượng Connection.

PooledConnection Đối tượng kết nối cung cấp và quản lý các điểm kết nối chia sẻ.

RowSet Giao tiếp này hỗ trợ cho mô hình JavaBeans.

RowSetInternal Đối tượng biểu hiện như một máy đọc hay ghi.

RowSetListener Giao tiếp này được tạo bởi một thành phần muốn được thông báo

các sự kiện đã xảy ra cho một RowSet.

RowSetMetaData Đối tượng chứa các thông tin cho đối tượng RowSet.

RowSetReader Đối tượng để đọc trong RowSet.

RowSetWriter Đối tượng để ghi trong RowSet.

XAConnection Đối tượng cung cấp các hỗ trợ cho các giao dịch phân bố.

XADataSource Là nguồn của đối tượng XAConnection.

Trang 18

Lớp trong gói javax.sql

ConnectionEvent Chứa sự kiện kết nối.

RowSetEvent Các sự kiện khi có thay đổi trong RowSet.

StatementEvent Các sự kiện khi một câu lệnh truy vấn được kết nối.

Trang 19

Sử dụng trình điều khiển JDBC

• Thực hiện một kết nối với CSDL: gọi phương thức

getConnection() để nhận về đối tượng Connection

• Thực hiện các lệnh:

– Các câu lệnh có thể được thực hiện tức thì thông qua đối tượng Statement, hay là một câu lệnh được biên dịch

trước thông qua đối tượng PreparedStatement ,hay là một

lệnh gọi các thủ tục lưu trữ sẵn (store procedures) thông

qua đối tượng CallableStatement.

– Các câu lệnh SQL được thực hiện thông qua phương thức

executeQuery() hoặc executeUpdate().

Trang 20

Các bước khi cần truy cập CSDL

– Đăng ký trình điều khiển JDBC

– Thiết lập một nối kết đến cơ sở dữ liệu

– Tạo và thực thi câu lệnh SQL

– Xử lý các kết quả

– Đóng nối kết cơ sở dữ liệu

Trang 21

Ví dụ sử dụng JDBC – ODBC Driver

Trang 22

Ví dụ sử dụng JDBC - Trình giao thức gốc

hoàn toàn Java (SQL Server)

Trang 23

Đăng ký trình điều khiển JDBC

dữ liệu, cần đăng ký (nạp) trình điều khiển JDBC.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Class.forName("com.microsoft.sqlserver.jdbc.SQLServer Driver");

Trang 24

Thiết lập kết nối đến CSDL

Phương thức:

DriverManager.getConnection(url, username, password):

– Kết quả trả về là 1 đối tượng Connection.

url: chuỗi kết nối có dạng jdbc:subprotocol:subname

subprotocol: giao thức con tương ứng với loại của HQTCSDL.

subname: tên của CSDL.

username: tên người dùng khi đăng nhập vào CSDL.

password: mật khẩu người dùng khi đăng nhập vào CSDL.

Trang 25

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

Trang 26

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

• Phương thức lấy về dữ liệu của đối tượng Statement:

executeQuery(): truy xuất thông tin từ cơ sở dữ liệu Tham số đầu vào là một câu truy vấn Select (chuỗi ký tự) Kết quả trả

về là một đối tượng ResultSet.

• Đối tượng ResultSet: chứa tập kết quả trả về khi thực hiện câu truy vấn dạng Select.

• Thí dụ:

ResultSet rs = s.executeQuery( "select * from CHUCVU“ );

Trang 27

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

• Phương thức cập nhật dữ liệu của Statement:

– Phương thức executeUpdate(): cho phép thực thi các

câu truy vấn hành động như Insert, Update, Delete

hoặc các câu lệnh định nghĩa dữ liệu như Create Table, DropTable.

– Cú pháp: int executeUpdate(String sql):

sql: chuỗi chứa câu lệnh SQL

Kết quả trả về là một giá trị int mang ý nghĩa là số dòng

(mẩu tin) chịu tác động bởi việc thực thi câu lệnh.

• Thí dụ:

int rows = s executeUpdate ( “Delete NHANVIEN Where MANV=‘NV001’” );

Trang 28

Xử lý kết quả - Lớp ResultSet

• Một đối tượng ResultSet chứa tập kết quả (dạng bảng) trả về từ việc thực thi 1 câu truy vấn Select.– Ban đầu con trỏ chỉ đến trước dòng đầu tiên của

tập kết quả trả về

– Phương thức next() của đối tượng ResultSet cho phép di chuyển sang dòng kế tiếp

– Kết quả trả về của phương thức là true nếu việc

di chuyển thành công; false nếu không còn dòng nào để di chuyển

Trang 29

Xử lý kết quả - Lớp ResultSet

Một số phương thức của đối tượng ResultSet:

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.

• Thông thường, các phương thức có 1 tham số là tên cột (hoặc số thứ tự cột) trong bảng.

Trang 30

Đóng kết nối

nối đến cơ sở dữ liệu.

Statement , Connection

Trang 31

Đối tượng PreparedStatement

Trang 32

Đối tượng PreparedStatement

• Tạo đối tượng PreparedStatement: sử dụng

phương thức prepareStatement() của đối tượng

Connection (tham số của phương thức này là câu truy vấn SQL dạng chuỗi):

• Ví dụ:

PreparedStatement s = con prepareStatement( "Update Matches Set Won=?, Lost=? Where MatchNo=?“ );

• Trong thí dụ trên, các dấu ? là các tham số Do đó

trước khi thực thi, các tham số này cần được gán giá trị

Trang 33

Đối tượng PreparedStatement

• Gán trị cho tham số:

– Phương thức setType (<STT>, <Giá trị>);

• Type: Kiểu dữ liệu của tham số cần gán.

• STT: số thứ tự của tham số, bắt đầu là 1.

• Giá trị: giá trị sẽ gán cho tham số.

Trang 34

Đối tượng PreparedStatement

• Cập nhật dữ liệu:

– Phương thức executeUpdate(): kết quả trả về là

1 giá trị int mang ý nghĩa là số dòng (mẩu tin) bị tác động khi thực thi câu truy vấn

• Lấy về dữ liệu:

– Phương thức executeQuery(): kết quả trả về là 1 đối tượng ResultSet

Trang 35

CallableStatement s=con.prepareCall( “{call spPlayers}“ );

// spPlayers: tên của 1 store procedure

• Thực thi câu lệnh SQL: phương thức

executeQuery() hoặc executeUpdate()

• Đối tượng CallableStatement có thể nhận các tham

số tương tự như đối tượng PreparedStatement

Trang 36

Scrollable ResultSet

Scrollable ResultSet là ResultSet cuộn được.

duyệt các mẩu tin theo 2 chiều (từ trước

mẩu tin đầu tiên - BOF đến sau mẩu tin cuối cùng - EOF).

Trang 37

Tạo ResultSet cuộn được

• Phương thức createStatement() của 1 đối tượng

public PreparedStatement prepareStatement(String sql,

int resultSetType, int resultSetConcurrency)

• Phương thức prepareCall() của 1 đối tượng

Connection.

public CallableStatement prepareCall(String sql,

int resultSetType, int resultSetConcurrency)

Trang 38

ResultSet Type

TYPE_FORWARD_ONLY ResultSet chỉ có thể duyệt 1 chiều

từ BOF đến EOF

TYPE_SCROLL_INSENSITIVE ResultSet có thể được duyệt theo

2 chiều nhưng không thấy được sự

thay đổi số liệu trong CSDL

TYPE_SCROLL_SENSITIVE ResultSet có thể được duyệt theo

2 chiều và thấy được sự thay đổi

số liệu trong CSDL

Trang 39

Lưu ý: Để có thể tạo một ResultSet cập nhật

được, câu lệnh SQL phải chứa khóa chính và

chỉ chọn các cột trong cùng một bảng.

Trang 40

Các phương thức để duyệt ResultSet

next() Di chuyển vị trí con trỏ sang mẩu tin kế tiếp

previous() Di chuyển vị trí con trỏ sang mẩu tin trước đó

first() Di chuyển vị trí con trỏ về mẩu tin đầu tiên

last() Di chuyển vị trí con trỏ về mẩu tin cuối cùng

beforeFirst() Di chuyển vị trí con trỏ về trước mẩu tin đầu tiên

afterLast() Di chuyển vị trí con trỏ về sau mẩu tin cuối cùng

Trang 41

Các phương thức để duyệt ResultSet

absolute(lnumber) Di chuyển vị trí con trỏ mẩu tin hiện hành đến

mẩu tin có số thứ tự là lnumber Nếu lnumber>0, số thứ tự này được tính từ mẩu tin đầu tiên Nếu lnumber<0, số thứ tự này được tính từ mẩu tin cuối cùng.

relative(lnumber) Di chuyển sang mẩu tin có vị trí tương đối là

lnumber so với vị trí mẩu tin hiện hành Nếu lnumner>0, di chuyển về cuối ResultSet; nếu lnumber<0, di chuyển về đầu ResultSet

Trang 42

rs.updateString(“TENNV”,”Nguyễn Văn A”);

– Hoàn tất việc cập nhật bằng cách gọi thực thi phương thức updateRow() Ngoài ra, ta có thể hủy bỏ việc cập nhật bằng cách gọi

phương thức cancelRowUpdates()

Trang 43

ResultSet cập nhật

• Các bước để thêm 1 mẩu tin trong 1

Trang 44

ResultSet cập nhật

• Các bước để xóa 1 mẩu tin:

– Di chuyển đến mẩu tin cần xóa

– Gọi thực thi phương thức deleteRow().

Trang 45

ResultSet cập nhật

các thay đổi dữ liệu do người dùng khác thực hiện sẽ được nhận biết.

Trang 46

Tóm tắt việc cập nhật CSDL

• Việc cập nhật CSDL có thể được thực

hiện nhờ:

– Thực thi các câu truy vấn dạng hành động

(Insert, Update, Delete) nhờ 1 đối tượng

CallableStatement

Ngày đăng: 21/10/2014, 22:06

TỪ KHÓA LIÊN QUAN

w