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

Java Servlet 連接 Oracle 資料庫:JDBC、DriverManager、ResultSet 處理

     編輯:Java 程式設計入門

環境準備

  1. Oracle JDBC 驅動 JAR (`ojdbc8.jar` / `ojdbc11.jar`) 放入 `WEB-INF/lib` 或伺服器共享庫。
  2. Servlet 容器 (Tomcat/Jetty) 配置資料源 (JNDI) 或直接在 Servlet 載入驅動。

Servlet 完整代碼

@WebServlet("/dbQuery")
public class OracleQueryServlet extends HttpServlet {
    private static final String DRIVER = "oracle.jdbc.OracleDriver";
    private static final String URL = "jdbc:oracle:thin:@192.168.1.6:1521:PC6";
    private static final String USER = "ndb";
    private static final String PASS = "ndb";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();

        out.println("Oracle Query");
        out.println("

資料查詢結果

"); Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 1. 載入驅動 (JDBC 4.0+ 可省略) Class.forName(DRIVER); // 2. 建立連線 conn = DriverManager.getConnection(URL, USER, PASS); // 3. 執行查詢 stmt = conn.createStatement(); String sql = "SELECT * FROM DATA"; rs = stmt.executeQuery(sql); // 4. 顯示結果 (HTML 表格) ResultSetMetaData meta = rs.getMetaData(); int colCount = meta.getColumnCount(); out.println(""); out.print(""); for (int i = 1; i <= colCount; i++) out.print(""); out.println(""); int rowCount = 0; while (rs.next() && rowCount < 100) { // 限制顯示筆數 out.print(""); for (int i = 1; i <= colCount; i++) out.print(""); out.println(""); rowCount++; } out.println("
" + meta.getColumnLabel(i) + "
" + rs.getString(i) + "
"); out.println("

共顯示 " + rowCount + " 筆資料

"); } catch (ClassNotFoundException e) { out.println("

驅動類未找到: " + e.getMessage() + "

"); } catch (SQLException e) { out.println("

資料庫錯誤: " + e.getMessage() + "

"); } finally { // 5. 關閉資源 (逆序) closeQuietly(rs); closeQuietly(stmt); closeQuietly(conn); } out.println(""); } private void closeQuietly(AutoCloseable c) { try { if (c != null) c.close(); } catch (Exception ignored) {} } }

關鍵點與最佳實踐

項目建議
驅動載入JDBC 4.0+ 透過 SPI 自動載入,`Class.forName` 可省略;保留可兼容舊環境。
連線管理**生產環境必須使用連線池** (HikariCP/Druid/Tomcat JNDI DataSource),避免頻繁建立/關閉開銷與洩漏。
SQL 注入防護使用 `PreparedStatement` + 參數綁定,絕不拼接字串。
資源關閉Java 7+ `try-with-resources` 自動關閉;舊版用 `finally` + `closeQuietly`。
編碼Oracle 連線屬性 `oracle.jdbc.defaultNChar=true` 處理 NCHAR/NVARCHAR2;URL 加 `?characterEncoding=UTF-8` (MySQL) 或確認 DB/表/欄位字符集一致。
大數據集設定 `stmt.setFetchSize(1000)` 減少網路交互;或使用游標分頁查詢。

現代化架構建議

  • Spring Boot + MyBatis/JPA:資料源自動配置、Mapper 介面、事務註解、分頁插件。
  • Reactive (R2DBC) + WebFlux:非阻塞資料庫存取,適合高併發。
  • 避免在 Servlet 直接寫 JDBC,分層架構 (Controller → Service → Repository) 利於測試與維護。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved