針對初學者最常用的 **Oracle、SQL Server** 兩大數據庫,提供最精簡、可直接複製運行的 JSP 連接代碼,並標註關鍵配置項,避開 ClassNotFound、URL 錯誤、編碼亂碼三大坑。
WEB-INF/lib (Maven 專案加入 pom.xml)。CREATE TABLE test (test1 VARCHAR(20), test2 VARCHAR(20));INSERT INTO test VALUES ('Hello', 'World');<%@ page import="java.sql.*" contentType="text/html;charset=UTF-8" %>
<html><body>
<%
// 1. 驅動類 (JDBC 4.0+ 可省略 Class.forName)
// Class.forName("oracle.jdbc.OracleDriver");
// 2. 連接 URL - 兩種寫法擇一
// SID 寫法 (傳統)
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
// Service Name 寫法 (支援 RAC/PDB,12c+ 推薦)
// String url = "jdbc:oracle:thin:@//localhost:1521/PDB1";
Connection conn = DriverManager.getConnection(url, "scott", "tiger");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM test");
while (rs.next()) {
%>
欄位1: <%= rs.getString(1) %>, 欄位2: <%= rs.getString(2) %><br/>
<%
}
rs.close(); stmt.close(); conn.close();
%>
<b>連接成功!</b>
</body></html>
驅動選擇:
ojdbc8.jarojdbc11.jarcom.oracle.database.jdbc:ojdbc8 / ojdbc11 (需 Oracle Maven 倉庫認證)<%@ page import="java.sql.*" contentType="text/html;charset=UTF-8" %>
<html><body>
<%
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// URL 關鍵參數
String url = "jdbc:sqlserver://localhost:1433;" +
"databaseName=pubs;" +
"encrypt=false;" + // 開發環境關閉加密
"trustServerCertificate=true;" // 信任自簽憑證
Connection conn = DriverManager.getConnection(url, "sa", "YourStrongPassword");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM test");
while (rs.next()) {
%>
欄位1: <%= rs.getString(1) %>, 欄位2: <%= rs.getString(2) %><br/>
<%
}
rs.close(); stmt.close(); conn.close();
%>
<b>連接成功!</b>
</body></html>
驅動選擇:
com.microsoft.sqlserver:mssql-jdbc:12.4.2.jre11 (根據 JDK 版本選 jre8/jre11/jre17)mssql-jdbc-12.4.2.jre11.jar| 現象 | 原因 | 解決 |
|---|---|---|
| ClassNotFoundException | 驅動 JAR 未在 WEB-INF/lib / Maven 作用域非 compile | 檢查打包產物 WEB-INF/lib/ 是否存在 JAR |
| ORA-12505 / SID 不存在 | URL 中 SID/Service Name 錯誤 | 數據庫服務器執行 lsnrctl status 確認實例名 |
| Communications link failure | IP/端口/防火牆/數據庫未啟動 | telnet host port 測試;關閉防火牆或開放端口 |
| 中文亂碼 | 字符集不一致 | URL 加 characterEncoding=UTF-8;DB/表/列/連接統一 UTF-8 (Oracle: AL32UTF8) |
| SQL Server 加密錯誤 | 2016+ 默認加密 | 開發加 encrypt=false;生產配置有效憑證 |
<%@ page import="java.sql.*, javax.naming.*, javax.sql.*" %>
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MyDS");
try (Connection conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT * FROM test");
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
out.print("欄位1: " + rs.getString(1) + ", 欄位2: " + rs.getString(2) + "<br/>");
}
}
%>
Tomcat context.xml 配置:
<Resource name="jdbc/MyDS"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@//localhost:1521/PDB1"
username="scott"
password="tiger"
maxTotal="20"
maxIdle="10"
validationQuery="SELECT 1 FROM DUAL"
testOnBorrow="true"/>