- Servlet 教程
- Servlet - 主页
- Servlet - 简介
- Servlet - 环境设置
- Servlet - 生命周期
- Servlet - 示例
- Servlet - 表单数据
- Servlet - 客户端请求
- Servlet - 服务器响应
- Servlet - Http 代码
- Servlet - 编写过滤器
- Servlet - 异常
- Servlet - 处理 Cookie
- Servlet - 跟踪会话
- Servlet - 数据库访问
- Servlet - 上传文件
- Servlet - 处理日期
- Servlet - 网页重定向
- Servlet - 计数器命中
- Servlet - 自动刷新
- Servlet - 发送电子邮件
- Servlet - 打包
- Servlet - 调试
- Servlet - 国际化
- Servlet - 注释
- Servlet 实用资源
- Servlet - 问答
- Servlet - 快速指南
- Servlet - 实用资源
- Servlet - 讨论
Servlet - 数据库访问
本教程假定你已了解 JDBC 应用程序如何运行。在开始通过 servlet 访问数据库之前,请确保正确设置了 JDBC 环境和数据库。
有关如何使用 JDBC 及其环境设置访问数据库的更多详细信息,你可以查看我们的 JDBC 教程。
从基本概念开始,我们创建一个简单的表格并在表格中创建一些记录,如下所示:
创建表格
要在 TEST 数据库中创建 Employees 表,请使用下列步骤:
步骤 1
打开 命令提示符 并更改为安装目录,如下所示:
C:\> C:\>cd Program Files\MySQL\bin C:\Program Files\MySQL\bin>
步骤 2
登录数据库,如下所示:
C:\Program Files\MySQL\bin>mysql -u root -p Enter password: ******** mysql>
步骤 3
在 TEST 数据库中创建名为 Employee 的表格,如下所示:
mysql> use TEST; mysql> create table Employees ( id int not null, age int not null, first varchar (255), last varchar (255) ); Query OK, 0 rows affected (0.08 sec) mysql>
创建数据记录
最后,在 Employee 表中创建一些记录,如下所示:
mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal'); Query OK, 1 row affected (0.00 sec) mysql>
访问数据库
这里有一个示例,说明如何使用 Servlet 访问 TEST 数据库。
// Loading required libraries import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class DatabaseAccess extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL="jdbc:mysql://127.0.0.1/TEST"; // Database credentials static final String USER = "root"; static final String PASS = "password"; // Set response content type response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Database Result"; String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor = \"#f0f0f0\">\n" + "<h1 align = \"center\">" + title + "</h1>\n"); try { // Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); // Open a connection Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); // Execute SQL query Statement stmt = conn.createStatement(); String sql; sql = "SELECT id, first, last, age FROM Employees"; ResultSet rs = stmt.executeQuery(sql); // Extract data from result set while(rs.next()){ //Retrieve by column name int id = rs.getInt("id"); int age = rs.getInt("age"); String first = rs.getString("first"); String last = rs.getString("last"); //Display values out.println("ID: " + id + "<br>"); out.println(", Age: " + age + "<br>"); out.println(", First: " + first + "<br>"); out.println(", Last: " + last + "<br>"); } out.println("</body></html>"); // Clean-up environment rs.close(); stmt.close(); conn.close(); } catch(SQLException se) { //Handle errors for JDBC se.printStackTrace(); } catch(Exception e) { //Handle errors for Class.forName e.printStackTrace(); } finally { //finally block used to close resources try { if(stmt!=null) stmt.close(); } catch(SQLException se2) { } // nothing we can do try { if(conn!=null) conn.close(); } catch(SQLException se) { se.printStackTrace(); } //end finally try } //end try } }
现在,让我们编译上述 servlet并在 web.xml 中创建以下条目:
.... <servlet> <servlet-name>DatabaseAccess</servlet-name> <servlet-class>DatabaseAccess</servlet-class> </servlet> <servlet-mapping> <servlet-name>DatabaseAccess</servlet-name> <url-pattern>/DatabaseAccess</url-pattern> </servlet-mapping> ....
现在使用 URL https://127.0.0.1:8080/DatabaseAccess 调用此 servlet,该 URL 将显示以下响应:
Database Result
ID: 100, Age: 18, First: Zara, Last: Ali ID: 101, Age: 25, First: Mahnaz, Last: Fatma ID: 102, Age: 30, First: Zaid, Last: Khan ID: 103, Age: 28, First: Sumit, Last: Mittal
广告