Tuần 9: Kết nối Cơ sở dữ liệu SQL trong JSP
Để thiết kế một Website nhằm giới thiệu sản phẩm cho một công ty với cơ sở
dữ liệu sản phẩm đã được lưu trữ trên hệ quản trị CSDL SQL Server.
Làm thế nào để có thể đọc các thông tin sản phẩm trong CSDL để trình bày lên
trang web và để cho phép cập nhật các thông tin về sản phẩm mới vào cơ sở dữ liệu?
1. CÁC ĐỐI TƯỢNG KẾT NỐI
• Có 3 đối tượng chính để làm việc với cơ sở dữ liệu là:
– Connection;
– Statement;
– ResultSet.
• Trước khi sử dụng các đối tượng này, phải khai báo import java.* và khai báo
trình điều khiển JTDS như sau:
Class(“net.sourceforge.jtds.jdbc”);
2. CONNECTION
• Connection là đối tượng dùng để mở kết nối cơ sở dữ liệu bằng trình điều khiển
JDBC, bằng cách sử dụng phương thức DriverManager của đối tượng
Connection bạn có thể mở kết nối cơ sở dữ liệu với loại cơ sở dữ liệu cùng với các
tham số khác.
• Khai báo:
Connection con = DriverManager(“jdbc:jtds:sqlserver://” + hostName + “:1433/” + database);
Hoặc:
Connection con = null; con = DriverManager(“jdbc:jtds:sqlserver://” + hostName + “:1433/”+database);
• Tạo đối tượng Statement: Sau khi mở kết nối cơ sở dữ liệu bằng đối tượng
Connection, ta có thể sử dụng phương thức createStatement để trả về đối tượng
Statement bằng cú pháp:
con();
• Đóng kết nối: Để đóng kết nối cơ sở dữ liệu, ta sử dụng cú pháp:
con();
• Giải phóng kết nối: Khi không có nhu cầu sử dụng đối tượng Connection, cần huỷ
đối tượng này để giải phóng bộ nhớ mà đối tượng đã chiếm.
con();
3. STATEMENT
- Đối tượng Statement dùng để thực thi phát biểu SQL dùng cho hành động truy vấn,
cập nhật, thay đổi và xoá dữ liệu.
- Khai báo:
Khai báo đối tượng Statement, bạn sử dụng cú pháp như sau:
Statement st = con();
Hoặc:
Statement st = null;
st = con();
-
Thực thi phát biểu SQL:
-
Sau khi mở kết nối cơ sở dữ liệu bằng đối tượng Connection và khai báo đối tượng
Statement, có thể sử dụng phương thức executeUpdate để thực thi phát biểu SQL dạng
hành động:
st(sql);
- Hay khai báo biến int để nhận số mẩu tin được thực thi:
int records= st(sql);
- Đóng đối tượng: Để đóng kết nối cơ sở dữ liệu, bạn sử dụng cú pháp:
st();
- Giải phóng đối tượng: Tương tự như trong trường hợp đối tượng Connection, khi
không có nhu cầu sử dụng đối tượng Statement, bạn cần huỷ đối tượng này để giải
phóng bộ nhớ mà đối tượng đã chiếm.
st();
4. RESULTSET
- Đối tượng ResultSet nắm giữ một tập dữ liệu cho phép thao tác trên tập dữ liệu bằng
các phương thức và thuộc tính của nó.
- Khai báo:
Khai báo đối tượng ResultSet, sử dụng cú pháp như sau:
ResultSet rs = st(sql);
Hoặc:
ResultSet rs = null;
rs= st(sql);
- Đọc dữ liệu từ đối tượng ResultSet:
Ví dụ: Chương trình sau đây sẽ sử dụng đối tượng resultset để duyệt các bản ghi trong
bảng PRODUCT qua cầu nối JTDS.
Bước 1: Tạo Cơ sở dữ liệu mytest
Chạy script sau để sinh giá trị cho CSDL
USE [mytest] GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[PRODUCT]( [CODE] varchar NOT NULL, [NAME] varchar NOT NULL, [PRICE] [float] NOT NULL, PRIMARY KEY CLUSTERED ( [CODE] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[USER_ACCOUNT] Script Date: 4/23/2018 8:32:53 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[USER_ACCOUNT]( [USER_NAME] varchar NOT NULL, [GENDER] varchar NOT NULL, [PASSWORD] varchar NOT NULL, PRIMARY KEY CLUSTERED ( [USER_NAME] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[PRODUCT] ([CODE], [NAME], [PRICE]) VALUES (N’P001′, N’Java Core’, 100) GO INSERT [dbo].[PRODUCT] ([CODE], [NAME], [PRICE]) VALUES (N’P002′, N’C# Core’, 90) GO INSERT [dbo].[USER_ACCOUNT] ([USER_NAME], [GENDER], [PASSWORD]) VALUES (N’1′, N’M’, N’1′) GO INSERT [dbo].[USER_ACCOUNT] ([USER_NAME], [GENDER], [PASSWORD]) VALUES (N’jerry’, N’M’, N’jerry001′) GO
Bước 2: Tạo trang jsp với code sau
<%@page import=”java.sql”%> <%@page import=”java.sql”%> <%@page import=”java.sql”%> <%@page import=”java.sql”%> <%@page contentType=”text/html” pageEncoding=”UTF-8″%> <!DOCTYPE html> <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″> <title>JSP Page</title> </head> <body> <% Connection con; Class(“net.sourceforge.jtds.jdbc”); try { String connectionURL = “jdbc:jtds:sqlserver://DOTNETGROUP:1433/mytest”;
con = DriverManager(connectionURL); Statement st = con(); String sql = “Select * from PRODUCT”; ResultSet rs = st(sql); out(“<table border=’1′ cellpadding=’2′ cellspacing=’0′ width=’100%’>”); out(“<tr><th>CODE</th><th>NAME</th>”); out(“<th>PRICE</th></tr>”); while (rs()) { out(“<tr><td>” + rs(“CODE”) + “</td><td>” + rs(“NAME”) + “</td>”); out(“<td>” + rs(“PRICE”) + “</td></tr>”); } out(“</table>”); } catch (Exception ex) { System.out(“Error: ” + ex()); }
Statement st = con(); String sql = “Select * from PRODUCT”; ResultSet rs = st(sql); out(“<table border=’1′ cellpadding=’2′ cellspacing=’0′ width=’100%’>”); out(“<tr><th>CODE</th><th>NAME</th>”); out(“<th>PRICE</th><th>ACTION</th></tr>”); while (rs()) { code = rs(“CODE”).toString().trim(); out(“<tr><td>” + rs(“CODE”) + “</td><td>” + rs(“NAME”) + “</td>”); out(“<td>” + rs(“PRICE”) + “</td>”); out(“<td><a href=deleteProduct? code=” + code + “>Delete</a></td></tr>”); } out(“</table>”); } catch (Exception ex) { System.out(“Error: ” + ex()); } %> </body> </html>
- Xây dựng trang deleteProduct để xóa bản ghi bằng lệnh executeUpdate của đối
tượng Statement.
<%@page import=”java.sql”%> <%@page import=”java.sql”%> <%@page import=”java.sql”%> <%@page import=”java.sql”%> <%@page contentType=”text/html” pageEncoding=”UTF-8″%> <!DOCTYPE html> <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″> <title>JSP Page</title> </head> <body> <% String code = request(“code”); Connection con; Statement st; ResultSet rs; Class(“net.sourceforge.jtds.jdbc”); String connectionURL = “jdbc:jtds:sqlserver://DOTNETGROUP:1433/mytest”;
con = DriverManager(connectionURL); st = con(); String sql = “Delete from PRODUCT where Code like N’%”+ code+”%'”;
st(sql); st(); con(); %> <jsp:forward page=”resultsetdemo”></jsp:forward> </body> </html>