首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JSP 連接數據庫方法大全 (重複內容優化版):七大主流數據庫 JDBC 連接模板與最佳實踐

     編輯:Java 相關知識

說明

本文內容與 ID 110805 高度重複,此處提供**去重優化、補充最佳實踐、修正驅動版本**的精簡版,供快速參考。完整詳細版請參考《JSP 連接主流數據庫完全指南》(ID: 110805)。

核心區別:生產環境禁用 JSP 直連,必須使用連接池

<!-- Tomcat context.xml 配置 JNDI DataSource (以 MySQL 為例) -->
<Resource name="jdbc/MyDB"
          auth="Container"
          type="javax.sql.DataSource"
          driverClassName="com.mysql.cj.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai"
          username="user"
          password="pwd"
          maxTotal="20"
          maxIdle="10"
          maxWaitMillis="10000"
          />

JSP 中獲取:

<%@ page import="javax.naming.*, javax.sql.*, java.sql.*" %>
<%
    Context ctx = new InitialContext();
    DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MyDB");
    Connection conn = ds.getConnection();
    // ... 業務邏輯
    conn.close(); // 歸還池,非物理關閉
%>

七大數據庫驅動類名與 URL 速查 (修正版)

數據庫推薦驅動類名 (最新版)JDBC URL 模板關鍵參數
Oracle 11g/12c/19c oracle.jdbc.OracleDriver (ojdbc8.jar) jdbc:oracle:thin:@//host:1521/service_name Service Name 優於 SID; oracle.net.CONNECT_TIMEOUT
SQL Server 2012+ com.microsoft.sqlserver.jdbc.SQLServerDriver (mssql-jdbc) jdbc:sqlserver://host:1433;databaseName=db;encrypt=true;trustServerCertificate=true encrypt=true (Azure/雲必需); trustServerCertificate=true (自簽證書)
DB2 11+ com.ibm.db2.jcc.DB2Driver (jcc.jar / db2jcc4.jar) jdbc:db2://host:50000/dbname Type 4 純 Java; currentSchema=xxx 指定 Schema
MySQL 8.0 com.mysql.cj.jdbc.Driver (mysql-connector-j 8.x) jdbc:mysql://host:3306/db?characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai 必加 serverTimezone; allowPublicKeyRetrieval=true (非SSL)
PostgreSQL 13+ org.postgresql.Driver (postgresql.jar) jdbc:postgresql://host:5432/db?currentSchema=public 支持 reWriteBatchedInserts=true 批次優化
Sybase ASE 16 com.sybase.jdbc4.jdbc.SybDriver (jConnect 7+) jdbc:sybase:Tds:host:5000/dbname Properties 傳 user/password; CHARSET=utf8
Informix 14 com.informix.jdbc.IfxDriver (ifxjdbc.jar) jdbc:informix-sqli://host:port/db:INFORMIXSERVER=myserver INFORMIXSERVER 必填; IFX_LOCK_MODE_WAIT=10

通用 JSP 模板 (僅供原型/測試,含資源安全關閉)

<%@ page import="java.sql.*, javax.naming.*, javax.sql.*" contentType="text/html;charset=UTF-8" %>
<%
    String driver = "com.mysql.cj.jdbc.Driver"; // 修改此處切換數據庫
    String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai";
    String user = "root";
    String pwd = "123456";

    Connection conn = null;
    PreparedStatement pstmt = null; // 推薦 PreparedStatement 防注入
    ResultSet rs = null;

    try {
        // Class.forName(driver); // JDBC 4.0+ 可省略
        conn = DriverManager.getConnection(url, user, pwd);
        
        String sql = "SELECT id, name, email FROM users WHERE status = ?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, 1); // 參數化查詢
        
        rs = pstmt.executeQuery();
        
        out.println("<table border='1'><tr><th>ID</th><th>姓名</th><th>郵箱</th></tr>");
        while (rs.next()) {
            out.println("<tr><td>" + rs.getInt("id") + "</td>" +
                        "<td>" + rs.getString("name") + "</td>" +
                        "<td>" + rs.getString("email") + "</td></tr>");
        }
        out.println("</table>");
    } catch (Exception e) {
        out.println("<div style='color:red'>錯誤: " + e.getMessage() + "</div>");
        e.printStackTrace();
    } finally {
        // 逆序關閉,單獨 try-catch 確保釋放
        try { if (rs != null) rs.close(); } catch (Exception ignore) {}
        try { if (pstmt != null) pstmt.close(); } catch (Exception ignore) {}
        try { if (conn != null) conn.close(); } catch (Exception ignore) {}
    }
%>

從 JSP 直連到企業級架構的演進路線圖

  1. JSP + JDBC 直連 (原型/教學) → 問題: 連接開銷大、SQL 注入、業務邏輯混雜、無事務控制。
  2. JSP + JavaBean (DAO) → 封裝 JDBC 到 Java 類,JSP 僅調用 Bean 方法。
  3. Servlet + DAO + Connection Pool (DBCP/HikariCP) → Servlet 控制事務,DAO 執行 SQL,連接池管理連接。
  4. Spring JDBC / MyBatis + 事務註解 → 模板化 JDBC、映射 ORM、聲明式事務。
  5. Spring Data JPA / Hibernate → 完整 ORM、實體管理、JPQL/Criteria 查詢。

總結

掌握各數據庫 JDBC URL 格式、驅動類名、關鍵參數是基本功。**生產環境核心原則:JNDI DataSource + 連接池 + PreparedStatement + 事務邊界清晰 + 異常處理完善**。本文提供的模板僅作為快速驗證連通性、表結構的起點,請務必遷移至分層架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved