JSP连接MySQL数据库

news2024/10/5 18:28:35

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:JSP连接MySQL数据库
更多内容点击👇
       一文带你掌握JSP基础知识

文章目录

      • JSP中的MySQL驱动程序配置
      • MySQL中创建表
      • JSP中SELECT操作
      • JavaBean 定义与使用

  动态Web程序运行在Web容器之中,利用Web容器可以使用JDBC技术来实现数据库数据的CRUD操作,将数据表中的数据取出并结合JSP动态生成HTML页面进行显示。
在这里插入图片描述

JSP中的MySQL驱动程序配置

  本文开发使用的是MySQL数据库,如果要想使用MySQL数据库,则一定要在Tomcat中进行MySQL驱动程序的配置。这个配置可以考虑将获取到的MySQL的程序包 jar包 保存到你本地的Tomcat文件夹中的 lib 文件目录中。

在这里插入图片描述

  在Tomcat或者是项目之中所有的XML文件配置之后必须重新启动Tomcat才可以实现新的配置项加载,如果要在Tomcat中增加新的程序包,也必须重新启动后才能加载。

注意:

你可以下载官网提供的 jar 包:

MySQL 5 版本:mysql-connector-java-5.1.0-bin.jar

MySQL 8 版本:mysql-connector-java-8.0.19.jar
在这里插入图片描述

下载后把 mysql-connector-java-<对应版本>-bin.jar 拷贝到 tomcat 下 lib 目录。

MySQL 8.0 以上版本的数据库连接有所不同:

  • com.mysql.jdbc.Driver 更换为 com.mysql.cj.jdbc.Driver。

  • MySQL 8.0 以上版本不需要建立 SSL 连接的,需要显示关闭。

  • 最后还需要设置 CST。

MySQL中创建表

  既然要进行数据的开发操作,则首先一定要进行数据库的创建,本次创建一张手机信息表,并且配置好相应的测试数据。

范例:创建手机信息表

CREATE TABLE phone(
`pid` INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`brand` VARCHAR(20) NOT NULL,
`type` VARCHAR(20) NOT NULL,
`birthday` DATE NOT NULL,
`price` DOUBLE NOT NULL,
`color` VARCHAR(20) NOT NULL,
`card` VARCHAR(20) NOT NULL UNIQUE
)

插入一些数据:

INSERT INTO phone VALUES(1001,'华为','P30','2018-10-10',3500,'白色','HB1214512412');
INSERT INTO phone VALUES(1002,'小米','10Plus','2020-02-02',3222,'蓝色','XM5765424335');
INSERT INTO phone VALUES(1003,'荣耀','30Pro','2020-08-22',2888,'白色','RY4815645687');

数据表显示如下:

在这里插入图片描述

JSP中SELECT操作

  如果要想使用JDBC实现数据表中的数据查询,那么肯定要通过PreparedStatement接口实现查询操作,本次仅仅是实现查询全部数据的需要。

范例:查询数据表所有数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>  <%-- 定义页面中文显示编码 --%>
<%@ page import="java.sql.*" %>  <%-- 导入开发包 --%>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<%!
    public static final String DBDRIVER="com.mysql.jdbc.Driver";//驱动程序
    public static final String DBURL="jdbc:mysql://localhost:3306/java221804";//连接地址
    public static final String USER="root";//用户名
    public static final String PASSWORD="huanghuang";//密码
%>
<%
    String sql="select * from phone;";//SQL查询语句
    Class.forName(DBDRIVER);//加载驱动程序
    Connection conn=DriverManager.getConnection(DBURL,USER,PASSWORD);//连接数据库
    PreparedStatement pstmt=conn.prepareStatement(sql);//操作PreparedStatement对象
    ResultSet rs=pstmt.executeQuery();//执行查询,并存入ResultSet结果集中
