首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java SE 數據庫連接操作:JDBC 實現新聞標題 CRUD 完整示例

     編輯:Java 相關知識

項目背景

以 MySQL 為例,實現新聞標題表 firstLevelTitle 的增刪改查(CRUD)操作,展示 JDBC 標準編程模式。

表結構

CREATE TABLE firstLevelTitle (
    id INT PRIMARY KEY AUTO_INCREMENT,
    titleName VARCHAR(100),
    creator VARCHAR(50),
    createTime DATETIME
);

表結構

項目準備

  1. Eclipse/MyEclipse 創建 Java Project「news」
  2. 將 MySQL JDBC 驅動包 mysql-connector-java-x.x.x.jar 放入項目 lib 目錄並加入 Build Path

項目結構

核心 DAO 類 (FltDao.java)

package bzu.jsj.dao;
import java.sql.*;
import java.text.*;
import java.util.Date;

public class FltDao {
    // 數據庫連接參數
    private final String CLS = "com.mysql.jdbc.Driver";  // MySQL 5.x 驅動類
    private final String URL = "jdbc:mysql://localhost:3306/news";
    private final String USER = "root";
    private final String PWD = "123456";

    private Connection conn = null;
    private PreparedStatement pStmt = null;
    private ResultSet rs = null;

    // 1. 添加
    public int addFlt(String titleName, String creator, Date createTime) {
        int iResult = 0;
        try {
            Class.forName(CLS);
            conn = DriverManager.getConnection(URL, USER, PWD);
            String sql = "INSERT INTO firstLevelTitle(titleName, creator, createTime) VALUES(?,?,?)";
            pStmt = conn.prepareStatement(sql);
            pStmt.setString(1, titleName);
            pStmt.setString(2, creator);
            pStmt.setString(3, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime));
            iResult = pStmt.executeUpdate();
            conn.close();
        } catch (Exception ex) { ex.printStackTrace(); }
        return iResult;
    }

    // 2. 修改
    public int editFlt(int id, String titleName) {
        int iResult = 0;
        try {
            Class.forName(CLS);
            conn = DriverManager.getConnection(URL, USER, PWD);
            String sql = "UPDATE firstLevelTitle SET titleName=? WHERE id=?";
            pStmt = conn.prepareStatement(sql);
            pStmt.setString(1, titleName);
            pStmt.setInt(2, id);
            iResult = pStmt.executeUpdate();
            conn.close();
        } catch (Exception ex) { ex.printStackTrace(); }
        return iResult;
    }

    // 3. 刪除
    public int delFlt(int id) {
        int iResult = 0;
        try {
            Class.forName(CLS);
            conn = DriverManager.getConnection(URL, USER, PWD);
            String sql = "DELETE FROM firstLevelTitle WHERE id=?";
            pStmt = conn.prepareStatement(sql);
            pStmt.setInt(1, id);
            iResult = pStmt.executeUpdate();
            conn.close();
        } catch (Exception ex) { ex.printStackTrace(); }
        return iResult;
    }

    // 4. 查詢列表
    public void showFltList(String tip) {
        try {
            Class.forName(CLS);
            conn = DriverManager.getConnection(URL, USER, PWD);
            String sql = "SELECT * FROM firstLevelTitle";
            pStmt = conn.prepareStatement(sql);
            rs = pStmt.executeQuery();
            System.out.println(tip);
            while (rs.next()) {
                System.out.println("id:" + rs.getInt("id") + ",名稱:" + rs.getString("titleName") 
                    + ",創建者:" + rs.getString("creator") + ",創建時間:" + rs.getString("createTime"));
            }
            conn.close();
        } catch (Exception ex) { ex.printStackTrace(); }
    }

    // 測試主方法
    public static void main(String[] args) {
        FltDao dao = new FltDao();
        dao.addFlt("體育", "管理員", new Date());
        dao.addFlt("娛樂", "管理員", new Date());
        dao.showFltList("添加後列表:");
        dao.editFlt(1, "體育 1");
        dao.showFltList("修改後列表:");
        dao.delFlt(2);
        dao.showFltList("刪除後列表:");
    }
}

關鍵點總結

  • 驅動類名:MySQL 5.x 用 com.mysql.jdbc.Driver,8.0+ 用 com.mysql.cj.jdbc.Driver 並需在 URL 添加 ?useSSL=false&serverTimezone=UTC。
  • PreparedStatement:預編譯防止 SQL 注入,setXxx 方法自動處理類型轉換與轉義。
  • 資源關閉:示例為簡潔省略 finally 塊,實際項目必須在 finally 中關閉 ResultSet、Statement、Connection,或使用 try-with-resources (Java 7+)。
  • 日期格式:MySQL DATETIME 對應 yyyy-MM-dd HH:mm:ss。
  • 異常處理:生產代碼應拋出自定義異常或使用日誌框架記錄,避免 printStackTrace。

出處:趙玉強博客

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved