Servlet 教程 之 Servlet 数据库访问 2

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本教程讲解如何在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

    相关实践学习
    每个IT人都想学的“Web应用上云经典架构”实战
    本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
    MySQL数据库入门学习
    本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
    目录
    相关文章
    |
    8月前
    |
    SQL Java 数据库连接
    除了JDBC,还有哪些常见的数据库访问技术?
    除了JDBC,还有哪些常见的数据库访问技术?
    681 2
    |
    9月前
    |
    缓存 Java 应用服务中间件
    Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
    本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
    1629 5
    |
    Java 应用服务中间件 API
    Servlet开发流程 (里面有Idea项目添加Tomcat依赖详细教程)
    本文详细介绍了Servlet的开发流程,包括在IntelliJ IDEA中添加Tomcat依赖的详细教程。通过上述步骤,开发者可以快速搭建并运行一个基本的Servlet应用,理解并掌握Servlet的开发流程对于Java Web开发至关重要。希望本文能够帮助开发者顺利进行Servlet开发,提高工作效率。
    1692 78
    |
    关系型数据库 MySQL API
    新手教程:数据库操作(使用PDO或MySQLi扩展)
    本文为新手介绍如何使用PDO和MySQLi扩展连接与操作MySQL数据库。PDO更现代灵活,支持多种数据库,适合大多数应用;MySQLi提供面向过程和面向对象两种API,适合直接控制数据库操作。教程涵盖安装配置、创建连接、执行查询(查询、插入、更新、删除)及错误处理等内容。希望这篇教程能帮助你快速上手PHP中的数据库操作!
    448 32
    |
    存储 关系型数据库 分布式数据库
    PolarDB 开源基础教程系列 8 数据库生态
    PolarDB是一款开源的云原生分布式数据库,源自阿里云商业产品。为降低使用门槛,PolarDB携手伙伴打造了完整的开源生态,涵盖操作系统、芯片、存储、集成管控、监控、审计、开发者工具、数据同步、超融合计算、ISV软件、开源插件、人才培养、社区合作及大型用户合作等领域。通过这些合作伙伴,PolarDB提供了丰富的功能和服务,支持多种硬件和软件环境,满足不同用户的需求。更多信息请访问[PolarDB开源官方网站](https://openpolardb.com/home)。
    746 4
    |
    关系型数据库 MySQL Java
    Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
    对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
    436 20
    |
    SQL Oracle 数据库
    使用访问指导(SQL Access Advisor)优化数据库业务负载
    本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
    422 11
    |
    SQL Java 数据库连接
    在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
    在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
    371 3
    |
    SQL Java 数据库连接
    打破瓶颈:利用Java连接池技术提升数据库访问效率
    在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
    365 2
    |
    存储 机器学习/深度学习 监控
    南大通用GBase 8s数据库onbar基础使用教程
    数据备份与恢复是确保数据安全和业务连续性的关键。onbar作为GBase 8s数据库的备份工具,需配合存储管理器使用,通过配置BAR_BSALIB_PATH等参数,实现数据的备份与恢复。本文详细介绍了onbar的配置、备份、恢复及监控流程,帮助数据库管理员构建高效的数据保护方案。