Phương thức Insert() được định nghĩa trong lớp TestConnection:
public void Insert(int id,String name,int number) throws SQLException{ Statement sta = this.con.createStatement();
String sql1 = "Insert Products values ("+id+",'"+name+"',"+number+")"; sta.executeUpdate(sql1);
}
Ví dụ 6.6: Để thêm mới một bản ghi vào CSDL viết sự kiện cho btnThem như sau.
private void btnThemMouseClicked(Java.awt.event.MouseEvent evt) { try {
// TODO add your handling code here: TestConnection pt = new TestConnection();
pt.Insert(Integer.parseInt(txtid.getText()),txtname.getText(), Integer.parseInt(txtnumber.getText()));
btnThem.doClick();
} catch (ClassNotFoundException ex) {
Logger.getLogger(FrameConnection.class.getName()).log(Level.SEVERE,null, ex);
} catch (SQLException ex) {
Logger.getLogger(FrameConnection.class.getName()).log(Level.SEVERE,null, ex);
}
}
Phương thức Delete() được định nghĩa trong lớp TestConnection: public void Delete(int id) throws SQLException{
Statement sta = this.con.createStatement(); String sql ="delete Products where ID ="+id+""; sta.executeUpdate(sql);
}
Ví dụ 6.7: Để xóa một bản ghi trong CSDL viết sự kiện cho jButton btnXoa như sau.
private void btnXoaMouseClicked(Java.awt.event.MouseEvent evt) { try {
// TODO add )your handling code here: TestConnection pt = new TestConnection();
pt.Delete(Integer.parseInt(txtid.getText()));
} catch (ClassNotFoundException ex) {
Logger.getLogger(FrameConnection.class.getName()).log(Level.SEVERE,null, ex);
} catch (SQLException ex) {
Logger.getLogger(FrameConnection.class.getName()).log(Level.SEVERE,null, ex);
}
}
6.6. Mô tả Rowset, JDBCRowset và CatchedRowset
Nếu cần thao tác với JavaBean, nên sử dụng Rowset Inteface. Rowset Interface cung cấp một tập hợp các thuộc tính của JavaBean cho phép một instance của RowSet được cấu hình để kết nối tới một Data source của JDBC và đọc dữ liệu từ Data source.
Để truyền dữ liệu đầu vào tới thuộc tính command của một Rowset, sử dụng các phương thức setter bao gồm setInt, setBytes, setString, … Command này là truy vấn SQL mà Rowset sử dụng khi nó lấy dữ liệu từ một Relational Database.
JDBCRowset trong java bao gồm CachedRowSet, JdbcRowSet, WebRowSet, JoinRowSet, FilteredRowSet. Sử dụng RowSet sẽ giúp thực hiện các thao tác thêm, xoá và cập nhật một cách tiện lợi mà không cần phải viết các câu lệnh sql.
CachedRowSet không yêu cầu phải duy trì một kết nối với cơ sở dữ liệu. Nó chỉ thực hiện kết nối khi có submit và điều này sẽ làm tăng hiệu suất cho cơ sở dữ liệu. CachedRowSet có thể thực hiện các hoạt động sau đây trên cơ sở dữ liệu
- Insert: Để thực hiện thêm một dòng dữ liệu vào bảng, sử dụng phương thức moveToInsertRow()
- Update: Phương thức updateRow():cập nhật một dòng dữ liệu của bảng
- Delete: Sử dụng phương thức deleteRow() để xoá một dòng dữ liệu của bảng.
- Select: Một đối tượng CachedRowSet là có thể cuộn (scrollable) và điều này cho phép duyệt bản ghi theo nhiều cách. Một khi con trỏ nằm tại dòng mong muốn, các phương thức getter có thể được gọi để lấy các giá trị của các cột.
CÂU HỎI ÔN TẬP, THẢO LUẬN
1. JDBC là gì ?
2. Trình bày chức năng và kiến trúc của JDBC trong Java ?
3. Trình bày các mô hình hoạt động của JDBC ?
4. Tìm hiểu cơ chế hoạt động của JDBC ?
5. Trình bày các bước lập trình truy xuất cơ sở dữ liệu với JDBC ?
6. Tìm hiểu đối tượng Statement( Định nghĩa, chức năng, các phương thức). ? Cho ví dụ minh họa ?
7. Tìm hiểu về đối tượng Resultset( Định nghĩa, chức năng, các kiểu Resultset, các phương thức, cơ chế hoạt động). ? Cho ví dụ minh họa ?
8. Tìm hiểu về đối tượng Rowset ( Định nghĩa, chức năng, các phương thức). ? Cho ví dụ minh họa ?
9. Tìm hiểu về đối tượng Metadata ( Định nghĩa, chức năng, các phương thức). ?
Cho ví dụ minh họa ?
10. Tìm hiểu đối tượng CallableStatement( Định nghĩa, chức năng, các phương thức) ? Cho ví dụ minh họa ?
11. Tìm hiểu tổng quan về SQL ? Các câu lệnh truy vấn dữ liệu ? ví dụ minh họa?
12. Tìm hiểu cách kết nối và thực hiện các câu lệnh truy vấn CSDL giữa Java với SQL server ? Cho ví dụ minh họa ?
13. Giải thích các câu lệnh sau?
public void connectToAndQueryDatabase(String username, String password) { Connection con = DriverManager.getConnection(
"jdbc:myDriver:myDatabase",username, password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) {
int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c");
}
}
BÀI TẬP ỨNG DỤNG
Câu 1. Thực hiện demo về kết nối CSDL và thực thi các phưong thức của đối tượng Statement:
-executeQuery
- executeUpdate
- execute
Câu 2. Cài đặt lớp NhanVien quản lý thông tin về nhân viên bao gồm:
- Mã nhân viên
- Họ tên nhân viên
- Năm sinh
- Hệ số lương
- Lương cơ bản (thuộc tính lớp)
Viết các phương thức khởi tạo tương ứng.
Câu 3. Viết chương trình cài đặt lớp QuanLyNhanVien với các phương thức:
- Nhập thông tin nhân viên (Không cho phép 2 nhân viên được trùng id).
- Kiểm tra sự tồn tại của nhân viên dựa vào mã nhân viên.
- Tính lương nhân viên.
- Tìm nhân viên có lương cao nhất
- Hiển thị thông tin nhân viên.
- In bảng lương nhân viên.
Câu 4. Viết chương trình thực hiện xây dựng menu như sau để cho phép người dùng lựa chọn các chức năng của quản lý nhân viên:
- 1. Nhập thông tin nhân viên.
- 2. Tìm nhân viên có lương cao nhất.
- 3. In bảng lương tháng cho nhân viên.
- 4. Kết thúc.
Câu 5.Viết ứng dụng kết hợp JDBC và API, tạo và kết nối CSDL
Add row to table: Thêm một hàng vào bảng mỗi khi có mặt hàng mới thêm vào.
Update database: Cập nhật bảng COFFES dựa trên dữ liệu trong bảng.
Discard changes: Trích rút nội dung của bảng COFFES, thay thế dữ liệu trong bảng dữ liệu.
Câu 6. Tạo 1 database có tên EmployeeManagement. Tạo 1 table có tên Employees gồm các trường như sau:
- EmpID int primary key
- EmpName nvarchar(50)
- BirthDate datetime,
- Address nvarchar(250)
Xây dựng 1 chương trình java sử dụng database trên và có các chức năng:
1. Nhập mới 1 nhân viên
2. Sửa thông tin nhân viên
3. Xoá thông tin nhân viên
4. Hiển thị toàn bộ thông tin nhân viên. Đưa ra màn hình tổng số nhân viên có trong database
5. Tìm kiếm 1 nhân viên theo tên và hiển thị tổng số nhân viên tìm thấy
6. Exit
Câu 7. Cho DB có tên là APJ2_Assignment, có dạng như sau, dữ liệu đi kèm với file sql Assignment1.sql
Sử dụng netbeans tạo giao diện như sau
Yêu cầu
a. Ngay khi form được load lên, phải lấy được danh sách các Manufacturer ra và đưa vào trong combobox, lưu ý lúc hiển thị thì sử dụng tên, nhưng vẫn phải lưu được Id của manufacturer
b. Khi bấm nút add new, sẽ thực hiện validate dữ liệu như sau
i. Tất cả các trường phải được nhập
ii. Nếu đã nhập đủ, kiểm tra productId đã tồn tại trong bảng Product hay chưa,
1. nếu tồn tại rồi thì báo lỗi,
2. nếu chưa mới cho insert vào db
c. Khi bấm vào nút show sẽ đưa dữ liệu từ cả 2 bảng vào table phía dưới với dữ liệu tương ứng nhau (hiển thị tên manufacturer tương ứng với manufacturerId)
d. Khi bấm nút find hiện dialog sau:
Tương ứng với Id nhập vào, tìm kiếm trong DB
1. Nếu có productId đó thì hiện duy nhất dữ liệu của bản ghi đó vào bảng
2. Nếu không có productId đó thì hiện thông báo lỗi : “Data not found.”
Câu 8.
Cho DB có 1 bảng danh sách học viên với 3 cột Id, Ten, GioiTinh. Yêu cầu có ít nhất 5 bản ghi với các giới tính khác nhau (nam/nữ)
a. Viết stored procedure SP_StudentQuery dữ liệu từ bảng DanhSachHocVien ra, stored procedure này có 3 tham số truyền vào : @soluong INT, @soluongNam Int,
@soluongnu INT. Yêu cầu 3 tham số này truyền vào được và lấy ra được dữ liệu từ bên trong stored procedure
b. Viết class java bình thường, có hàm main, sử dụng JDBC với câu lệnh CallableStatement. Yêu cầu gọi đến SP_StudentQuery, lấy ra được danh sách học viên (resultset). Ngoài ra cũng sử dụng các tham số truyền vào để lấy ra được tổng số lượng học viên, số lượng nữ, số lượng nam và in ra màn hình.
c. Với ResultSet học viên trả về, và với số lượng học viên đã lấy được là n, in ra thông tin của học viên n-1 và n-2 (nếu có)
CHƯƠNG 7. LẬP TRÌNH ỨNG DỤNG MẠNG VỚI SOCKET
Mục đích
Chương này giới thiệu về lập trình mạng với socket sử dụng các lớp được cung cấp trong JAVA như: TCP socket, UDP Socket, cách lấy dữ liệu từ website, cách gửi và nhận email.
7.1. Giới thiệu chung
Lập trình ứng dụng mạng với socket là kỹ thuật được sử dụng phổ biến trong thực tế. Các ngôn ngữ lập trình hầu hết đều có thư viện hỗ trợ lập trình với socket như: Ngôn ngữ c/c++ có thư viện socket, VB có thư viện WinSock, C# có thư viện system.socket...Trong Java các lớp thư viện hỗ trợ lập trình với socket hầu hết nằm trong gói java.net. Khi phát triển các ứng dụng mạng thì java và .NET là hai ngôn ngữ hỗ trợ rất mạnh đối với socket sử dụng giao thức TCP (TCPsocket) và UDP (UDPsocket).
Trong chương này giới thiệu lập trình ứng dụng mạng sử dụng TCPSocket, UDPSocket sử dụng các gói như java.net, java.io được cung cấp sẵn trong Java. Các lớp quan trong nhất trong gói java.net gồm 6 lớp: InetAddress, ServerSocket, Socket, DatagramPacket, DatagramSocket, URL. Với 6 lớp này Java cho phép phát triển tất cả các ứng dụng mạng từ ứng dụng đơn giản cho đến phức tạp, từ các ứng dụng nhỏ đến các ứng dụng lớn.
Sau đây chúng ta sẽ khảo sát những kỹ thuật lập trình mạng cơ bản nhất sử dụng socket trong Java. Vấn đề lập trình mạng có thể được định nghĩa với công thức sau:
LTM=KTM+MH+NN
Trong đó:
LTM: Lập trình mạng
KTM: Kiến thức mạng truyền thông (mạng máy tính, PSTN....) MH: Mô hình lập trình mạng
NN: Ngôn ngữ lập trình
7.2. Lập trình thao tác với địa chỉ máy trạm
7.2.1. Lập trình thao tác với địa chỉ IP, lớp URL Connection
7.2.1.1. Lớp InetAddress
Java có các lớp quan trọng để thao tác với địa chỉ IP trong gói java.net. Lớp quan trọng nhất là lớp InetAddress. Lớp này cho phép lấy địa chỉ của một máy trạm bất kỳ trên mạng và cho phép dễ dàng hoán chuyển giữa địa chỉ IP và tên của một máy trạm (host). Mỗi đối tượng InetAddress chứa 2 thành phần chính của một máy trạm là hostname và địa chỉ IP của máy trạm đó..
Hình 7.1. Lớp kế thừa từ lớp InetAddress và SocketAddress
Lớp InetAddress được sử dụng phổ biến trong các lớp Socket, ServerSocket, URL, DatagramSocket, DatagramPacket và nó được kế thừa từ lớp Object:
public class InetAddress extends Object implements Serializable
boolean | equals(Object obj) So sánh đối tượng với đối tượng ob’ |
Byte [] | getAddress() Trả về địa chỉ IP chứa trong đối tượng InetAddress dạng mảng |
static InetAddress[] | getAllByName(String host) Trả về mảng địa chỉ của tất cả các máy trạm có cùng tên trên mạng |
static InetAddress | getByAddress(byte[] addr) Trả về đối tượng InetAddress tương ứng với địa chỉ IP truyền cho phương thức dưới dạng mảng byte |
static InetAddress | getByAddress(String host, byte[] addr) Tạo đối tượng InetAddress dựa trên tên và địa chỉ IP |
static InetAddress | getByName(String host) Xác định địa chỉ IP của máy trạm từ tên của máy trạm (host) |
String | getCanonicalHostName() Lấy tên miền của địa chỉ IP |
String | getHostAddress() Trả về địa chỉ IP chứa trong đối tượng INetAddress là chuỗi dạng a.b.c.d |
String | getHostName() Trả về tên máy trạm chưa trong đối tượng |
static InetAdd | getLocalHost() Lấy đối tượng InetAddress của máy cục bộ |
int | hashCode() Trả về hashcode của địa chỉ IP cục thể |
Có thể bạn quan tâm!
- Công nghệ Java - 20
- Ứng Dụng Giao Tiếp Với Cơ Sở Dữ Liệu
- Cách Tạo Truy Vấn Và Các Kiểu Truy Vấn
- Ví Dụ Sử Dụng Các Phương Thức Lớp Inetaddress
- Kỹ Thuật Lập Trình Truyền Thông Với Giao Thức Tcp
- Kỹ Thuật Lập Trình Truyền Thông Với Giao Thức Udp
Xem toàn bộ 232 trang tài liệu này.
Đặc điểm của lớp InetAddress là lớp không có hàm tạo nên không thể tạo ra đối tượng InetAddress bằng toán tử new. Nhưng bù lại, lớp InetAddress có một số phương thức có thuộc tính static cho phép lấy địa chỉ của máy trạm bất kỳ trên mạng, cụ thể:
Tên phương thức | |
boolean | isAnyLocalAddress() Kiểm tra địa chỉ InetAddress có phải địa chỉ wildcard không? |
boolean | isLinkLocalAddress() Kiểm tra địa chỉ có phải là một địa chỉ link-local hay không. |
boolean | isLoopbackAddress() Kiểm tra địa chỉ có phải là địa chỉ Loopback không. |
boolean | isMCGlobal() Kiểm tra địa chỉ multicast có phạm vi toàn cục hay không? |
boolean | isMCLinkLocal() Kiểm tra địa chỉ multicast có phải là địa chỉ có phạm vi liên kết hay không? |
boolean | isMCNodeLocal() Kiểm tra địa chỉ multicast có phải là địa chỉ phạm vi nút mạng hay không? |
boolean | isMulticastAddress() Kiểm tra địa chỉ InetAddress có phải là địa chỉ IP multicast hay không. |
String | toString()Chuyển địa chỉ IP thành chuỗi. |