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

Chuyên đề Java: Bài 05

18 21 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

BÀI 5: LẬP TRÌNH CƠ SỞ DỮ LIỆU JDBC Học xong người học thực nội dung sau - Trình bày khái niệm JDBC; Các thành phần JDBC; Phân loại JDBC; Cơ chế hoạt động JDBC, - Thực việc tải cài đặt JDBC driver cho project - Trình bày phương pháp kết nối CSDL với hệ QT CSDL SQL Server, Ocracle, MySQL,… - Thực việc kết nối truy xuất sở liệu - Thực việc xử lý kết xuất kết truy xuất CSDL - Xây dựng ứng dụng Quản lý CSDL 5.1 GIỚI THIỆU VỀ JDBC 5.1.1 JDBC gì? JDBC (Java DataBase Connectivity) thư viện chuẩn dùng để truy xuất sở liệu MS Acess, SQL Server, Oracle, PostgreSQL,… ứng dụng Java ngôn ngữ truy vấn SQL JDBC hỗ trợ chức tạo kết nối đến sở liệu, tạo câu lệnh SQL (Structured Query Language), thực thi câu lệnh SQL, xem thay đổi liệu Hình 5.1 Trình điều khiển JDBC 5.1.2 Các thành phần JDBC - JDBC API Các thành phần JDBC: - DriverManager: Lớp quản lý danh sách trình điều khiển sở liệu (database drivers) Lựa chọn trình điều khiển phù hợp từ yêu cầu ứng dụng java sử dụng giao thức giao tiếp - Connection: Đại diện cho kết nối đến sở liệu ThS Dương Thành Phết http://www.thayphet.net Trang 126 - Statement: Đối tượng dùng để thực thi câu lệnh SQL câu lệnh thêm liệu (insert), câu lệnh thay đổi liệu (update), câu lệnh xoá liệu (delete), câu lệnh xem liệu (select), … - ResultSet: Đối tượng chứa liệu sau thực thi câu lệnh xem liệu Sử dụng đối tượng để duyệt qua tất liệu chứa ResultSet Hình 5.2 Các thành phần JDBC 5.1.3 Phân loại JDBC Database Driver Có kiểu JDBC Database Driver: - Kiểu 1: JDBC-ODBC bridge driver  Chuyển đổi lời gọi JDBC thành ODBC, ODBC truy xuất giao thức DBMS  Phương thức truy xuất liệu địi hỏi trình điều khiển ODBC cài đặt máy tính client Hình 5.3 JDBC-ODBC bridge driver - Kiểu 2: Native protocol partly java driver  Chuyển lời gọi JDBC thành lời gọi giao thức DBMS đặc thù  Khi chuyển đỗi đặt máy client, số mã nhị phân phải cài đặt máy tính client ThS Dương Thành Phết http://www.thayphet.net Trang 127 Hình 5.4 Native protocol partly java driver - Kiểu 3: Net protocol all Java driver  Chuyển đổi lời gọi JDBC thành giao thức mạng độc lập với giao thức DBMS đặc thù Sau đó, phần mềm trung gian (middleware) chạy máy server chuyển đỗi giao thức mạng thành giao thức DBMS đặc thù  Sự chuyển đặt phía server mà khơng địi hỏi cài đặt máy tính client Hình 5.5 Net protocol all Java driver - Kiểu 4: Native protocol all Java driver  Chuyển lời gọi JDBC thành lời gọi giao thức DBMS đặc thù  Khi chuyển đỗi đặt phía server, mà khơng địi hỏi cài đặt máy tính client ThS Dương Thành Phết http://www.thayphet.net Trang 128 Hình 5.6 Native protocol all Java driver Kết luận trình điều khiển nên sử dụng (Which driver should be used) - Nếu truy cập vào sở liệu MySQL, SQL Server, PostgreSQL, Oracle, … loại nên sử dụng - Nếu ứng dụng Java truy cập nhiều loại CSDL lúc loại nên sử dụng - Loại sử dụng số tình mà loại loại khơng có sẵn - Loại thường sử dụng với mục đích thử nghiệm 5.2 CƠ CHẾ HỌAT ĐỘNG VỚI JDBC Hình 5.7: Mơ hình hoạt động ứng dụng với JDBC ThS Dương Thành Phết http://www.thayphet.net Trang 129 Các bước truy xuất sở liệu - Nạp trình điều khiển - Thiết lập kết nối - Tạo đối tượng Statement - Thực thao tác liệu - Xử lý kết trả - Đóng kết nối 5.2.1 NẠP TRÌNH ĐIỀU KHIỂN Sử dụng phương thức tĩnh registerDriver lớp DirverManager forName() lớp Class với tham số tên trình điều khiển sở liệu try { DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver()); } catch(ClassNotFoundException e) { System.out.println(“Error loading driver: “ e); } Hoặc try { Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); } catch(ClassNotFoundException e) { System.out.println(“Error loading driver: “ e); } Một số trình điều khiển thường dùng là:  Trình điều khiển MySQL: Class.forName(“org.gjf.mm.mysql.Driver”);  Trình điều khiển Oracle: Class.forName(“oracle.jdbc.driver.OracleDriver”);  Trình điều khiển Sybase: Class.forName(“com.sybase.jdbc.SybDriver”);  Trình điều khiển qua cầu nối ODBC: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);  Trình điều khiển qua cầu nối SQL Server (Native): Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); 5.2.2 Thiết lập kết nối - Chỉ định chuỗi kết nối String host = "dbhost.yourcompany.com"; String dbName = "someName"; int port = 1234; String oracleURL = "jdbd:oracle:thin:@" + host + ":" + port + ":" + dbName; String sybaseURL = "jdbc:sybase:Tds:" + host + ":" + port + ":" + ThS Dương Thành Phết http://www.thayphet.net Trang 130 - "?SERVICEid="+ dbName; Thiết lập kết nối: Để thiết lập kết nối ta gọi phương thức tĩnh getConnection() lớp DriverManager, trả thể lớp Connection, theo dạng sau: String user = “sa” String password = “secret” Connection = DriverManager.getConnection(dbUrl, username, password); Trong đó: - dbUrl: chuỗi kết nối đến sở liệu - username: tên người dùng đăng nhập - password: mật đăng nhập Để lấy thông tin sở liệu gọi phương thức getMetaData() Connection trả đối tượng lớp DatabaseMetaData  Ví dụ sau minh họa kết nối đến MySQL  Ví dụ sau minh họa cách kết nối tới Oracle ThS Dương Thành Phết http://www.thayphet.net Trang 131  Ví dụ minh họa cách kết nối tới SQL Server: try { DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver()); String url = “jdbc:sqlserver://localhost:1433;database=QLBanSach;user=sa; password= 1234567” Connection connection = DriverManager.getConnection(url); } catch(ClassNotFoundException e) { System.out.println(“Driver not found: “ e.getMessage); }catch(SQLException e){ System.out.println(“SQL Exception : “ + e.getMessage) ; } 5.2.3 Tạo đối tượng Statement Một đối tượng Statement sử dụng để truyền câu truy vấn câu lệnh đến CSDL tạo từ đối tượng Connection khởi tạo Cách tạo đối tượng statement gọi phương thức createStatement() đối tượng Connection: Statement statement = connection.createStatement(); Theo mặc đinh, đối tượng statement tạo từ phương thứccreateStatement() truy vấn đến sở liệu cho kết forward-only read-only Tạo statement cho phép cập nhật: createStatement(int resultSetType,int resultSetConcurrency) throws SQLException Cho phép tạo đối tượng Statement mà phát sinh đối tượng ResultSet với kiểu thao tác xác định Các tham số: - resultSetType: kiểu tập kết quả,  ResultSet.TYPE_FORWARD_ONLY ThS Dương Thành Phết http://www.thayphet.net Trang 132  ResultSet.TYPE_SCROLL_INSENSITIVE  ResultSet.TYPE_SCROLL_SENSITIVE - resultSetConcurrency: kiểu thao tác,  ResultSet.CONCUR_READ_ONLY  ResultSet.CONCUR_UPDATABLE 5.2.4 Thực thao tác liệu Xây dựng câu truy vấn (query): String sql = “SELECT col1, col2,col3 FROM table1, table2”; String sql = “Update table1 set col1 = col1 *10 / 100”; Để thực thi câu lệnh SQL ta sử dụng hai phương thức sau đối tượng Statement executeQuery() executeUpdate() - Phương thức executeQuery: thực câu vấn tin dạng SELECT nhận kết trả đối tượng ResultSet (tập ghi liệu truy vấn được) - Phương thức executeUpdate: thưc thi câu vấn tin dạng CREATE, UPDATE, INSERT, DELETE Sau số ví dụ cập nhật liệu: - Thêm ghi vào sở liệu - Cập nhật thay đỗi vào sở liệu - Xóa ghi thỏa mãn điều kiện ThS Dương Thành Phết http://www.thayphet.net Trang 133 Ngồi ta sử dụng đối tượng PreparedStatement để viết câu lệnh truy vấn có tham số câu lệnh biên dịch trước Ví dụ: Khi sử dụng PreparedStatement, database server phải kiểm tra cú pháp chuẩn bị kế hoạch xử lý lần cho câu lệnh SQL.Để xác định tham số cho PreparedStatement, gỏ dấu chấm hỏi (?) câu lệnh SQL Để cung cấp giá trị cho tham số PreparedStatement, sử dụng phương thức dạng setAAAA() Để xử lý câu SELECT, sử dụng phương thức executeQuery() Để xử lý câu INSERT, UPDATE, DELETE, sử dụng phương thức executeUpdate() Ví dụ sau sử dụng PreparedStatement để sửa đổi liệu: Ví dụ sau sử dụng PreparedStatement thêm ghi: Ví dụ sau sử dụng PreparedStatement xóa ghi thõa mãn điều kiện: ThS Dương Thành Phết http://www.thayphet.net Trang 134 5.2.5 Xử lý kết trả (ResultSet) Đối với câu vấn tin dạng SELECT, truy vấn thành cơng kết trả tập ghi liệu lưu đối tượng ResultSet ta hiển thị xử lý kết Cách duyệt qua ghi liệu sau: Đối tượng ResultSet - Theo mặc định phương thức createStatement() tạo đối tượng ResultSet forward-only & read-only Điều có nghĩa ta di chuyển trỏ thơng qua từ ghi đến ghi cuối mà cập nhật - Khi ResultSet tạo, trỏ định vị trước ghi Sau ta sử dụng phương thức ResultSet để di chuyển trỏ - Các phương thức ResultSet ném ngoại lệ SQLException - Ví dụ tạo ResultSet gồm dịng cột: Statement stmt = connection.createStatement(); ResultSet rsUserID = stmt.executeQuery(“SELECT UserID FROM User WHERE Email=“jerry@yahoo.com””); - Ví dụ ResultSet gồm nhiều dòng nhiều cột: Statement stmt = connection.createStatement(); ResultSet rsProducts = stmt.executeQuery(“SELECT * FROM product”); - Một số phương thức ResultSet forward-only, read-only:  Next(): Di chuyển tới dòng ResultSet  Last(): Di chuyển đến dịng cuối tập kết  Close(): Đóng kết nối JDBC Resultset va Cơ sở liệu ThS Dương Thành Phết http://www.thayphet.net Trang 135  getRow(): Trả dòng (số nguyên) - Cách nhận liệu từ ResultSet:  Các phương thức dạng getAAAA() sử dụng để lấy kiểu liệu bản, int, long, double, … int n = rsProduct.getInt(“Soluong”), double price = rsProduct.getDouble(“Price”);  Các phương thức dạng getAAAA() sử dụng để lấy kiểu chuỗi, ngày tháng, thời gian, … String username = rsUser.getString(1); Date = rsProduct.getDate(“MakeDate”); … 5.2.6 Đóng kết nối Để ngắt kết nối ta sử dụng phương thức close đối tượng connection: connection.close() 5.3 CHƯƠNG TRÌNH MẪU Để thực ứng dụng minh họa, cần kiểm tra tài khoản đăng nhập SQL Server, cần điều chỉnh thiết lập mật cho tài khoản sa Tiến hành kiểm tra điều chỉnh port 1433 cho SQL Server 5.3.1 Thiết lập tài khoản đăng nhập SQLServer 20XX Khi chưa thiết lập tài khoản sa cài đặt sql server, quên mật tài khoản sa, muốn đổi mật sa Bước 1: Thiết lập SQL Server cho phép đăng nhập với tài khoản SQL Server - Khởi động SQL Server đăng nhập với chế độ Windows Authenticate - Tại cửa sổ Opject Explorer: Chuột phải SQL Server -> Chọn Properties - Chọn SQL Server and Windows Authencation mode - Khởi động lại SQL Server Bước 2: Kích hoạt đặt mật cho tài khoản sa - Tại mục Login cửa sổ Object Explorer SQL Server - Tại mục Logins Click phải tài khoản sa -> Chọn Properties - Đặt mật  OK - Tại mục Status  Login Kích hoạt tài khoản sa cách chọn Enable (mặc định tài khoản disable) ThS Dương Thành Phết http://www.thayphet.net Trang 136 - Tiếp theo phải restart lại service, thấy thay đổi thực thi Để restart service: Dùng tổ hợp phím Windows +R để xuất hộp thoại Run, nhập lệnh services.msc, tìm chọn mục SQL Server (SQL Express…) - Service hoạt động Ta tiến hành Stop ta Start cho khởi động lại Ok xong - Đã thấy chữ Started  Service hoạt động Tiến hành đăng nhập SQLServer với chế độ SQL Server Authenticate với tài khoản sa thực việc tạo CSDL với SQLServer 5.3.2 Tạo CSDL cho ứng dụng: Đăng nhập SQL Server với tài khoản sa, tạo CSDL nhập liệu mẫu sau: Tạo CSDL: QLSanpham Create DataBase QLSanpham use QLSanpham -Tao Table LoaiSP Create Table LoaiSP ( Maloai char(2) primary key, Tenloai nvarchar(20) ) Insert into LoaiSP values('BK',N'Bánh kẹo') Insert into LoaiSP values('GK',N'Giải khát') Insert into LoaiSP values('MP',N'Mỹ phẩm') Tạo tabl Sanpham Create Table Sanpham ( MaSP char(4) primary key, TenSP nvarchar(20), Dongia bigint, Maloai char(2) foreign key references LoaiSP(Maloai) ) Insert into Sanpham values('SP01',N'Bánh mì',10000,'BK') Insert into Sanpham values('SP02',N'Bánh bao',15000,'BK') Insert into Sanpham values('SP03',N'Coca cola',12000,'GK') Insert into Sanpham values('SP04',N'Pepsi',11000,'GK') Insert into Sanpham values('SP05',N'Kem chống nắng',85000,'MP') ThS Dương Thành Phết http://www.thayphet.net Trang 137 5.3.3 Tải cài đặt JDBC Driver cho project - Tải MS SQL Server JDBC Driver giải nén: https://www.microsoft.com/en-US/download/details.aspx?id=11774 Hình 5.8 tải giải nén JDBC Driver SQL Server - Cài đặt Microsoft SQL Server JDBC Driver cho NetBeans  Khởi động NetBeans  Tạo Project mới: KetnoiCSDLDemo  Chọn thẻ tool -> library -> New Library o Ở Textfield Library Name: chọn tên thư viện mà bạn muốn đặt o Cịn Library Type để mặc định  Sau OK  Tiếp tục Chọn Nút Add JAR/Folder o Chỉ đường dẫn đến file JAR vừa down ThS Dương Thành Phết http://www.thayphet.net Trang 138 Hình 5.9 Cài đặt JDBC Driver cho project Kết cài đặt: Hình 5.8 Kết cài đặt JDBC Driver cho project 5.3.4 Tạo ứng dụng kết nối CSDL SQL Server với Java Netbeans - Minh họa 1: Trong Project KetnoiCSDLDemo thực code cho chương trình import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class KetnoiCSDLDemo { public static void main(String[] args) throws SQLException { } Thực thi chương trình: Hình 5.10 Kết minh họa - Minh họa 2: Hiện thị liệu lên JTable Tạo thêm vào project java class QLSanpham ThS Dương Thành Phết http://www.thayphet.net Trang 139 Hình 5.11 Thêm Java Class import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class QLSanpham extends JFrame { private Connection connect = null; private JTable jtable = new JTable(); private DefaultTableModel tableModel = new DefaultTableModel(); public QLSanpham() throws SQLException{ String []colsName = {"Mã SP", "Tên SP","Đơn giá", "Loai Sp"}; tableModel.setColumnIdentifiers(colsName); // đặt tiêu đề cột cho tableModel jtable.setModel(tableModel); // kết nối jtable với tableModel initComponent(); // Khởi tạo components JFrame connectSQL(); // kết nối sở liệu updateData(view()); // gọi hàm view để truy suất liệu sau truyền cho hàm updateData //để đưa liệu vào tableModel lên Jtable Frame } public void updateData(ResultSet result){ try { while(result.next()){ // đọc tiếp dòng liệu ThS Dương Thành Phết http://www.thayphet.net Trang 140 String rows[] = new String[4]; rows[0] = result.getString(1); // lấy liệu cột số (ứng với mã sp) rows[1] = result.getString(2); rows[2] = result.getString(3); rows[3] = result.getString(4); tableModel.addRow(rows); // đưa dòng liệu vào tableModel để thị lên jtable //mỗi lần có thay đổi liệu tableModel Jtable //sẽ tự động update lại frame } } catch (SQLException e) { e.printStackTrace(); } } public void initComponent(){ this.setSize(400, 200); // Đưa jtable vào cuộn (khi liệu nhiều dịng // có cuộn ngang doc để xem liệu) JScrollPane scroll = JTable.createScrollPaneForTable(jtable); this.add(scroll); // Đưa cuộn vào Frame (hiện cuộn frame) this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.setVisible(true); } public void connectSQL() throws SQLException{ try { String userName ="sa"; String password = "123456"; String url = "jdbc:sqlserver://localhost:1433;databaseName=QLSanpham;"; Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); connect = java.sql.DriverManager.getConnection(url,userName,password); System.out.println ("Da ket noi CSDL"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public ResultSet view(){ ResultSet result = null; String sql = "SELECT * FROM Sanpham"; try { Statement statement = (Statement) connect.createStatement(); return statement.executeQuery(sql); } catch (SQLException e) { ThS Dương Thành Phết http://www.thayphet.net Trang 141 e.printStackTrace(); } return result; } public static void main(String[] args) throws SQLException { new QLSanpham(); } } Hình 5.12 Kết minh họa ThS Dương Thành Phết http://www.thayphet.net Trang 142 TĨM TẮT Bài học trình bày cách thức truy xuất thao tác sở liệu sử dụng JDBC với bước sau: - Nạp trình điều khiển - Thiết lập kết nối - Tạo đối tượng Statement - Thực vấn tin xử lý kết trả - Thực lệnh them, xóa, sửa liệu - Đóng kết nối Hết ThS Dương Thành Phết http://www.thayphet.net Trang 143

Ngày đăng: 09/02/2022, 00:03

Xem thêm:

w