%>
<table border="1" width="100%">
    <thead><tr><td>编号</td><td>品牌</td><td>型号</td><td>出厂日期</td><td>价格</td><td>颜色</td><td>手机编码</td></tr></thead>
    <tbody>
    <%
        while (rs.next()){//从ResultSet结果集中循环获取数据
            int pid=rs.getInt(1);
            String brand=rs.getString(2);
            String type=rs.getString(3);
            Date birthday=rs.getDate(4);
            double price=rs.getDouble(5);
            String color=rs.getString(6);
            String card=rs.getString(7);

    %>
    <tr>
        <td><%=pid%></td>
        <td><%=brand%></td>
        <td><%=type%></td>
        <td><%=birthday%></td>
        <td><%=price%></td>
        <td><%=color%></td>
        <td><%=card%></td>
    </tr>
    <%
        }
    %>
    </tbody>
</table>
<%
    //关闭连接,如果不关闭就再也关闭不了,除非重新启动Tomcat
    conn.close();
%>
</body>
</html>

  本程序在JSP中实现了MySQL数据库的链接,随后利用PreparedStatement语句实现了 phone 表的查询,所有查询的记录将利用循环拼凑为HTML表格元素进行展示。

执行结果显示如下:

在这里插入图片描述

  实际上看到以上程序代码执行后,就可以非常清楚的发现,整个JavaWEB开发和Java的开发基本上是没有啥太大去别的,都是编写Java代码,只要你Java基本功扎实,那么这种程序实际上编写起来就非常容易了。

JavaBean 定义与使用

  为了提高Java程序代码的可重用性,往往会将一些重复执行的代码封装在类结构之中,而这样的类也被称为JavaBean。在IDEA中的Web开发中,创建此封装类的位置结构图如下:

在这里插入图片描述

第一步:创建db.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/java221804
username=root
password=huanghuang

第二步:创建数据库封装类——DBUtils类

