# JSP怎么連接MySQL數據庫
## 前言
Java Server Pages(JSP)作為Java EE技術體系中的重要組成部分,常被用于開發動態Web應用。而MySQL作為最流行的開源關系型數據庫之一,與JSP的結合能夠構建功能強大的數據驅動型網站。本文將詳細介紹在JSP中連接MySQL數據庫的完整流程,包含環境配置、驅動加載、連接建立、CRUD操作以及連接池優化等內容。
---
## 一、環境準備
### 1.1 軟件要求
- **JDK 1.8+**:運行Java程序的基礎環境
- **Tomcat 9+**:JSP運行的服務容器
- **MySQL 5.7+/8.0+**:數據庫服務器
- **MySQL Connector/J**:官方JDBC驅動(建議8.0.x版本)
### 1.2 項目結構
/WebContent ├── META-INF/ ├── WEB-INF/ │ ├── lib/ # 存放mysql-connector-java.jar │ ├── web.xml ├── jsp/ # JSP頁面目錄
---
## 二、MySQL驅動配置
### 2.1 下載驅動
從MySQL官網或Maven倉庫獲取最新驅動:
```xml
<!-- Maven依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
mysql-connector-java-x.x.xx.jar
WEB-INF/lib/
目錄下<%@ page import="java.sql.*" %>
<%
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
out.println("驅動加載失敗: " + e.getMessage());
}
%>
<%
String url = "jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
out.println("數據庫連接成功!");
} catch (SQLException e) {
out.println("連接失敗: " + e.getMessage());
} finally {
if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
}
%>
參數說明:
- useSSL=false
:禁用SSL(生產環境建議啟用)
- serverTimezone=UTC
:解決時區問題
<%
String sql = "SELECT * FROM users";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
out.println("ID: " + rs.getInt("id") +
", Name: " + rs.getString("name"));
}
} catch (SQLException e) {
out.println("查詢錯誤: " + e.getMessage());
}
%>
<%
String insertSQL = "INSERT INTO users(name,email) VALUES(?,?)";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
pstmt.setString(1, "張三");
pstmt.setString(2, "zhangsan@example.com");
int rows = pstmt.executeUpdate();
out.println("插入了 " + rows + " 行數據");
} catch (SQLException e) {
out.println("插入失敗: " + e.getMessage());
}
%>
<%
try (Connection conn = DriverManager.getConnection(url, user, password)) {
conn.setAutoCommit(false); // 關閉自動提交
// 執行多個SQL
// ...
conn.commit(); // 提交事務
} catch (SQLException e) {
conn.rollback(); // 回滾事務
out.println("事務執行失敗: " + e.getMessage());
}
%>
context.xml
中配置:<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"
username="root"
password="123456"
maxActive="100"
maxIdle="30"
maxWait="10000"/>
<%@ page import="javax.naming.*, javax.sql.*" %>
<%
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");
Connection conn = ds.getConnection();
// 使用連接...
conn.close(); // 實際是返還給連接池
} catch (Exception e) {
out.println("連接池錯誤: " + e.getMessage());
}
%>
錯誤信息:The server time zone value 'xxx' is unrecognized
解決方案:在連接URL添加?serverTimezone=Asia/Shanghai
警告信息:Establishing SSL connection...
解決方案:添加參數useSSL=false
(開發環境)或配置真實SSL證書
在連接字符串中添加:
?useUnicode=true&characterEncoding=UTF-8
通過本文的詳細講解,您應該已經掌握了在JSP中連接MySQL數據庫的核心技術。從基礎驅動加載到高級連接池配置,這些知識將幫助您構建更健壯的Java Web應用。建議在實際開發中結合框架(如Spring JDBC、MyBatis等)來進一步提升開發效率和系統穩定性。
擴展學習:
- MySQL官方文檔
- Java JDBC API文檔
- Apache DBCP連接池配置
“`
注:本文實際約2200字,包含了從基礎到進階的完整內容。如需精確控制字數,可適當刪減示例代碼或優化部分章節的詳細程度。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。