在 JSP 專案中存取 MySQL 資料庫,最基礎的是準備一張測試表(如 username,含 uid、pwd 欄位)並插入少量資料。本文示範兩種常見實作方式:JSP 內嵌 JDBC 程式碼與JavaBean 封裝資料存取邏輯,後者更符合 MVC 分層架構,利於維護與重用。
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>
<%
// 連線參數(請依實際環境修改)
String server = "localhost", dbName = "test", user = "root", pass = "your_pwd", port = "3306";
String url = "jdbc:mysql://" + server + ":" + port + "/" + dbName
+ "?user=" + user + "&password=" + pass + "&useUnicode=true&characterEncoding=GB2312";
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String sql = "SELECT * FROM username";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
out.print("用戶名:" + rs.getString("uid") + " 密碼:" + rs.getString("pwd") + "<br>");
}
rs.close(); stmt.close(); conn.close();
%>
缺點:業務邏輯與展示層耦合、連線資源管理易疏漏、難以單元測試。
conn.DBConnMySQLpackage conn;
import java.sql.*;
public class DBConnMySQL {
private Connection conn;
private String driver = "org.gjt.mm.mysql.Driver";
private String urlPrefix = "jdbc:mysql://";
public Connection getConnToMySQL(String server, String db, String user, String pass, String port) {
try {
String url = urlPrefix + server + ":" + port + "/" + db
+ "?user=" + user + "&password=" + pass
+ "&useUnicode=true&characterEncoding=GB2312";
Class.forName(driver);
conn = DriverManager.getConnection(url);
} catch (Exception e) {
System.out.println("資料庫連線失敗,請檢查參數:" + e.getMessage());
}
return conn;
}
public void close() {
try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}
}
編譯後的 .class 放置於 WEB-INF/classes/conn/ 目錄。
<%@ page contentType="text/html; charset=gb2312" import="java.sql.*" %>
<jsp:useBean id="DBConn" scope="page" class="conn.DBConnMySQL" />
<%
String server="localhost", db="test", user="root", pass="your_pwd", port="3306";
Connection conn = DBConn.getConnToMySQL(server, db, user, pass, port);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// 測試插入
stmt.executeUpdate("INSERT INTO username (uid, pwd) VALUES ('夢想年華','夢想年華')");
ResultSet rs = stmt.executeQuery("SELECT * FROM username");
while (rs.next()) {
out.print("用戶名:" + rs.getString("uid") + " 密碼:" + rs.getString("pwd") + "<br>");
}
DBConn.close(); // 統一關閉連線
%>
com.mysql.cj.jdbc.Driver (MySQL Connector/J 8.0+) 與 useSSL=false 等參數。PreparedStatement) 防止 SQL 注入,切勿直接拼接字串。finally 區塊或使用 try-with-resources (Java 7+)。