Servlet 教程 之 Servlet 数据库访问 2

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本教程讲解如何在Servlet中实现数据库访问。首先确保了解JDBC并配置MySQL驱动(如mysql-connector-java-5.1.39-bin.jar),在Eclipse Web项目中需将驱动放入Tomcat的lib目录。创建名为`websites`的数据库表,插入测试数据。之后展示了一个Servlet示例,该示例连接到数据库,执行SQL查询以获取`websites`表中的`id`、`name`和`url`,并将结果输出到HTML响应中。要运行Servlet,需在web.xml中配置并访问指定URL。

Servlet 教程 之 Servlet 数据库访问 2

Servlet 数据库访问

本教程假定您已经了解了 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("com.mysql.jdbc.Driver");时 不会去查找驱动的。所以本实例中我们需要把 mysql-connector-java-5.1.39-bin.jar 拷贝到 tomcat 下 lib 目录。

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

创建测试数据
接下来我们在 MySQL 中创建 baidu 数据库,并创建 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', '百度', 'http://www.baidu.com', '5892', ''), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');

访问数据库
下面的实例演示了如何使用 Servlet 访问 baidu 数据库。

package com.baidu.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/baidu";

    // 数据库的用户名与密码,需要根据自己的设置
    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 测试 - 百度";
      String docType = "<!DOCTYPE html>\n";
      out.println(docType +
      "

\n" +
"\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, 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 文件中创建以下条目:
  • ....

    DatabaseAccess
    com.baidu.test.DatabaseAccess


    DatabaseAccess
    /TomcatTest/DatabaseAccess

    ....
    现在调用这个 Servlet,输入链接:http://localhost:8080/TomcatTest/DatabaseAccess

    相关实践学习
    基于CentOS快速搭建LAMP环境
    本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    目录
    相关文章
    |
    6天前
    |
    SQL Oracle 安全
    Oracle11g更改数据库名(详细教程)
    Oracle11g更改数据库名(详细教程)
    15 1
    |
    6天前
    |
    自然语言处理 定位技术
    Servlet 教程 之 Servlet 国际化 3
    Servlet教程展示了如何实现国际化(i18n)和本地化(l10n),利用`request.getLocale()`获取用户区域设置,通过`DateFormat`类格式化特定区域的日期。示例代码演示了根据用户区域显示相应日期,强调了处理多语言网站的关键方法,如`getCountry()`、`getLanguage()`等。
    15 6
    |
    6天前
    |
    开发框架 缓存 Java
    JSP 教程 之 Eclipse JSP/Servlet 环境搭建 1
    本教程指导如何使用Eclipse搭建JSP/Servlet开发环境。需下载Eclipse J2EE和Tomcat,将Tomcat解压至无中文和空格的D盘目录。启动Tomcat后,服务器运行,通过浏览器访问`http://localhost:8080/`。在Tomcat的webapps\ROOT目录创建test.jsp文件,输入代码并访问`http://localhost:8080/test.jsp`以验证环境配置成功。
    8 1
    |
    6天前
    |
    SQL 数据库连接 数据库
    PyQt中数据库的访问(一)
    PyQt中数据库的访问(一)
    10 2
    |
    6天前
    |
    Java 关系型数据库 MySQL
    Servlet 教程 之 Servlet 有用的资源
    探索Servlet世界:访问Sun&#39;s Site获取官方资料,Tomcat作为开源JSP引擎,搭配MySQL Connector/J实现数据库连接。深入学习Java编程,参考The Java Tutorials及Java 2 SDK文档,免费下载Java并关注Sun Developer Network获取最新资源。
    11 1
    |
    6天前
    |
    自然语言处理 定位技术
    Servlet 教程 之 Servlet 国际化 4
    Servlet教程之国际化讲解了如何根据用户区域设置展示多语言内容。关键术语包括国际化(i18n)、本地化(l10n)和区域设置(locale)。Servlet通过`request.getLocale()`获取区域设置,并使用`NumberFormat`类格式化特定区域的货币。示例代码展示了如何根据客户端locale显示货币格式。
    13 3
    |
    6天前
    |
    定位技术
    Servlet 教程 之 Servlet 国际化 3
    Servlet教程展示了如何实现国际化(i18n)和本地化(l10n)。通过request对象的getLocale()获取用户区域设置,利用DateFormat进行特定区域的日期格式化。示例代码显示了根据用户浏览器设置显示相应语言和文化的日期。
    9 2
    |
    6天前
    |
    定位技术
    Servlet 教程 之 Servlet 国际化 2
    Servlet教程展示了如何实现网站的国际化(i18n)和本地化(l10n)。通过识别用户的区域设置(locale),Servlet可以提供不同语言版本的页面。`request.getLocale()`用于获取用户浏览器的locale。关键方法包括`getCountry()`、`getDisplayCountry()`、`getLanguage()`和`getDisplayLanguage()`,用于获取国家、语言名称及其显示形式。设置`Content-Language`头确保西欧语言的正确显示,例如在Servlet示例中,使用HTML实体显示西班牙语字符。
    10 0
    |
    6天前
    |
    定位技术
    Servlet 教程 之 Servlet 国际化 1
    Servlet教程展示了如何实现国际化(i18n)和本地化(l10n),通过request对象的getLocale()获取用户区域设置。方法如:getCountry(), getDisplayCountry(), getLanguage(), 和 getDisplayLanguage()等用于检测语言和国家信息。实例中,Servlet展示请求的语言和国家,以响应不同区域设置的用户需求。
    8 0
    |
    6天前
    |
    缓存 小程序 Java
    Servlet 教程 之 Servlet 调试 6
    Servlet调试涉及大量客户端/服务器交互,常带来困难。使用JDB调试器调试HttpServer来模拟HTTP请求,需设置正确类路径,包括servlet和相关类,以及servlet和支撑类的路径。通过在Servlet代码中设置断点,通过浏览器触发请求进行调试。注释法也可辅助调试,通过暂时移除部分代码观察bug变化。查看HTTP头信息对理解Servlet行为有帮助。关键技巧包括:注意classes目录不重载,强制浏览器刷新避免缓存,确保servlet的init()方法正确处理ServletConfig。
    17 3