package cn.lqgx.insert;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DBUtils {

    private static final Properties PROPERTIES =new Properties();

    static{
        InputStream is = DBUtils.class.getResourceAsStream("/db.properties");
        try {
            PROPERTIES.load(is);
            //1、注册驱动
            Class.forName(PROPERTIES.getProperty("driver"));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 2、获取连接方法
    public static Connection getConnection(){
        Connection connection = null;
        //2、获取连接对象
        try {
            connection=DriverManager.getConnection(PROPERTIES.getProperty("url"), PROPERTIES.getProperty("username"), PROPERTIES.getProperty("password"));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;

    }

    // 3、释放资源方法
    public static void closeAll(ResultSet resultSet, Statement statement,
                                Connection connection) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if(statement!=null){
                statement.close();
            }
            if(connection!=null){
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

最后通过JSP调用JavaBean数据库操作封装类

范例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>  <%-- 定义页面中文显示编码 --%>
<%@ page import="java.sql.*" %>  <%-- 导入开发包 --%>
<%@ page import="cn.lqgx.insert.DBUtils" %>  <%-- 导入自定义的JavaBean数据库操作封装类 --%>
<html>
<head>
  <title>$Title$</title>
</head>
<body>

<%
  String sql = "select * from phone;";//SQL查询语句
  Connection conn = DBUtils.getConnection();//连接数据库
  PreparedStatement pstmt1 = conn.prepareStatement(sql);//操作PreparedStatement对象
  ResultSet rs = pstmt1.executeQuery();//执行查询,并存入ResultSet结果集中
%>
<table border="1" width="100%">
  <thead>
  <tr>
    <td>编号</td>
    <td>品牌</td>
    <td>型号</td>
    <td>出厂日期</td>
    <td>价格</td>
    <td>颜色</td>
    <td>手机编码</td>
  </tr>
  </thead>
  <tbody>
  <%
    while (rs.next()) {//从ResultSet结果集中循环获取数据
      int pid = rs.getInt(1);
      String brand = rs.getString(2);
      String type = rs.getString(3);
      Date birthday = rs.getDate(4);
      double price = rs.getDouble(5);
      String color = rs.getString(6);
      String card = rs.getString(7);

  %>
  <tr>
    <td><%=pid%>
    </td>
    <td><%=brand%>
    </td>
    <td><%=type%>
    </td>
    <td><%=birthday%>
    </td>
    <td><%=price%>
    </td>
    <td><%=color%>
    </td>
    <td><%=card%>
    </td>
  </tr>
  <%
    }
  %>
  </tbody>
</table>
<%
  //关闭连接,如果不关闭就再也关闭不了,除非重新启动Tomcat
  conn.close();
%>
</body>
</html>

程序执行结果如下:

在这里插入图片描述
  本程序直接通过开发的DBUTils工具类获取了数据库的连接对象,这样就相当于将所有的数据库连接与关闭处理封装在了一个JavaBean中,以实现代码的可重用性,在调用时只需要通过page指令导入相关的程序类即可实现类中方法的调用。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Allegro如何设置走线禁布区操作指导

Allegro如何设置走线禁布区操作指导 Allegro可以任意设置走线的禁布区,以下图为例,需要在两个pin中间设置一个所有层都不能走线的禁布区域 具体操作如下 选择shape Add Rect命令 Option选择画在Route keepout-All层,type选择Static solid 鼠标移动到器件pad附近,右击会…

JavaScript -- Map对象及常用方法介绍

文章目录Map1 Map介绍2 创建一个Map3 常用方法介绍4 将Map转换为数组5 从数组构建Map6 遍历MapMap 1 Map介绍 Map用来存储键值对结构的数据**&#xff08;key-value&#xff09;**Object中存储的数据就可以认为是一种键值对结构Map和Object的主要区别&#xff1a; Object中的…

在vue3项目中使用新版高德地图

高德开发平台 : 高德开放平台 | 高德地图API (amap.com) 1. 首先你要注册好账号登录 2. 获取key和密钥 自2021年12月02日升级&#xff0c;升级之后所申请的 key 必须配备安全密钥 jscode 一起使用 NPM方式安装和使用(基础版): 按 NPM 方式安装使用 Loader : npm i amap/amap…

OS——进程并发控制(五大经典问题信号量机制描述)

目录 一、经典问题信号量机制描述 1、任意两个进程可以并发的条件&#xff08;Bernstein条件&#xff09; 2、临界区管理原则 3、信号量的P、V操作 &#xff08;1&#xff09;P、V操作 &#xff08;2&#xff09;P、V操作的原则 &#xff08;3&#xff09;用信号量解决进…

[开发浏览器实战]关于Firefox火狐浏览器的说明一二(国内版 国际版区别 账号切换 插件-恢复关闭的标签页 插件-tempermonkey油猴)

[开发浏览器实战]关于Firefox火狐浏览器的说明一二1.下载地址2.同步账号不一样国内版3.浏览器关于内容不同:国内版国际版![在这里插入图片描述](https://img-blog.csdnimg.cn/8ca563d2aa2d43b0b52b6cf50bbffa0c.png)灵活使用firefox推荐插件1.tempermonkey油猴2.恢复关闭的标签…

从零学习VINS-Mono/Fusion源代码(五):VIO初始化

本节分析VIO初始化部分 VINS-Mono/Fusion代码学习系列&#xff1a; 从零学习VINS-Mono/Fusion源代码&#xff08;一&#xff09;&#xff1a;主函数 从零学习VINS-Mono/Fusion源代码&#xff08;二&#xff09;&#xff1a;前端图像跟踪 从零学习VINS-Mono/Fusion源代码&#x…

Orin PPS failed to request pps gpio修改

前言 在使用Orin PPS过程中,已经配置了设备树文件,但是遇到了申请GPIO失败的问题,如下图: 申请GPIO失败。 1.分析及解决过程 1.1 设备树文件修改 在设备树文件hardware/nvidia/platform/t23x/concord/kernel-dts/cvb/tegra234-p3737-0000-a00.dtsi 中,添加关于pps gpi…

k8s,30分钟部署一个kubernetes集群【1.17】

作者:李振良 官方网站:http://www.ctnrs.com kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm init# 将一个 Node 节点加入到当前集群中 $ kubeadm join <Mast…

基于jsp+java+ssm的农产品购物商城系统-计算机毕业设计

项目介绍 随着计算机、信息化网络的普及&#xff0c;电子商务的兴起&#xff0c;网络支付以及网络安全体系逐渐完善&#xff0c;将人们的生活带入到网络时代&#xff0c;越来越多的人喜欢网上购物&#xff0c;消费者足不出户便可以买到自己喜欢的物品&#xff0c;只要轻轻点击…

TypeScript算法题实战——二叉搜索树篇

二叉搜索树&#xff0c;也叫二叉查找树、二叉排序树&#xff0c;是具有下列性质的二叉树&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值。 注意…

零拷贝(Zero Copy)技术

概念 我们知道Linux系统分为用户态和内核态&#xff0c;在用户态每发起一次IO请求&#xff0c;就需要进行2次上下文切换&#xff08;分别是用户态->内核态&#xff0c;内核态→用户态&#xff09;&#xff0c;和一次CPU拷贝&#xff08;将数据从内核缓存拷贝到用户缓存&…

redis设置密码并修改查看的几种方式

前言 最近正值世纪杯期间&#xff0c;不知道大家心目中的球队成绩如何&#xff0c;最近在工作中需要设置redis服务器的密码的场景 设置密码可以在很大的程度保护redis服务器&#xff0c;但是相关的命令需要通过密码校验之后才能使用 下面就分享给大家两种设置redis服务器的密…

Java并发编程—CompletableFuture的异步执行案例

在博主前几篇博客中&#xff0c;https://blog.csdn.net/qq_52545155/article/details/128167519?spm1001.2014.3001.5501&#xff0c;给大家分享了关于多线程中异步任务的执行和一些相关概念&#xff0c;在这篇博客中&#xff0c;主要是通过一个实际的案例让大家对于Completab…

利用卷神经网络实现IOSLab数字手写图像识别

利用卷神经网络实现IOSLab数字手写图像识别 文章目录利用卷神经网络实现IOSLab数字手写图像识别一、前言二、作业要求三、数据集样本分析四、代码实现1、运行环境2、导入依赖项3、导入数据集4、加载数据和数据预处理5、划分数据集6、CNN网络结构构建7、编译模型8、训练模型9、模…

性能分析之解析 RESAR 性能分析七步法

文章目录一、压力场景数据分析二、架构分析三、响应时间分析四、全局监控分析五、定向监控六、判断性能瓶颈七、提出解决方案一、压力场景数据分析 下面是⼀个登录接⼝的基准场景测试&#xff0c;JMeter 启动后&#xff0c;线程在 1-2 个的时候 TPS 已经达到 200 左右&#xf…

JavaScript -- 字符串常用方法及示例代码介绍

文章目录字符串的方法1 length2 索引3 str.at()4 str.charAt()5 str.concat()6 str.includes()7 str.indexOf() 和 str.lastIndexOf()8 str.startsWith() 和 str.endsWith()9 str.padStart() 和 str.padEnd()10 str.replace() 和 str.replaceAll()11 str.slice() 和 str.substr…

Mysql调优(一)——性能监控

一、大纲图 【Mysql调优.xmind】 二、Mysql调优简写 2.1 性能监控 2.1.1 使用show profile查询剖析工具&#xff0c;可以指定具体的type 此工具默认是禁用的&#xff0c;可以通过服务器变量在会话级别动态的修改&#xff1a; set profiling1;当设置完成之后&#xff0c;在…

某Android大厂面试100题,涵盖测试技术、环境搭建、人力资源......【速度领取】

最近看到网上流传着各种面试经验及面试题&#xff0c;往往都是一大堆技术题目贴上去&#xff0c;但是没有答案。 为此&#xff0c;小编用业余时间整理了这份软测常见的面试题及详细答案&#xff0c;包含测试技术面试题、开发及环境搭建类面试题以及人力资源方向的面试题&#…

代码随想录训练营第42天|01背包问题、LeetCode 416. 分割等和子集

参考 代码随想录 01背包问题 01背包是在M件物品取出若干件放在空间为W的背包里&#xff0c;每件物品的体积为W1&#xff0c;W2至Wn&#xff0c;与之相对应的价值为P1,P2至Pn。01背包是背包问题中最简单的问题。01背包的约束条件是给定几种物品&#xff0c;每种物品有且只有一…

java计算机毕业设计ssm网上拍卖系统vdum4(附源码、数据库)

java计算机毕业设计ssm网上拍卖系统vdum4&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…