Java开发遇见的异常错误


前言

记录开发过程中常见的异常。


一、MySQL

1、MySQL 插入emoji表情错误的解决方案,Incorrect string value: '\xF0\x9F\x98\x84’

原因: mysql的UTF-8只支持三个字节的存储,而一般字符是三个字节,但是emoji表情是4个字节,所以存储不了。

解决方案:

第一步:在有表情的字段上就应该这样做,将该字段设置为utf8mb4

ALTER TABLE table_name MODIFY  colum_name  VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

第二步:设置表的字符集

ALTER TABLE table_name CHARSET=utf8mb4;

若前两步可以插入表情了,则不用设置数据库为utf8mb4。
若由于未知原因,你还是不能存储表情,就每次插入啊修改啊之前都set设置下面的语句:

SET NAMES utf8mb4

2、MySQL java.sql.SQLException: Incorrect string value

原因: 字符编码问题造成的。

解决方案:

https://blog.csdn.net/u013066244/article/details/100095693


3、MySQL 提示 check the manual that corresponds to your MySQL server version for the right syntax

原因: 一方面因为是使用了关键字作为表名或者字段名,另一方面可能因为在设置varchar类型的字段时忘记加上引号。

解决方案:

1.检查sql是否有中文字符
2.检查sql字段是否与关键字冲突,如desc,join等
3.检查sql格式,是否含特殊字符,是否正确分行等


4、MySQL server 5.6 + MySQL WorkBench 5.2.47 备份数据库出错

原因: 备份数据库用的那个文件版本太低了,要用高点的版本。

解决方案:

在MySQL Workbench里,点击菜单:Edit–Preferences
在这里插入图片描述
选择Administrator,里面第一项,Path to mysqldump Tool
在这里插入图片描述
找到MySQL安装目录,注意,不是WorkBench的安装目录哦,选择备份用的那个文件,然后ok确定就好了。
在这里插入图片描述


5、MySQL 查询数据时报Syntax error or access violation: 1055 Expression #1 of SELECT list is not 错误解决

原因: 错误发生在mysql 5.7 版本及以上版本会出现的问题,在mysql5.7版本默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准",很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。

解决方案:

找到数据库配置文件windows中my.ini文件或linux中的my.cnf文件,在mysqld中增加sql_mode=

[mysqld]
sql_mode=

修改之后重新启动mysql即可。


6、Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE…

原因: 因为在mysql在safe-updates模式中,如果你where后跟的条件不是主键id,那么就会出现这种错误。

解决方案:

  1. 执行该命令更改mysql数据库模式:SET SQL_SAFE_UPDATES = 0;
  2. 在where判断条件中跟上主键id,例如:delete from firstmysqldatabase.user where UserName='zhangsan' and ID>=0;

二、IDEA

1、Intellij idea 报错:Error : java 不支持发行版本5

原因: 报错应该是项目编译配置使用的Java版本不对,需要检查一下项目及环境使用的Java编译版本配置。

解决方案:

第一步:在Intellij中点击“File” -->“Project Structure”,看一下“Project”和“Module”栏目中Java版本是否与本地一致:
在这里插入图片描述
在这里插入图片描述
第二步:点击“Settings”–>“Bulid, Execution,Deployment”–>“Java Compiler”,Target bytecode version设为本地Java版本。
在这里插入图片描述
在这里插入图片描述


2、IDEA 创建第一个maven项目报错:Cannot resolve plugin org.apache.maven.plugins:maven-clean-plugin:2.5

原因: 本地maven的配置文件和仓库地址不一致

解决方案:

在本地新建一个repository文件夹和一个setting.xml文件,然后再配置setting.xml文件,最后在idea中配置maven。
在这里插入图片描述


三、Mybatis

1、Error attempting to get column ‘create_time’ from result set. Cause: java.sql.SQLFeatureNotSupported

原因: 表的createtime类型为DateTime,而Java8里面新出来了一些API,LocalDate、LocalTime、LocalDateTime ,但是在默认的情况下,在mybatis里面不支持java8的时间、日期。

解决方案:

  1. 将mybatis降到3.5.0版本
  2. 更改javabean类中的createtime的类型为Date

2、Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String

原因: 在mapper.xml文件中, 判断了, Date 类型的数据与空字符串的比较。

解决方案:

错误代码示例:

						<!-- 错误代码地点 -->
<if test="endDate!=null and endDate!=''">
	and c.input_time &lt;=#{endDate}
</if>

只要把那个判断的语句(endDate!=’ ')删除就可以了。

<if test="endDate!=null">
	and c.input_time &lt;=#{endDate}
</if>

3、java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2)

原因: 是因为mapper.xml中的注释问题。

解决方案: 把注释去掉再重新运行,否则报错。


4、Loading class com.mysql.jdbc.Driver’. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary

原因: 数据库驱动的依赖版本有关。

解决方案:

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

com.mysql.cj.jdbc.Driver是mysql-connector-java 6 中的特性,相比mysql-connector-java 5 多了一个时区:serverTimezone,把数据源配置的驱动改加上 serverTimezone=Asia/Shanghai即可。

url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false

总结:

  • com.mysql.jdbc.Driver和mysql-connector-java 5一起用
  • com.mysql.cj.jdbc.Driver和mysql-connector-java 6 一起用

