控制台程序查詢 MySQL 並輸出結果,需遵循「加載驅動 → 建立連接 → 創建 Statement → 執行查詢 → 處理 ResultSet → 關閉資源」標準流程,並使用 try-with-resources 確保資源釋放。
import java.sql.*;
public class JdbcDemo {
private static final String URL = "jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASS = "password";
public static void main(String[] args) {
String sql = "SELECT id, username, email, create_time FROM users WHERE status = 1";
// try-with-resources 自動關閉 Connection、Statement、ResultSet
try (Connection conn = DriverManager.getConnection(URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
System.out.printf("%-5s %-15s %-30s %-20s%n", "ID", "Username", "Email", "Create Time");
System.out.println("---------------------------------------------------------------");
while (rs.next()) {
int id = rs.getInt("id");
String username = rs.getString("username");
String email = rs.getString("email");
Timestamp createTime = rs.getTimestamp("create_time");
System.out.printf("%-5d %-15s %-30s %-20s%n", id, username, email, createTime);
}
} catch (SQLException e) {
System.err.println("數據庫操作失敗: " + e.getMessage());
e.printStackTrace();
}
}
}
| 步驟 | 代碼 | 說明 |
|---|---|---|
| 加載驅動 | 無需顯式 `Class.forName` | JDBC 4.0+ (MySQL Connector/J 5.1+) 支持 SPI 自動發現 |
| 獲取連接 | `DriverManager.getConnection` | URL 含時區參數避免警告 |
| 執行查詢 | `stmt.executeQuery(sql)` | 返回 `ResultSet` 游標默認在第一行前 |
| 遍歷結果 | `while (rs.next())` | 每次調用移動到下一行,無數據返回 false |
| 取值方法 | `getInt`、`getString`、`getTimestamp` | 按列名/索引取值,類型需匹配 |
| 資源關閉 | try-with-resources | 編譯器自動生成 finally 關閉代碼,防洩漏 |
String sql = "SELECT * FROM users WHERE username = ? AND status = ?";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, "admin");
ps.setInt(2, 1);
try (ResultSet rs = ps.executeQuery()) { ... }
}