本教程假定您已经了解了 JDBC 应用程序的工作方式。在您开始学习 Servlet 数据库访问之前,请访问 Java MySQL 连接 来设置相关驱动及配置。
注意:
你可以下载本站提供的 jar 包:mysql-connector-java-5.1.39-bin.jar
在 java 项目中,只需要在 Eclipse 中引入 mysql-connector-java-5.1.39-bin.jar 就可以运行java项目。
但是在 Eclipse web 项目中,当执行 Class.forName("om.mysql.jdbc.Driver");时 不会去查找驱动的。所以本实例中我们需要把 mysql-connector-java-5.1.39-bin.jar 拷贝到 tomcat 下 lib 目录。
从基本概念下手,让我们来创建一个简单的表,并在表中创建几条记录。
创建测试数据
接下来我们在 MySQL 中创建 W3xue 数据库,并创建 websites 数据表,表结构如下:
- CREATE TABLE `websites` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
- `url` varchar(255) NOT NULL DEFAULT '',
- `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
- `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
插入一些数据:
- INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'), ('3', 'W3xue教程', '//www.w3xue.com', '5892', ''), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');
数据表显示如下:
访问数据库
下面的实例演示了如何使用 Servlet 访问 W3xue 数据库。
- package com.W3xue.test;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.sql.*;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * Servlet implementation class DatabaseAccess
- */
- @WebServlet("/DatabaseAccess")
- public class DatabaseAccess extends HttpServlet {
- private static final long serialVersionUID = 1L;
- // JDBC 驱动名及数据库 URL
- static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
- static final String DB_URL = "jdbc:mysql://localhost:3306/W3xue";
- // 数据库的用户名与密码,需要根据自己的设置
- static final String USER = "root";
- static final String PASS = "123456";
- /**
- * @see HttpServlet#HttpServlet()
- */
- public DatabaseAccess() {
- super();
- // TODO Auto-generated constructor stub
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- Connection conn = null;
- Statement stmt = null;
- // 设置响应内容类型
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter out = response.getWriter();
- String title = "Servlet Mysql 测试 - W3xue教程";
- String docType = "<!DOCTYPE html>\n";
- out.println(docType +
- "<html>\n" +
- "<head><title>" + title + "</title></head>\n" +
- "<body bgcolor=\"#f0f0f0\">\n" +
- "<h1 align=\"center\">" + title + "</h1>\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, name, url FROM websites";
- ResultSet rs = stmt.executeQuery(sql);
- // 展开结果集数据库
- while(rs.next()){
- // 通过字段检索
- int id = rs.getInt("id");
- String name = rs.getString("name");
- String url = rs.getString("url");
- // 输出数据
- out.println("ID: " + id);
- out.println(", 站点名称: " + name);
- out.println(", 站点 URL: " + url);
- out.println("<br />");
- }
- out.println("</body></html>");
- // 完成后关闭
- 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();
- }
- }
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- doGet(request, response);
- }
- }
现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:
- ....
- <servlet>
- <servlet-name>DatabaseAccess</servlet-name>
- <servlet-class>com.W3xue.test.DatabaseAccess</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>DatabaseAccess</servlet-name>
- <url-pattern>/TomcatTest/DatabaseAccess</url-pattern>
- </servlet-mapping>
- ....
现在调用这个 Servlet,输入链接:http://localhost:8080/TomcatTest/DatabaseAccess,将显示以下响应结果:
转载本站内容时,请务必注明来自W3xue,违者必究。