快速配置清單
- JDK:安裝並配置
JAVA_HOME、PATH。
- MySQL:安裝服務,記住 root 密碼。
- 驅動包:下載
mysql-connector-java,放入項目 WEB-INF/lib 或 Maven 依賴:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>
數據庫初始化腳本
CREATE DATABASE IF NOT EXISTS demo_db CHARACTER SET utf8mb4;
USE demo_db;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com'), ('bob', 'bob@example.com');
通用 JDBC 工具類
public class JdbcUtil {
private static final String URL = "jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
private static final String USER = "root";
private static final String PASS = "123456";
static {
try { Class.forName("com.mysql.cj.jdbc.Driver"); }
catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); }
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASS);
}
public static void close(Connection c, Statement s, ResultSet r) {
try { if (r != null) r.close(); } catch (SQLException ignored) {}
try { if (s != null) s.close(); } catch (SQLException ignored) {}
try { if (c != null) c.close(); } catch (SQLException ignored) {}
}
}
CRUD 操作示例
public class UserDao {
public void insert(User u) {
String sql = "INSERT INTO users(username, email) VALUES(?, ?)";
try (Connection c = JdbcUtil.getConnection();
PreparedStatement ps = c.prepareStatement(sql)) {
ps.setString(1, u.getUsername());
ps.setString(2, u.getEmail());
ps.executeUpdate();
} catch (SQLException e) { e.printStackTrace(); }
}
public List<User> selectAll() {
List<User> list = new ArrayList<>();
String sql = "SELECT * FROM users";
try (Connection c = JdbcUtil.getConnection();
PreparedStatement ps = c.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
User u = new User();
u.setId(rs.getInt("id"));
u.setUsername(rs.getString("username"));
u.setEmail(rs.getString("email"));
list.add(u);
}
} catch (SQLException e) { e.printStackTrace(); }
return list;
}
// update、delete 同理使用 PreparedStatement 防注入
}
最佳實踐提醒
- 優先使用
PreparedStatement 防止 SQL 注入並提升性能。
- 資源關閉採用 try-with-resources(JDK 7+)自動管理。
- 生產環境必須接入連接池,避免頻繁創建銷毀連接。
- 異常處理建議拋出自定義業務異常,由上層統一處理。