JComboBox – Display and Value from Item


Do quá trình làm đồ án Java có nhiều bạn gặp khó khăn trong việc load dữ liệu vào JComboBox. Trong bài này tôi hướng dẫn một đoạn code nhỏ để các bạn tham khảo.

image

Bước 1: Định nghĩa nội dung cho một phần tử trong ds của JComboBox

1 class Item { 2 public Item(int id, String name, int price) { 3 this.id = id; 4 this.name = name; 5 this.price = price; 6 } 7 8 private int id; 9 private String name; 10 private int price; 11 12 public int getId() { 13 return id; 14 } 15 16 public void setId(int id) { 17 this.id = id; 18 } 19 20 public String getName() { 21 return name; 22 } 23 24 public void setName(String name) { 25 this.name = name; 26 } 27 28 @Override 29 public String toString() { 30 return getName() + "\t" + getPrice(); 31 } 32 33 public int getPrice() { 34 return price; 35 } 36 37 public void setPrice(int price) { 38 this.price = price; 39 } 40 }

Bước 2: Gán dữ liệu vào danh sách và đưa lên JComboBox

1 private void load() 2 { 3 DefaultComboBoxModel model = new DefaultComboBoxModel(); 4 model.addElement(new Item(1,"Mit",8000)); 5 model.addElement(new Item(2,"Cam", 15000)); 6 model.addElement(new Item(2,"Xoai", 20000)); 7 jComboBox1.setModel(model); 8 }

Bước 3: Nhận giá trị (khóa, ID) của từ JComboBox khi chọn một phần từ từ giao diện

– Đăng ký sự kiện chọn phần tử từ ds

1 private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) { 2 this.setTitle( ((Item)jComboBox1.getSelectedItem()).getId()+""); 3 }

Tới đây chạy lại from để quan sát kết quả.

 

Mã nguồn tham khảo ở đây

http://1drv.ms/10JvXRm

Video tham khảo

http://youtu.be/wvJ155iuni0?list=UUQ8F8U5jZwjS4MZ5JYX5W2A

Advertisements

Sử dụng Transaction trên JDBC


Như đã nêu ở bài trước bài này chúng ta sẽ làm ví dụ về quản lý Transaction và batch execute trên jdbc.

JDBC cho phép thực thì hàng loạt thao tác trong một lần gởi yêu cần về server dữ liệu (batch).

Chúng ta ví dụ thêm dữ liệu và 02 bảng đồng thời (Semester và Subject của bài trước).

1 Connection conn; 2 conn = DriverManager.getConnection(jdbc:sqlserver://localhost;user=sa;password=sa;database=java;); 3 // khoi tao transaction 4 conn.setAutoCommit(false); 5 Statement command = conn.createStatement(); 6 command.addBatch(insert into semester(id,name) values(1,’Semester 1′)); 7 command.addBatch(insert into subject(id,sem_id,name) values(1,1,’HTML’)); 8 command.addBatch(insert into subject(id,sem_id,name) values(2,1,’Java’)); 9 command.addBatch(insert into subject(id,sem_id,name) values(2,1,’csharpe’)); 10 command.executeBatch(); 11 // cap nhat thay doi du lieu ve server 12 conn.setAutoCommit(true);

Nhìn vào đoạn mã trên chúng ta thấy rằng sẽ có 03 dòng dữ liệu được thêm vào hệ thống nhưng dòng cuối cùng thì lỗi trùng khóa chính. Với lệnh

1 conn.setAutoCommit(false);

Chúng ta đã báo cho jdbc biết rằng những thay đổi mà chúng ta đã thực hiện thì chỉ được chấp nhận khi nào chúng ta gọi lệnh

1 conn.setAutoCommit(true);

Do đó, khi chạy ứng dụng chúng ta sẽ kg có dòng nào được thêm vào dữ liệu ở đây do dòng 09 phát sinh lỗi nên dòng 12 sẽ không được thực thi.

Sử dụng stored procedure trong jdbc


 

Cấu trúc dữ liệu

1 IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Semester]') AND type in (N'U')) 2 DROP TABLE [dbo].[Semester] 3 GO 4 5 CREATE TABLE [dbo].[Semester]( 6 [id] [int] NOT NULL, 7 [name] [nvarchar](50) NULL, 8 CONSTRAINT [PK_Semester] PRIMARY KEY CLUSTERED 9 ( 10 [id] ASC 11 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 12 ) ON [PRIMARY] 13 14 GO 15 16 IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Subject]') AND type in (N'U')) 17 DROP TABLE [dbo].[Subject] 18 GO 19 20 CREATE TABLE [dbo].[Subject]( 21 [id] [int] NOT NULL, 22 [sem_id] [int] NOT NULL, 23 [name] [nvarchar](50) NULL, 24 [duration] [int] NULL, 25 CONSTRAINT [PK_Subject] PRIMARY KEY CLUSTERED 26 ( 27 [id] ASC, 28 [sem_id] ASC 29 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 30 ) ON [PRIMARY] 31 32 GO

Tạo một storeprocedure như sau

1 CREATE PROCEDURE ListAll 2 @Sem_id int 3 AS 4 BEGIN 5 SELECT * From Subject where sem_id = @Sem_id 6 END 7 GO

Như vậy chúng ta sẽ có được một thủ tục tên là “ListAll”. Đoạn mã sau dùng để gọi thực thi thủ tục trên

1 public void jdbcSQLServer() { 2 try { 3 // dang ky driver 4 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 5 Connection conn; 6 // thiet lap ke noi 7 conn = DriverManager.getConnection("jdbc:sqlserver://localhost;user=sa;password=sa;database=java;"); 8 // khoi tao loi goi thuc thi thu tuc 9 CallableStatement command = conn.prepareCall("{call ListAll (?)}"); 10 // cung cap gia tro cho bien 11 command.setInt(1, 1); 12 ResultSet result = command.executeQuery(); 13 // duyet ket qua 14 while (result.next()) { 15 System.out.print(result.getInt("id")); 16 System.out.println(" - " + result.getString("name")); 17 } 18 // dong ket noi 19 conn.close(); 20 } catch (Exception ex) { 21 ex.printStackTrace(); 22 } 23 }

Gọi thực thi đoạn mã trên chúng ta có kết quả sau

1 –  HTML
2 –  Java

====>>>> Bài tiếp theo chúng ta tìm hiểu Transaction trên jdbc.

Căn bản về JDBC – Từng bước kết nối dữ liệu SQL server


  1. Đăng ký Driver.
  2. Thiết lập kết nối với DataBase Server.
  3. Tạo và thực thi câu lệnh.
  4. Xử lý kết quả và đóng kết nối.

Để đăng ký JDBC drive chúng ta sử dụng hàm forName của lớp Class

Đối với odbc:

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

Cần đăng ký odbc user với hệ điều hành windows (tôi sẽ demo trực tiếp)

http://youtu.be/iRBQm1YrSHY

Đối với jdbc:

Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);

Cần nhúng thư viện jdbc của sql server vào ứng dụng. download tại jdbc sqlserver driver (phần nhúng vào tôi sẽ demo trực tiếp)

http://youtu.be/cRyPUvkZx-U

Tiếp theo, chúng ta thiết lập kết nối.

Đối với loại kết nối thứ 4 cho sql server

Connection conn = DriverManager.getConnection(“jdbc:sqlserver://localhost;user=sa;password=sa;database=Northwind;”);

Đối với loại kết nối thứ 1

Connection con = DriverManager.getConnection(“jdbc:odbc:demo”, “sa”,”sa”);

Bước kế tiếp chúng ta tạo câu lệnh đọc dữ liệu và đón nhận thông qua ResultSet

Với odbc

Statement command = con.createStatement();
ResultSet result = command.executeQuery(“Select * from Employees”);

Với jdbc loại 4

PreparedStatement command = conn.prepareStatement(“Select * from Employees where employeeid like ?”);
command.setInt(1,id);
ResultSet result = command.executeQuery();

Đoạn trên chúng ta sử dụng dấu ? để tham qui định tham số trong câu lệnh truy vấn, sử dụng các setXXX(số thứ tự tham số bắt đầu = 1) với XXX là loại dữ liệu mối gán vào.

Thao tác cuối cùng là xử lý dữ liệu đã nhận về và đóng kết nối với database server. Trong phần này chúng ta chỉ đơn giản là liệt kê các cột dữ liệu gồm: tên cột, loại dữ liệu và ràng buộc của cột dữ liệu, hiển thị toàn bộ dữ liệu đã nhận được.

1. Thể hiện cấu trúc dữ liệu lấy về (giống nhau cho cả hai loại driver mà chúng ta đã thực hiện lý do là dữ liệu đã lấy về ứng dụng đề được chứa trong ResultSet

ResultSetMetaData rsm = result.getMetaData();

int count = rsm.getColumnCount();
  for(int i=0; i<count;i++) {
     System.out.print(“Col ” + rsm.getColumnName(i+1));
     System.out.println(“is”+rsm.getColumnTypeName(i+1));
}

Chạy thử ứng dụng chúng ta có kết quả như sau:

Col EmployeeID is int identity
Col LastName is nvarchar
Col FirstName is nvarchar
Col Title is nvarchar
Col TitleOfCourtesy is nvarchar
Col BirthDate is datetime
Col HireDate is datetime
Col Address is nvarchar
Col City is nvarchar
Col Region is nvarchar
Col PostalCode is nvarchar
Col Country is nvarchar
Col HomePhone is nvarchar
Col Extension is nvarchar
Col Photo is image
Col Notes is ntext
Col ReportsTo is int
Col PhotoPath is nvarchar
Col Image is nvarchar
Col Hinh is varchar
Col Gender is bit

2. Duyệt và in kết quả ra màn hình

for (int i = 0; i < count; i++) {
  System.out.print(“Col”+rsm.getColumnName(i+1) + “\t”);
}
System.out.println();
while (result.next()) {
  for (int i = 0; i < count; i++) {
   System.out.print(“Col”+result.getString(i + 1)+ “\t”);
  }
  System.out.println(“”);
}

Chạy ứng dụng chúng ta có kết quả sau:

EmployeeID    LastName    FirstName    Title    TitleOfCourtesy   
1    Ngo Tuong Dan    Ngo    null    Ms.   
2    Fuller    Andrew    Vice President, Sales    Dr.   
3    Leverling    Janet    null    Ms.   
4    Peacock    Margaret    Sales Representative    Mrs.   
5    Buchanan    Steven    Sales Manager    Mr.   
6    Suyama    Michael    Sales Representative    Mr.   
7    King    Robert    Sales Representative    Mr.   
8    Callahan    Lauradddd    Inside Sales Coordinator    Ms.

Cuối cùng là đóng kết nối với database server

con.close();

Như vậy là chúng ta đã thực hiện được những thao tác rất rất cơ bản trong sử dụng jdbc để đọc dữ liệu.

>>>> Bài tiếp theo tôi sẽ thực hiện gọi hàm và thủ tục.