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

JSP 連接主流數據庫完全指南:Oracle、SQL Server、DB2、MySQL、PostgreSQL 等 7 大數據庫 JDBC 配置與代碼模板

     編輯:Java 相關知識

一份可直接複製運行的 JSP 數據庫連接大全

在 JSP 頁面中直連數據庫雖非生產環境最佳實踐 (建議使用連接池 + Servlet/Service 層),但作為原型開發、快速驗證、教學演示的基礎技能至關重要。本文匯總 7 大主流數據庫的驅動類名、JDBC URL 格式、完整 JSP 代碼模板,並針對中文編碼、驅動版本等常見坑點給出註解說明。

通用代碼模板結構

<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%
    // 1. 加載驅動 (JDBC 4.0+ 可省略,DriverManager 會自動發現 META-INF/services/java.sql.Driver)
    Class.forName("driver.class.Name").newInstance();
    
    // 2. 構建連接 URL
    String url = "jdbc:subprotocol:subname";
    
    // 3. 獲取連接
    Connection conn = DriverManager.getConnection(url, "user", "password");
    // 或使用 Properties 傳遞屬性 (含編碼設置)
    // Properties props = new Properties();
    // props.put("user", "user"); props.put("password", "pwd"); props.put("characterEncoding", "UTF-8");
    // Connection conn = DriverManager.getConnection(url, props);
    
    // 4. 創建 Statement (可滾動、可更新)
    Statement stmt = conn.createStatement(
        ResultSet.TYPE_SCROLL_SENSITIVE, 
        ResultSet.CONCUR_UPDATABLE
    );
    
    // 5. 執行查詢
    ResultSet rs = stmt.executeQuery("SELECT * FROM test_table");
    
    // 6. 處理結果集
    while (rs.next()) {
        out.println("欄位1: " + rs.getString(1) + " <br>");
        out.println("欄位2: " + rs.getString(2) + " <br>");
    }
    
    // 7. 關鍵:finally 關閉資源 (逆序)
    rs.close(); stmt.close(); conn.close();
%>

七大數據庫連接配置速查表

數據庫驅動類名JDBC URL 格式關鍵參數/注意事項
Oracle 8/8i/9i+ oracle.jdbc.driver.OracleDriver (舊)
oracle.jdbc.OracleDriver (新, 10g+)
jdbc:oracle:thin:@host:port:SID
jdbc:oracle:thin:@//host:port/service_name (10g+ 推薦)
Thin 模式無需客戶端。SID vs Service Name。
編碼: URL 添加 ?characterEncoding=UTF-8 或屬性傳遞。
SQL Server 7.0/2000 com.microsoft.jdbc.sqlserver.SQLServerDriver (Microsoft 老驅動) jdbc:microsoft:sqlserver://host:1433;DatabaseName=dbname 默認端口 1433。注意:Microsoft 老驅動已停維護,生產環境請用 com.microsoft.sqlserver.jdbc.SQLServerDriver (sqljdbc4.jar+)。
DB2 com.ibm.db2.jdbc.app.DB2Driver (本地/Type 2)
com.ibm.db2.jcc.DB2Driver (通用/Type 4, jcc.jar)
jdbc:db2://host:50000/dbname (Type 4) Type 2 需安裝 DB2 客戶端。Type 4 純 Java 推薦。默認端口 50000。
Informix com.informix.jdbc.IfxDriver jdbc:informix-sqli://host:port/dbname:INFORMIXSERVER=server_name;user=usr;password=pwd URL 含實例名 INFORMIXSERVER。驅動通常在 ifxjdbc.jar / ifxjdbcx.jar (XA)。
Sybase ASE com.sybase.jdbc4.jdbc.SybDriver (JDBC 4, jConnect 7+) jdbc:sybase:Tds:host:port/dbname 推薦使用 Properties 傳遞 user/password。jConnect 版本需與 ASE 版本匹配。
MySQL com.mysql.cj.jdbc.Driver (8.0+, mysql-connector-java 8.x)
com.mysql.jdbc.Driver (5.1, 舊版)
jdbc:mysql://host:3306/dbname?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai 關鍵參數:
useUnicode=true&characterEncoding=UTF-8 解決中文亂碼
useSSL=false (開發環境)
serverTimezone (8.0+ 必填避免時區錯誤)
allowPublicKeyRetrieval=true (8.0+ 新認證)
PostgreSQL org.postgresql.Driver jdbc:postgresql://host:5432/dbname 默認端口 5432。驅動 postgresql-x.x.x.jar。支持 URL 參數 ?currentSchema=myschema 指定 Schema。

完整 JSP 示例:MySQL 8.0 + UTF-8 中文支持

<%@ page contentType="text/html;charset=UTF-8" import="java.sql.*" %>
<%
    String driver = "com.mysql.cj.jdbc.Driver";
    String url = "jdbc:mysql://localhost:3306/mydb?" +
                 "useUnicode=true&characterEncoding=UTF-8&" +
                 "useSSL=false&serverTimezone=Asia/Shanghai&" +
                 "allowPublicKeyRetrieval=true";
    String user = "root";
    String pwd  = "123456";

    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;

    try {
        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url, user, pwd);
        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        rs = stmt.executeQuery("SELECT id, name, email FROM users");

        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("<font color='red'>錯誤: " + e.getMessage() + "</font>");
        e.printStackTrace();
    } finally {
        try { if (rs != null) rs.close(); } catch (Exception ignore) {}
        try { if (stmt != null) stmt.close(); } catch (Exception ignore) {}
        try { if (conn != null) conn.close(); } catch (Exception ignore) {}
    }
%>

常見坑點避雷指南

  1. 驅動 JAR 包未放入 WEB-INF/lib:Tomcat 不會自動加載共享 lib 下的驅動,必須放入 Web 應用私有 lib。
  2. 中文亂碼:MySQL 必須 URL 顯式指定 characterEncoding;Oracle 需確保數據庫/表/列字符集一致 (AL32UTF8);JSP 頁面指令 contentType="text/html;charset=UTF-8"。
  3. MySQL 8.0 時區/認證報錯:必加 serverTimezone=Asia/Shanghai 及 allowPublicKeyRetrieval=true (非 SSL 時)。
  4. 資源洩漏:務必在 finally 中逆序關閉 (ResultSet → Statement → Connection)。生產環境請使用連接池 (HikariCP/Druid) + Try-with-resources (Java 7+)。
  5. SQL 注入風險:示例為教學簡化,實際開發**嚴禁拼接 SQL**,必須使用 PreparedStatement。

進階建議:從 JSP 直連到分層架構

  • 連接池:配置 JNDI DataSource (Tomcat context.xml),JSP 中 ctx.lookup("jdbc/mydb") 獲取。
  • DAO 模式:將 JDBC 代碼封裝至 Java 類,JSP 僅調用 UserDao.findAll()。
  • MVC 框架:Spring MVC / Struts2 / Servlet + JSP,Controller 調用 Service -> DAO。
  • ORM:MyBatis / Hibernate / JPA,進一步消除手寫 SQL/JDBC。

總結

掌握各數據庫 JDBC URL 格式、驅動類名、關鍵連接參數,是 Java Web 開發者的基本功。本文提供的模板可直接用於快速驗證連通性、表結構查看、原型開發。切記:生產環境禁用 JSP 直連,必須使用連接池、分層架構、參數化查詢。

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