一、引言

在Web应用中,经常需要从数据库中获取数据并展示给用户。在Java Web开发中,我们可以使用Servlet来处理用户请求,并通过JDBC(Java Database Connectivity)来与数据库进行交互。本博客笔记将展示如何使用Servlet与数据库连接,并查询数据库信息。

二、准备工作

  1. 数据库:确保你已经有一个可以访问的数据库,并且已经创建了相应的表和数据。
  2. JDBC驱动:根据你所使用的数据库,下载并添加对应的JDBC驱动到你的项目中。例如,如果你使用的是MySQL数据库,你需要添加MySQL的JDBC驱动(mysql-connector-java)。

三、Servlet与数据库连接

  1. 添加JDBC驱动:将JDBC驱动的jar包添加到你的Web应用的WEB-INF/lib目录下。

  2. 编写Servlet

下面是一个简单的Servlet示例,它连接到数据库,查询数据,并将结果以HTML的形式返回给客户端。

  

import java.io.*;  
import java.sql.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
  
public class DatabaseServlet extends HttpServlet {  
  
    private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
    private static final String DB_URL = "jdbc:mysql://localhost:3306/test";  
    private static final String USER = "root";  
    private static final String PASS = "123456";  
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        response.setContentType("text/html");  
        PrintWriter out = response.getWriter();  
  
        try {  
            // 1. 加载和注册JDBC驱动  
            Class.forName(JDBC_DRIVER);  
  
            // 2. 建立数据库连接  
            Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);  
  
            // 3. 创建一个Statement对象  
            Statement stmt = conn.createStatement();  
  
            // 4. 执行SQL查询  
            String sql = "SELECT * FROM your_table";  
            ResultSet rs = stmt.executeQuery(sql);  
  
            // 5. 提取数据并展示  
            out.println("<html><body>");  
            out.println("<h1>Database Query Results</h1>");  
            out.println("<table border='1'>");  
            out.println("<tr><th>ID</th><th>Name</th><th>Email</th></tr>"); // 假设你的表有这些字段  
  
            while (rs.next()) {  
                // 假设你的表有id, name, email三个字段  
                int id = rs.getInt("id");  
                String name = rs.getString("name");  
                String email = rs.getString("email");  
  
                out.println("<tr>");  
                out.println("<td>" + id + "</td>");  
                out.println("<td>" + name + "</td>");  
                out.println("<td>" + email + "</td>");  
                out.println("</tr>");  
            }  
  
            out.println("</table>");  
            out.println("</body></html>");  
  
            // 6. 关闭资源  
            rs.close();  
            stmt.close();  
            conn.close();  
  
        } catch (SQLException se) {  
            se.printStackTrace();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

 四、配置Servlet:

web.xml文件中配置Servlet的映射信息,以便Servlet容器能够知道如何路由请求到你的Servlet。

<web-app>  
    ...  
    <servlet>  
        <servlet-name>DatabaseServlet</servlet-name>  
        <servlet-class>com.example.DatabaseServlet</servlet-class>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>DatabaseServlet</servlet-name>  
        <url-pattern>/db</url-pattern>  
    </servlet-mapping>  
    ...  
</web-app>

在这个配置中,我们定义了一个名为DatabaseServlet的Servlet,并将其映射到URL模式/db。当客户端访问/db时,Servlet容器将调用DatabaseServletdoGet方法。 

总结 

  • 确保JDBC驱动已经正确添加到项目的类路径中。
  • 在处理数据库连接和查询时,注意异常处理,确保资源能够正确关闭,避免资源泄露。
  • 为了提高性能和安全性,可以考虑使用连接池和预处理语句(PreparedStatement)。
  • 在生产环境中,数据库连接信息(如用户名和密码)应该存储在安全的配置文件中,而不是硬编码在Servlet中。

这个过程展示了Java Web应用中Servlet与数据库交互的基本模式,是构建Web应用时常用的技术之一。

 

 

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