Đối với các ứng dụng đơn giản thì chúng ta có thể lưu trữ dữ liệu và truy xuất từ tập tin sử dụng Java IO là đã đủ. Thế nhưng đối với một ứng dụng phức tạp cần tổ chức dữ liệu để lưu trữ và truy xuất nhanh chóng thì chắc chắn chúng ta phải dùng đến database.
Chẳng đâu ra, nếu các bạn học Java và Java Swing ở trường thì đồ án có nguy cơ cao là bắt buộc sử dụng database để lưu trữ dữ liệu. Trước đây mình cũng đã từng làm những đồ án như vậy và cảm thấy rất khó khăn khi cấu hình project, nào là tải file jar, import vào các thứ. Rồi khi nộp đồ án quên nộp file jar (thư viện) ông thầy ổng không chạy được lại phải xách đít lên phúc khảo thế nhưng kết quả vẫn bị trừ điểm vì ẩu tả.
Thế nhưng, trong bài viết này mình sẽ hướng dẫn các bạn sử dụng maven để tải các gói jar tự động, không cần phải tự tải tay nữa. Thêm một ưu điểm khi sử dụng maven là khi nộp bài các bạn không cần phải nộp kèm các file jar nữa, thầy chỉ cần lấy mã nguồn về và chạy lệnh install thì các gói jar sẽ được lấy và import tự động vào.
Các công cụ cần thiết
Để hoàn thành bài này, mình sử dụng những công cụ sau:
- JDK 1.8
- MySQL Connector Java – 8.0.13
- Maven
- IntellIJ IDE
Maven project
Hiện nay các IDE nỗi tiếng như Eclipse và IntellIJ đều đã hỗ trợ tạo project maven một cách nhanh chóng. Nếu các bạn chưa biết các tạo project maven trong Eclipse và IntellIJ thì có thể tham khảo tại đây.
Mỗi project maven sẽ có một file POM.XML chứa các meta mô tả các thông tin cần thiết của dự án. Trong đó chúng ta sẽ khai báo các thư viện mà dự án sẽ sử dụng, khi chúng ta chạy lệnh maven install thì các gói jar sẽ được tự động tải về. Hoặc các IDE đã hỗ trợ sẵn UI các bạn chỉ cần nhấp chuột một cái là xong thôi.
Sau khi tạo maven project xong, các bạn cần thêm MySQL Connector Java dependency vào file pom như sau
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>swing_connect_database</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> </dependencies> </project>
Database setup
Tiếp theo để thao tác với database thì các bạn cần đảm bảo máy của mình đã cài đặt Mysql database. Tiến hành tạo một database mới theo lệnh sau:
create database swing_demo;
Tạo một bảng account dùng để lưu trữ thông tin người dùng đăng ký
CREATE TABLE account ( first_name varchar(250) NOT NULL, last_name varchar(250) NOT NULL, user_name varchar(250) NOT NULL, password varchar(250), email_id varchar(250) NOT NULL, mobile_number varchar(250) NOT NULL );
Đăng ký user – Java Swing
Sau khi các bước cấu hình đầu tiên đã hoàn thành, giờ chúng ta sẽ thiết kết giao diện đăng ký thỏa mãn các cột dữ liệu trong bảng account.
Mình sẽ tạo UserRegistration class để triển khai giao diện tương ứng như hình trên.
import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class UserRegistration extends JFrame { private static final long serialVersionUID = 1L; private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/swing_demo?serverTimezone=UTC"; private static final String DATABASE_USER_NAME = "root"; private static final String DATABASE_PASSWORD = "admin"; private JPanel contentPane; private JTextField firstname; private JTextField lastname; private JTextField email; private JTextField username; private JTextField mob; private JPasswordField passwordField; private JButton btnNewButton; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { UserRegistration frame = new UserRegistration(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public UserRegistration() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(450, 190, 1014, 597); setResizable(false); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JLabel lblNewUserRegister = new JLabel("Dang ky tai khoan"); lblNewUserRegister.setFont(new Font("Times New Roman", Font.PLAIN, 42)); lblNewUserRegister.setBounds(362, 52, 325, 50); contentPane.add(lblNewUserRegister); JLabel lblName = new JLabel("First name"); lblName.setFont(new Font("Tahoma", Font.PLAIN, 20)); lblName.setBounds(58, 152, 99, 43); contentPane.add(lblName); JLabel lblNewLabel = new JLabel("Last name"); lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 20)); lblNewLabel.setBounds(58, 243, 110, 29); contentPane.add(lblNewLabel); JLabel lblEmailAddress = new JLabel("Email\r\n address"); lblEmailAddress.setFont(new Font("Tahoma", Font.PLAIN, 20)); lblEmailAddress.setBounds(58, 324, 124, 36); contentPane.add(lblEmailAddress); firstname = new JTextField(); firstname.setFont(new Font("Tahoma", Font.PLAIN, 32)); firstname.setBounds(214, 151, 228, 50); contentPane.add(firstname); firstname.setColumns(10); lastname = new JTextField(); lastname.setFont(new Font("Tahoma", Font.PLAIN, 32)); lastname.setBounds(214, 235, 228, 50); contentPane.add(lastname); lastname.setColumns(10); email = new JTextField(); email.setFont(new Font("Tahoma", Font.PLAIN, 32)); email.setBounds(214, 320, 228, 50); contentPane.add(email); email.setColumns(10); username = new JTextField(); username.setFont(new Font("Tahoma", Font.PLAIN, 32)); username.setBounds(707, 151, 228, 50); contentPane.add(username); username.setColumns(10); JLabel lblUsername = new JLabel("Username"); lblUsername.setFont(new Font("Tahoma", Font.PLAIN, 20)); lblUsername.setBounds(542, 159, 99, 29); contentPane.add(lblUsername); JLabel lblPassword = new JLabel("Password"); lblPassword.setFont(new Font("Tahoma", Font.PLAIN, 20)); lblPassword.setBounds(542, 245, 99, 24); contentPane.add(lblPassword); JLabel lblMobileNumber = new JLabel("Mobile number"); lblMobileNumber.setFont(new Font("Tahoma", Font.PLAIN, 20)); lblMobileNumber.setBounds(542, 329, 139, 26); contentPane.add(lblMobileNumber); mob = new JTextField(); mob.setFont(new Font("Tahoma", Font.PLAIN, 32)); mob.setBounds(707, 320, 228, 50); contentPane.add(mob); mob.setColumns(10); passwordField = new JPasswordField(); passwordField.setFont(new Font("Tahoma", Font.PLAIN, 32)); passwordField.setBounds(707, 235, 228, 50); contentPane.add(passwordField); btnNewButton = new JButton("Dang ky"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String firstName = firstname.getText(); String lastName = lastname.getText(); String emailId = email.getText(); String userName = username.getText(); String mobileNumber = mob.getText(); int len = mobileNumber.length(); String password = passwordField.getText(); String msg = "" + firstName; msg += " \n"; if (len != 10) { JOptionPane.showMessageDialog(btnNewButton, "So dien thoai phai chua 10 chu so"); return; } try { Connection connection = DriverManager.getConnection(DATABASE_URL, DATABASE_USER_NAME, DATABASE_PASSWORD); String query = "INSERT INTO account values('" + firstName + "','" + lastName + "','" + userName + "','" + password + "','" + emailId + "','" + mobileNumber + "')"; Statement sta = connection.createStatement(); int x = sta.executeUpdate(query); if (x == 0) { JOptionPane.showMessageDialog(btnNewButton, "Tai khoan da ton tai"); } else { JOptionPane.showMessageDialog(btnNewButton, "Chao mung, " + msg + "Ban da tao tai khoan thanh cong"); } connection.close(); } catch (Exception exception) { exception.printStackTrace(); } } }); btnNewButton.setFont(new Font("Tahoma", Font.PLAIN, 22)); btnNewButton.setBounds(399, 447, 259, 74); contentPane.add(btnNewButton); } }
Trong đó các bạn cần lưu ý cho mình
- DATABASE_URL – đường dẫn đến database trong máy local
- DATABASE_USER_NAME – Tên người dùng login vào mysql database, phụ thuộc vào bạn đặt thế nào trong lúc cài đặt.
- DATABASE_PASSWORD – Mật khẩu dùng login vào mysql database, phụ thuộc vào bạn đặt thế nào trong lúc cài đặt.
Do vậy nếu bạn sao chép y chang thì có thể không chạy được vì user/password của mình khác nhau.
Demo
Sau khi hoàn thành UserRegistration class, chúng ta có thể khởi chạy ứng dụng tạo hàm main
Bước 1 nhập các thông tin cần thiết vào mẫu đăng ký
Bước 2: Click vào nút Dang ky
Bước 3: Kiểm tra database
Nguồn