Servlet 数据库访问

本教程假定您已经了解了 JDBC 应用程序的工作方式。在您开始学习 Servlet 数据库访问之前,请确保您已经有适当的 JDBC 环境设置和数据库。

从基本概念下手,让我们来创建一个简单的表,并在表中创建几条记录。

创建数据库表

在测试数据库TEST中创建Employees表,请按以下步骤进行:

步骤 1:

打开命令行提示符(Command Prompt),并更改进入到安装目录,如下所示:

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 数据库。

// 加载必需的库 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 驱动器名称和数据库的 URL static final String JDBC_DRIVER="com.mysql.jdbc.Driver"; static final String DB_URL="jdbc:mysql://localhost/TEST"; // 数据库的凭据 static final String USER = "root"; static final String PASS = "password"; // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "数据库结果"; String docType = "\n"; out.println(docType + "\n" + "" + title + "
\n" + "\n" + "

" + title + "

\n"); try{ // 注册 JDBC 驱动器 Class.forName("com.mysql.jdbc.Driver"); // 打开一个连接 conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行 SQL 查询 stmt = conn.createStatement(); String sql; sql = "SELECT id, first, last, age FROM Employees"; ResultSet rs = stmt.executeQuery(sql); // 从结果集中提取数据 while(rs.next()){ // 根据列名称检索 int id = rs.getInt("id"); int age = rs.getInt("age"); String first = rs.getString("first"); String last = rs.getString("last"); // 显示值 out.println("ID: " + id + "
"); out.println(", Age: " + age + "
"); out.println(", First: " + first + "
"); out.println(", Last: " + last + "
"); } out.println(""); // 清理环境 rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ // 处理 JDBC 错误 se.printStackTrace(); }catch(Exception e){ // 处理 Class.forName 错误 e.printStackTrace(); }finally{ // 最后是用于关闭资源的块 try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// 我们不能做什么 try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); }//end finally try } //end try } }

现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:

....  DatabaseAccess DatabaseAccess   DatabaseAccess /DatabaseAccess  ....

现在调用这个 Servlet,输入链接:http://localhost:8080/DatabaseAccess,将显示以下响应结果:

数据库结果 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