如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)

文章目录

  • 前言
  • 运行与配置
  • 报错与解决
    • 问题分析
    • 解决过程
  • 知识点补充
    • 关于 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
  • 最后


如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第1张图片

前言

这篇文章分享记录一下,运行超市订单管理系统的 SSM 项目遇到的问题和相关配置,以及 JDBC 连接数据库遇到的问题和解决方法。文章内容包括,运行 SSM 项目,弄好相关配置,解决项目运行出现的问题,以及解决方法和知识点补充。


运行与配置

首先在 idea 中打开项目,第一次导入项目,需要安装和下载相关的配置,如下图的项目的部分目录结构。我们可以看到 cn.smbms 目录下的五个层级,分别表示为:

  • Controller:控制器,负责处理请求数据、调用 Service 层处理业务逻辑,并将结果返回给视图(UI 层)或直接响应给客户端。
  • DAO:数据访问对象,负责与数据库进行交互,实现对数据的增删改查等操作。
  • POJO:简单 Java 对象,通常用于描述业务模型或数据库映射对象。不带有业务逻辑或特殊行为。
  • Service:业务逻辑层,负责处理业务逻辑、调用 DAO 层进行数据访问、组装数据等。
  • UI:用户界面,是与用户进行交互的部分,通常包括 Web 页面、移动应用等。

这些术语在 SSM (Spring + Spring MVC + MyBatis)项目中都非常常见,每个层次之间都有着不同的关系和职责。例如,Controller 层负责接收用户请求并调用 Service 层处理业务逻辑,DAO 层负责访问数据库并提供数据操作的方法,而 Service 层则负责协调 DAO 层和 Controller 层之间的数据传输和处理。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第2张图片
然后找到项目结构,配置相关的模块、构建和 Facet。我这里的配置基本上是默认配置好的(导入项目时自动配置好的)。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第3张图片
然后是配置 tomcat (重中之重),注意看图片中的版本,是项目启动时默认的,但是出现了报错,因为我的电脑没下载这个版本的 tomcat ,因此要手动选择找到自己电脑中的 tomcat jar 包。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第4张图片
完整配置如下。注意 URL 的配置,因为这个项目首页是 index.html ,所以配置了这个 URL 地址,方便跑完服务后默认加载这个页面。然后默认的 HTTP 端口号是 8080 ,JMX 端口为 1099 。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第5张图片
接下来我们来启动一下服务,点击下图的绿色箭头启动。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第6张图片
服务启动成功 (Successfully completed request),没有报错,页面也跑出来了。

如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第7张图片
然后测试一下功能,看下是否能正常运行,不出意外的话肯定出意外了。这里分别点了下订单管理、供应商管理、用户管理这个三个功能,都出现了 500 报错,然后我一眼看到 JDBC Connection 这两个词,我就知道问题出在哪了,接下来我们解决一下这个问题。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第8张图片
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第9张图片


报错与解决

上面也提及到了项目出现的报错,然后报错定位到了 JDBC 连接数据库出现了问题,除了 JDBC Connection 这两个词很清楚的显示了报错的定位,我们浅浅看下其他报错内容,也可以很清晰的知道哪出了问题,接下来我们来逐步解决。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第10张图片

问题分析

这是一个 SSM 项目中的异常信息,其中嵌套了多个异常。可以从堆栈信息中分析出以下几点:

  • 最外层的异常类型为 NestedServletException,表示 Servlet 处理请求时发生了异常。
  • 原因是 Request processing failed,即请求处理失败。
  • 根本原因是 org.mybatis.spring.MyBatisSystemException,即 MyBatis 运行时发生了异常。
  • 再次嵌套的异常类型为 org.apache.ibatis.exceptions.PersistenceException,表示 MyBatis 操作数据库时发生了异常。
  • 错误信息中含有 Failed to obtain JDBC Connection,表示获取数据库连接失败。

综合来看,这个异常可能是由于应用程序无法连接到数据库服务器导致的。应检查以下几个方面:

  • 数据库服务器是否正常启动并且能够接受连接。
  • 数据库连接配置是否正确,包括数据库地址、端口号、用户名、密码等。
  • 数据库连接池配置是否正确,包括连接池大小、最大连接数、空闲连接超时时间等。

解决过程

