在 JSP 開發中,常見需求是根據用戶名(username)從 user 表查詢對應的姓名(name),並將該值存入 Session。資料表結構包含 6 個欄位,主鍵為 id,表名為 user。若使用 SELECT * FROM user WHERE username = 'zeng' 會取回整行資料,但實際只需要 name 欄位,該如何優化 SQL 與 Java 代碼?
將 SELECT * 改為明確指定欄位:
SELECT name FROM user WHERE username = 'zeng'
這樣資料庫僅傳回單一欄位,減少網路傳輸與記憶體佔用。
以下示範使用 JDBC 取得單一欄位值並存入 Session:
<%@ page import="java.sql.*" %>
<%
String username = "zeng";
String url = "jdbc:mysql://localhost:3306/yourdb";
String dbUser = "root";
String dbPass = "password";
try (Connection conn = DriverManager.getConnection(url, dbUser, dbPass);
PreparedStatement ps = conn.prepareStatement("SELECT name FROM user WHERE username = ?")) {
ps.setString(1, username);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
String name = rs.getString("name");
session.setAttribute("userName", name);
out.println("已存入 Session: " + name);
} else {
out.println("查無此用戶");
}
}
} catch (SQLException e) {
e.printStackTrace();
out.println("資料庫錯誤: " + e.getMessage());
}
%>
PreparedStatement 防止 SQL 注入。try-with-resources 自動關閉資源。session 供後續頁面使用。