網路上 JDBC 教學多不夠詳細,本文記錄一次完整的「下載工具 → 建立資料庫 → 導入驅動 → 撰寫程式 → 驗證連線 → CRUD 封裝」實戰流程,供日後快速參考。
| 工具 | 用途 | 下載連結 |
|---|---|---|
| WAMP | 整合 Apache + MySQL + phpMyAdmin | 百度網盤 |
| MySQL Connector/J | JDBC 官方驅動 | 百度網盤 |
| Eclipse IDE | Java 開發環境(任意版本) | 官網免費下載 |
啟動 WAMP,瀏覽器開啟 https://localhost/phpmyadmin,執行 SQL:
CREATE DATABASE test;
USE test;
CREATE TABLE user (
name VARCHAR(20),
password VARCHAR(20)
);
INSERT INTO user VALUES ('huzhiheng', '123456');
mysql-connector-java-x.x.xx-bin.jar → 確定Referenced Libraries 出現該 jar 即成功import java.sql.*;
public class MysqlJdbc {
public static void main(String[] args) {
// 1. 載入驅動
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Success loading Mysql Driver!");
} catch (Exception e) {
System.out.print("Error loading Mysql Driver!");
e.printStackTrace();
}
// 2. 建立連線、查詢、關閉資源
try (Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user")) {
System.out.println("Success connect Mysql server!");
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (Exception e) {
System.out.print("get data error!");
e.printStackTrace();
}
}
}
預期輸出:
Success loading Mysql Driver!
Success connect Mysql server!
huzhiheng
以下方法展示新增、刪除、查詢、更新的典型寫法(實際專案建議使用 PreparedStatement 防止 SQL 注入):
public void add(String name, String character, String introduce) throws SQLException {
String sql = "INSERT INTO game(gamename, gamecharacter, gameintroduce) VALUES (?, ?, ?)";
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, "");
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, name);
ps.setString(2, character);
ps.setString(3, introduce);
ps.executeUpdate();
}
}
public void delete(String name) throws SQLException {
String sql = "DELETE FROM game WHERE gamename = ?";
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, "");
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, name);
ps.executeUpdate();
}
}
public void query(String name, JLabel showName, JLabel character, JLabel introduce) throws SQLException {
String sql = "SELECT gamename, gamecharacter, gameintroduce FROM game WHERE gamename = ?";
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, "");
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, name);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
showName.setText(rs.getString("gamename"));
character.setText(rs.getString("gamecharacter"));
introduce.setText(rs.getString("gameintroduce"));
}
}
}
}
public void update(String name, String character, String introduce) throws SQLException {
String sql = "UPDATE game SET gamecharacter = ?, gameintroduce = ? WHERE gamename = ?";
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, "");
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, character);
ps.setString(2, introduce);
ps.setString(3, name);
ps.executeUpdate();
}
}
PreparedStatement 替代字串拼接,防止 SQL 注入。try-with-resources 中自動關閉。