第一次跑出来时,因为没有数据库,出现这个报错也无可奈何。之后搞到了数据库,然后用 Navicat 启动 MySQL 服务,然后在确保数据库地址、端口号、用户名、密码都正确的情况下还出现了报错。
在这里插入图片描述
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第11张图片
然后我就认为是 JDBC 版本和 MySQL 版本的问题,其实项目跑出来的页面一股子复古的味道,所以我断定这个是一个老项目了。

然后我们到 WEB-INF => lib 文件下看看驱动是什么版本的,意料之中,这个包版本很低,而且我的数据库的版本是 8。这也是出现报错的主要原因。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第12张图片
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第13张图片
然后我们把驱动也换成 8 的版本。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第14张图片
然后 JDBC 的语法也要修改,把 com.mysql.jdbc.Driver 改成 com.mysql.cj.jdbc.Driver ,然后还要指定时区 serverTimezone


	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/smbmsdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false">
		property>
		<property name="username" value="root">property>
		<property name="password" value="123456" />
		<property name="defaultAutoCommit" value="false" />
	bean>

如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第15张图片
最后,重新启动服务,运行项目。我们可以发现订单管理页面没有出现报错了。到此 JDBC 连接数据库遇到的问题已解决。
如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)_第16张图片


知识点补充

关于 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别

前身和版本

  • com.mysql.jdbc.Driver旧版MySQL 驱动程序,已经过时,不再提供更新。它是从 MySQL Connector/J 5.1 版本开始使用的,到 MySQL Connector/J 5.1.49 版本停止更新。

  • com.mysql.cj.jdbc.Driver新版MySQL 驱动程序,当前稳定版本为 8.x,推荐使用此版本的驱动程序。它是从 MySQL Connector/J 5.1 版本开始引入的一个分支,最初是为了添加 Java 7 和 8 的功能而创建的,后来又添加了其他功能。

时间处理

  • com.mysql.jdbc.Driver 中,时间处理是基于服务器时区的。这意味着,在使用 com.mysql.jdbc.Driver 时,所有的时间戳都以服务器时区为基准。

  • 但是,在 com.mysql.cj.jdbc.Driver 中,时间处理是基于连接时区的。这样可以更好地控制时间戳的处理方式,因为时间戳取决于应用程序的连接时区。

加载方式

  • com.mysql.jdbc.Driver 中,驱动程序将被自动加载和注册,无需显式加载或注册驱动程序。

  • 而在 com.mysql.cj.jdbc.Driver 中,您需要显式地加载和注册驱动程序。通常在应用程序的初始化中注册驱动程序,即可使用这个驱动程序。

安全性

  • com.mysql.jdbc.Driver 存在一些安全性问题,因此不建议在生产环境中使用它。而 com.mysql.cj.jdbc.Driver 较为安全,推荐在生产环境中使用。

连接属性

  • com.mysql.jdbc.Drivercom.mysql.cj.jdbc.Driver 都支持连接属性,但在两个驱动程序中,这些属性的名称和默认值是不同的。

  • com.mysql.jdbc.Driver 中的连接属性名称通常以 “jdbc” 的前缀开始,例如 “jdbcCompliantTruncation”,默认情况下为 “false”

  • com.mysql.cj.jdbc.Driver 中的连接属性名称通常以 “mysql” 的前缀开始,例如 “allowPublicKeyRetrieval”,默认情况下为 “false”

数据库的支持程度

  • com.mysql.jdbc.Driver 对于一些在新版 MySQL 中引入的功能和特性可能不支持。而 com.mysql.cj.jdbc.Driver 则对这些新特性进行了改进和扩展,如支持 JSON 数据类型、支持 OpenSSLSHA256_PASSWORD 加密方式等。

因此,在使用 MySQL 的新特性时,建议使用 com.mysql.cj.jdbc.Driver,总之,com.mysql.cj.jdbc.Driver 更为全面、更加安全且功能更强大,建议优先使用它来连接 MySQL 数据库。


最后

这就是文章的全部内容了,成功运行超市订单管理系统的 SSM 项目,以及 解决了 JDBC 连接数据库出现的问题。文章全部内容包括,运行 SSM 项目,弄好相关配置,解决项目运行出现的问题,以及解决方法和知识点补充,关于 com.mysql.jdbc.Drivercom.mysql.cj.jdbc.Driver 的区别。
在这里插入图片描述

你可能感兴趣的:(#,Java,#,MySQL,Daily,Debug,SSM,JDBC,MySQL,MyBatis,Navicat)