前置準備
- MySQL 建立測試表:
CREATE TABLE username (uid VARCHAR(20), pwd VARCHAR(20)); 插入測試資料。
- 下載
mysql-connector-java.jar 放入 WEB-INF/lib。
模式一:JSP 直連 JDBC
<%@ page import="java.sql.*" contentType="text/html;charset=gb2312" %>
<%
String url = "jdbc:mysql://localhost:3306/test?user=root&password=chfanwsp&useUnicode=true&characterEncoding=GB2312";
Class.forName("com.mysql.jdbc.Driver"); // 5.1+ 版本
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM username");
while (rs.next()) {
out.println("用戶名: " + rs.getString("uid") + " 密碼: " + rs.getString("pwd") + "
");
}
rs.close(); stmt.close(); conn.close();
%>
模式二:JavaBean 封裝連線 (DBConnMySql.java)
package conn;
import java.sql.*;
public class DBConnMySql {
public Connection getConnToMySql(String server, String db, String user, String pass, String port) {
String url = "jdbc:mysql://" + server + ":" + port + "/" + db
+ "?user=" + user + "&password=" + pass + "&useUnicode=true&characterEncoding=GB2312";
try {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection(url);
} catch (Exception e) { e.printStackTrace(); return null; }
}
public void close(Connection conn) {
try { if (conn!=null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}
}
JSP 調用 Bean
<jsp:useBean id="DBConn" scope="page" class="conn.DBConnMySql"/>
<%
Connection conn = DBConn.getConnToMySql("localhost", "test", "root", "chfanwsp", "3306");
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT * FROM username");
while (rs.next()) { out.println("用戶名: " + rs.getString("uid") + " 密碼: " + rs.getString("pwd") + "
"); }
DBConn.close(conn);
%>
最佳實務補充
- 驅動類別:MySQL 8.0+ 使用
com.mysql.cj.jdbc.Driver,URL 需加 serverTimezone=UTC。
- 連線池:生產環境必須使用
DataSource (HikariCP/DBCP2/Tomcat JDBC Pool) + JNDI 查找。
- PreparedStatement:防止 SQL 注入,效能更佳。
- 編碼統一:資料庫、表、連線、JSP 全部 UTF-8,避免亂碼。
- 資源關閉:使用 try-with-resources (Java 7+) 自動關閉。