首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 通訊錄管理系統:Swing/JavaFX 界面與 MySQL/JDBC 數據庫完整實現指南

     編輯:程式設計綜合問答

技術棧選型

專案結構 (Maven 標準)


contact-manager/
├── src/main/java/com/example/contact/
│   ├── model/          # 實體類 Contact
│   ├── dao/            # 數據訪問接口及實現 ContactDAO / JdbcContactDAO
│   ├── service/        # 業務邏輯 ContactService
│   ├── ui/             # JavaFX Controller / FXML 界面邏輯
│   └── util/           # DBUtil, ConfigLoader
├── src/main/resources/
│   ├── db.properties   # 數據庫配置
│   ├── fxml/           # 界面布局 MainView.fxml, ContactDialog.fxml
│   └── css/            # 樣式 style.css
└── pom.xml

核心代碼實現

1. 實體類


public class Contact {
    private Long id;
    private String name;
    private String phone;
    private String email;
    private String address;
    private LocalDateTime createTime;
    // Getter/Setter/ToString...
}

2. 數據庫配置與連接池


// db.properties
jdbc.url=jdbc:mysql://localhost:3306/contact_db?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
jdbc.user=root
jdbc.password=123456
jdbc.pool.size=10

// DBUtil.java (單例連接池)
public class DBUtil {
    private static DataSource dataSource;
    static {
        Properties props = new Properties();
        props.load(DBUtil.class.getResourceAsStream("/db.properties"));
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl(props.getProperty("jdbc.url"));
        config.setUsername(props.getProperty("jdbc.user"));
        config.setPassword(props.getProperty("jdbc.password"));
        config.setMaximumPoolSize(Integer.parseInt(props.getProperty("jdbc.pool.size")));
        dataSource = new HikariDataSource(config);
    }
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}

3. DAO 層 (CRUD)


public interface ContactDAO {
    void add(Contact c);
    void update(Contact c);
    void delete(Long id);
    Contact getById(Long id);
    List getAll();
    List search(String keyword);
}

public class JdbcContactDAO implements ContactDAO {
    // 實現上述方法,使用 PreparedStatement 參數化
    // 示例:添加
    public void add(Contact c) {
        String sql = "INSERT INTO contacts (name, phone, email, address, create_time) VALUES (?,?,?,?,?)";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
            ps.setString(1, c.getName());
            ps.setString(2, c.getPhone());
            ps.setString(3, c.getEmail());
            ps.setString(4, c.getAddress());
            ps.setObject(5, c.getCreateTime());
            ps.executeUpdate();
            try (ResultSet rs = ps.getGeneratedKeys()) {
                if (rs.next()) c.setId(rs.getLong(1));
            }
        } catch (SQLException e) { throw new RuntimeException(e); }
    }
    // ... 其他方法類似
}

4. Service 層 (事務控制、業務規則)


public class ContactService {
    private ContactDAO dao = new JdbcContactDAO();
    
    public void addContact(Contact c) {
        if (c.getName() == null || c.getName().trim().isEmpty())
            throw new IllegalArgumentException("姓名不能為空");
        dao.add(c);
    }
    // ... 其他業務方法
}

5. JavaFX 界面 (FXML + Controller)




    

// MainController.java
public class MainController {
    @FXML private TableView contactTable;
    @FXML private TextField searchField;
    private ContactService service = new ContactService();
    private ObservableList data = FXCollections.observableArrayList();
    
    @FXML public void initialize() {
        contactTable.setItems(data);
        loadData();
        searchField.textProperty().addListener((obs, old, val) -> search(val));
    }
    
    private void loadData() {
        data.setAll(service.getAllContacts());
    }
    
    @FXML void handleAdd() {
        // 打開 ContactDialog.fxml 模態窗口,回調刷新
    }
    
    private void search(String kw) {
        data.setAll(service.searchContacts(kw));
    }
}

6. 數據庫初始化腳本


CREATE DATABASE contact_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE contact_db;
CREATE TABLE contacts (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    phone VARCHAR(20),
    email VARCHAR(100),
    address VARCHAR(200),
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

Eclipse/IDEA 運行步驟

  1. 安裝 JDK 11+、Maven、MySQL。
  2. 執行 SQL 腳本建庫建表。
  3. 修改 `db.properties` 連接信息。
  4. IDEA: `File → Open → 選擇 pom.xml` → `Maven Reload` → 運行 `Main` 類 (繼承 `Application`)。
  5. Eclipse: 安裝 `m2e` 插件 → `Import → Existing Maven Projects` → `Run As → Java Application` (Main 類)。

學習資源推薦

  • 官方教程:JavaFX 官方文檔、JDBC Trail。
  • 開源項目參考:GitHub 搜索 `javafx-contact-manager` / `swing-address-book`。
  • 書籍:《JavaFX 9 by Example》、《Head First Java》第 16 章 (JDBC)。

總結

**JavaFX + Maven + MySQL + JDBC/HikariCP** 是現代 Java 桌面應用標準棧。**分層架構 (Model/DAO/Service/UI)** 保證可維護性。**FXML 分離界面**、**ObservableList 雙向綁定**、**參數化防注入**、**連接池管理資源** 是核心最佳實踐。按上述結構逐步實現,即可完成高質量課程設計。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
層次推薦方案備選
UI 框架**JavaFX** (現代、FXML 分離、CSS 樣式、官方主推)Swing (成熟、文檔多、但外觀老舊)
數據庫**MySQL 8.0** / PostgreSQLH2 (嵌入式、無需安裝、適合演示)
訪問層**JDBC + Druid/HikariCP 連接池** (原生、可控)MyBatis / JPA (Hibernate) - 學習曲線較陡
構建工具**Maven / Gradle**Ant / 無 (不推薦)