5、mybatis xml中是sql语句报错: Error creating document instance. Cause: org.xml.sax.SAXParseException

原因: 因为语句中有一个小于号“<”,在XML中,会被当成一个页面元素来解析,不会处理为mysql的SQL语句的组成部分。

解决方案: 在xml的sql语句中,不能直接用大于号、小于号要用转义字符。

第一种:使用转义字符

&lt;<小于号
&gt;>大于号
&amp;&
&apos;单引号
&quot;"双引号

例如: state <= 3 则改成 state &lt;= 3

第二种:使用<![CDATA[ ]]>标记

注意:<![CDATA[ ]]>标记的sql语句中的 <where> <if>等标签不会被解析

<![CDATA[
	state <= 3
]]>

这样,将会把SQL语句中与XML页面元素相同的元素屏蔽,是的XML不将其解析为XML的元素,从而生成正确的SQL语句。


6、Mybatis-plus 出现 WHERE null=?

原因: 这是因为mybatis-plus代码生成时,实体没加@TableId注解

解决方案: 实体主键加上@TableId注解即可。


7、MyBatis-Plus selectMapsPage报错

原因: Page的泛型由 实体(Page) 修改为 IPage<Map<String, Object>>。

解决方案:

代码示例:

@Test
public void selectMapsPage() {
	QueryWrapper<User> wrapper = new QueryWrapper<User>();
	wrapper.like("name", "王");

	int pageNum = 1; // 当前页
	int pageSize = 3; // 每页大小

	//  Page<User> 修改为 IPage<Map<String, Object>>
//		Page<User> page = new Page<>(pageNum, pageSize); // selectMapsPage会报错
	IPage<Map<String, Object>> page = new Page<>(pageNum, pageSize); 
	userMapper.selectMapsPage(page, wrapper);
	System.out.println("总页数:" + page.getPages());
	System.out.println("总记录数:" + page.getTotal());
	List<Map<String, Object>> list = page.getRecords();
	list.forEach(System.out::println);
}

四、Spring框架

1、java.lang.IllegalStateException: Optional int parameter ‘id’ is not present but cannot be translated

原因: 使用基础数据类型接收参数。

解决方案: 将controller层接收数据改用封装数据类型接收参数。如int就用Integer,long使用Long。


2、No converter found for return value of type: class java.util.ArrayList

原因: 这是因为springmvc默认是没有对象转换成json的转换器的,需要手动添加jackson依赖。

解决方案: 手动添加jackson依赖到pom.xml文件中。

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>										
    <version>2.11.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.0</version>
</dependency>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.11.0</version>
</dependency>

3、spring mvc报错:No more pattern data allowed after {*…} or ** pattern element

原因: 错误是路径通配问题,查找发现是spring升级到5.3之后路径通配发生了变化。

解决方案: 具体解决是把/**/*.css 改为 /*/*.css,项目中可能涉及多个文件,都要改。


4、SpringBoot 报错 Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured

原因:

  1. 第一种:就是你在应用中没有配置datasource的一些相关属性,例如:地址值啊,数据库驱动啊,用户名啊,密码啊。
  2. 第二种:DataSourceAutoConfiguration会自动加载.可以排除此类的自动配置

解决方案:

  1. 第一种:将application.properties 或 application.xml 相关的数据源属性配置好
  2. 第二种:如果项目中存在阿里连接池的话这样写,取消加载阿里的和默认的
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class,DataSourceAutoConfiguration.class})

5、AOP 记录日志报错:nested exception is java.lang.reflect.UndeclaredThrowableException

原因: 没有找到相应的方法。

解决方案: 将参数的int换为包装类Integer即可。


6、SpringBoot 报错 The dependencies of some of the beans in the application context form a cycle

原因: dataSource的初始化出现了循环。

解决方案: @SpringBootApplication中添加属性:(exclude={DataSourceAutoConfiguration.class})就可以解决了。


7、OpenFeign 可能出现的The bean ‘XXX.FeignClientSpecification’ could not be registered

原因: 存在一个以上的Feign接口指向同一个微服务。

解决方案: 配置文件添加:

spring:
  main:
    allow-bean-definition-overriding: true #允许多个Feign接口都指向一个服务

8、Nacos 启动异常 db.num is null & Unable to start embedded Tomcat

原因:

解决方案:

(1)异常一:java.io.IOException: java.lang.IllegalArgumentException: db.num is null

  • 步骤1:创建一个名为 nacos 的数据库
  • 步骤2:在 nacos/conf 目录下找到 nacos-mysql.sql 文件,打开文件执行 nacos-mysql.sql 脚本里的 sql
  • 步骤3:修改 application.properties 文件里的 mysql 配置,修改为自己的数据库连接、账号密码。
    在这里插入图片描述在这里插入图片描述

(2)异常二:Unable to start embedded Tomcat

  • 步骤1:修改 nacos/bin 目录下的 startup.cmd 文件,修改为单机模式,默认是集群模式
  • 步骤2:原默认是 cluster 修改为 standalone
    在这里插入图片描述

9、SpringBoot+Thyemleaf开发环境正常,打包jar发到服务器就报错Template might not exist or might not be accessible

解决方案: https://blog.csdn.net/LiMing_0820/article/details/80878168


总结

记录开发过程中常见的异常。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值