首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java JSP + JDBC 連接 SQL Server 多表查詢實戰

     編輯:程式設計疑難解答

核心步驟

  1. 引入驅動:mssql-jdbc-x.x.x.jre11.jar 放入 WEB-INF/lib。
  2. 配置連接池(推薦 Druid/HikariCP)或直接 DriverManager.getConnection。
  3. 編寫 DAO:PreparedStatement 防注入,ResultSet 映射實體。
  4. Service 層組裝多表關聯業務邏輯。
  5. Servlet/Controller 調用 Service,轉發到 JSP 渲染。

關鍵代碼片段

// DBUtil.java
public static Connection getConn() throws SQLException {
    String url = "jdbc:sqlserver://localhost:1433;databaseName=test";
    return DriverManager.getConnection(url, "sa", "pwd");
}

// UserDao.java
public List<User> findWithOrders() {
    String sql = "SELECT u.*, o.id AS oid, o.amount " +
                 "FROM users u LEFT JOIN orders o ON u.id = o.user_id";
    try (Connection c = DBUtil.getConn();
         PreparedStatement ps = c.prepareStatement(sql);
         ResultSet rs = ps.executeQuery()) {
        Map<Integer, User> map = new LinkedHashMap<>();
        while (rs.next()) {
            int uid = rs.getInt("id");
            User u = map.computeIfAbsent(uid, k -> mapRow(rs));
            if (rs.getInt("oid") > 0) {
                u.getOrders().add(mapOrder(rs));
            }
        }
        return new ArrayList<>(map.values());
    }
}

JSP 顯示

<c:forEach items="${users}" var="u">
  ${u.username}
  <c:forEach items="${u.orders}" var="o"> ${o.amount} </c:forEach>
</c:forEach>

避坑清單

  • 關閉資源用 try-with-resources。
  • SQL Server 字符集設置 sendStringParametersAsUnicode=false 避免中文亂碼。
  • 大數據量分頁用 OFFSET ... ROWS FETCH NEXT ... ROWS ONLY (SQL Server 2012+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved