📜  Servlet – 数据库访问(1)

📅  最后修改于: 2023-12-03 15:05:10.971000             🧑  作者: Mango

Servlet – 数据库访问

在Web应用程序的开发中,大多数情况下都需要通过数据库存储和访问数据。而在Java Web应用程序中,可以通过Servlet来实现对数据库的访问。

JDBC

Java数据库连接(Java Database Connectivity,简称JDBC)是一种用于执行SQL语句的Java API。通过JDBC,应用程序可以连接到多种不同类型的关系型数据库,并可以执行插入、更新、删除和查询等各种SQL操作。JDBC是Java企业版(Java Enterprise Edition,简称JEE)的核心技术之一,也是开发Java Web应用程序的必备技能之一。

下面是一个简单的JDBC示例:

import java.sql.*;

public class JDBCTest {
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost/EMP";
   static final String USER = "username";
   static final String PASS = "password";

   public static void main(String[] args) {
      Connection conn = null;
      Statement stmt = null;
      try {
         Class.forName(JDBC_DRIVER);

         System.out.println("Connecting to database...");
         conn = DriverManager.getConnection(DB_URL,USER,PASS);

         System.out.println("Creating statement...");
         stmt = conn.createStatement();
         String sql;
         sql = "SELECT id, name, age FROM Employees";
         ResultSet rs = stmt.executeQuery(sql);

         while(rs.next()){
            int id  = rs.getInt("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");

            System.out.print("ID: " + id);
            System.out.print(", Name: " + name);
            System.out.println(", Age: " + age);
         }
         rs.close();
         stmt.close();
         conn.close();
      } catch(SQLException se) {
         se.printStackTrace();
      } catch(Exception e) {
         e.printStackTrace();
      } finally {
         try {
            if(stmt!=null)
               stmt.close();
         } catch(SQLException se2) {
         }
         try {
            if(conn!=null)
            conn.close();
         } catch(SQLException se) {
            se.printStackTrace();
         }
      }
      System.out.println("Goodbye!");
   }
}

这个示例连接到本地MySQL数据库上的EMP数据库,并查询Employees表中的所有记录。在实际开发中,可以根据自己的需求和数据库类型进行修改。

Servlet访问数据库

在Java Web应用程序中,可以通过Servlet来处理客户端的请求,执行数据库操作,并将结果返回给客户端。

下面是一个使用Java Servlet来访问数据库的示例:

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class DBServlet extends HttpServlet {
   private String message;

   public void init() throws ServletException {
      message = "Hello, World!";
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      out.println("<html>");
      out.println("<head>");
      out.println("<title>Servlet DBServlet</title>");
      out.println("</head>");
      out.println("<body>");

      Connection conn = null;
      Statement stmt = null;
      try {
         Class.forName("com.mysql.jdbc.Driver");
         conn = DriverManager.getConnection("jdbc:mysql://localhost/EMP", "username", "password");
         stmt = conn.createStatement();
         String sql = "SELECT id, name, age FROM Employees";
         ResultSet rs = stmt.executeQuery(sql);

         out.println("<table>");
         out.println("<tr>");
         out.println("<th>ID</th>");
         out.println("<th>Name</th>");
         out.println("<th>Age</th>");
         out.println("</tr>");

         while (rs.next()) {
            int id  = rs.getInt("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");

            out.println("<tr>");
            out.println("<td>" + id + "</td>");
            out.println("<td>" + name + "</td>");
            out.println("<td>" + age + "</td>");
            out.println("</tr>");
         }

         out.println("</table>");
         rs.close();
         stmt.close();
         conn.close();
      } catch(SQLException se) {
         se.printStackTrace();
      } catch(Exception e) {
         e.printStackTrace();
      } finally {
         try {
            if(stmt!=null)
               stmt.close();
         } catch(SQLException se2) {
         }
         try {
            if(conn!=null)
            conn.close();
         } catch(SQLException se) {
            se.printStackTrace();
         }
      }

      out.println("</body>");
      out.println("</html>");
   }

   public void destroy() {
   }
}

这个示例展示了一个名为DBServlet的Servlet类,它连接到本地MySQL数据库上的EMP数据库,并查询Employees表中的所有记录。在浏览器中访问这个Servlet时,它会以HTML表格的形式将查询结果返回给客户端。在实际开发中,可以根据自己的需求和数据库类型进行修改。