完整错误总结与改正
这是一次非常典型且完整的开发排错过程。系统性地总结一下过程中遇到的问题和解决方案:
一、环境与配置类错误
错误1:在错误的目录执行 Maven 命令
现象:
text
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory
原因:在D:\webweb目录下执行命令,但pom.xml在D:\webweb\mybatis01\mybatis01中。
改正:切换到包含pom.xml的项目根目录:
bash
cd D:\webweb\mybatis01\mybatis01
错误2:数据库类型不匹配
现象:使用 SSMS(SQL Server 管理工具)连接,但项目配置的是 MySQL 驱动。
原因:application.properties中配置的是 MySQL 驱动,但实际使用的是 SQL Server。
改正:
确认数据库类型(SQL Server)
修改
application.properties中的驱动和 URL在
pom.xml中添加 SQL Server 驱动依赖
错误3:SQL Server TCP/IP 协议未启用
现象:
text
local_tcp_port 返回 NULL Failed to obtain JDBC Connection
原因:SQL Server 默认只启用了共享内存协议,没有启用 TCP/IP,Java 应用无法连接。
改正:
打开 SQL Server 配置管理器(
SQLServerManager11.msc)启用 TCP/IP 协议
配置端口为
1433重启 SQL Server 服务
错误4:防火墙阻止端口 1433
现象:连接超时或拒绝连接
改正:在 Windows 防火墙中添加入站规则,允许 TCP 端口 1433。
错误5:SQL Server 驱动未加载
现象:
text
Cannot load driver class: com.microsoft.sqlserver.jdbc.SQLServerDriver
原因:pom.xml中没有添加 SQL Server 驱动依赖,或依赖未下载成功。
改正:
xml
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>9.4.1.jre16</version> <scope>runtime</scope> </dependency>然后执行mvn clean compile -U强制更新依赖。
错误6:application.properties 配置不正确
现象:各种连接失败
改正后的正确配置:
properties
spring.application.name=mybatis03 spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=2026shangke;encrypt=false;trustServerCertificate=false; spring.datasource.username=sa spring.datasource.password=你的密码 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl关键点:
encrypt=false(SQL Server 2012 不支持加密)使用
127.0.0.1而不是localhost使用
trustServerCertificate=false
二、SQL 语法类错误
错误7:数据库名以数字开头导致语法错误
现象:
text
消息 102,级别 15,状态 1,第 1 行 "2026"附近有语法错误。
原因:SQL Server 中,以数字开头的数据库名需要用方括号括起来。
改正:
sql
错误 USE 2026shangke; 正确 USE [2026shangke];错误8:表名user是保留关键字
现象:
text
关键字 'user' 附近有语法错误。
原因:USER是 SQL Server 的保留关键字,作为表名时需要转义。
改正:
sql
错误 SELECT * FROM user 正确 SELECT * FROM [user]错误9:使用了 MySQL 特有函数
现象:
text
'CONCAT' 不是可识别的内置函数名称
原因:SQL Server 使用+拼接字符串,而不是CONCAT()。
改正:
sql
MySQL 语法 LIKE CONCAT('%', #{name}, '%') SQL Server 语法 LIKE '%' + #{name} + '%'错误10:表不存在
现象:
text
对象名 'user' 无效。
原因:没有在 SQL Server 中创建[user]表。
改正:在 SSMS 中执行建表 SQL:
sql
USE [2026shangke]; CREATE TABLE [user] ( id INT IDENTITY(1,1) PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE, password VARCHAR(32) NOT NULL DEFAULT '123456', email VARCHAR(50), phone VARCHAR(20), status TINYINT NOT NULL DEFAULT 1, create_time DATETIME NOT NULL, update_time DATETIME NOT NULL );三、代码类错误
错误11:UserMapper 中部分 SQL 未修改
现象:listAll()能工作,但其他方法报错。
原因:只修改了listAll()中的[user],其他方法还是user。
改正:将所有user改为[user]。
错误12:VSCode 测试按钮不显示
现象:右键没有 "Run Test" 选项,方法左侧没有 ▶ 按钮。
原因:
缺少 VSCode 测试插件
Maven 未编译
文件未保存
改正:
安装
Test Runner for Java插件执行
mvn clean compile保存所有文件(
Ctrl + S)重新加载 VSCode 窗口
四、错误原因分类统计
| 错误类型 | 数量 | 占比 |
|---|---|---|
| 数据库配置(驱动、端口、协议) | 4 | 33% |
| SQL 语法(关键字、函数、表名) | 4 | 33% |
| Maven/环境(目录、依赖) | 2 | 17% |
| VSCode/插件 | 2 | 17% |
| 合计 | 12 | 100% |
五、核心经验教训
1️⃣ 确认数据库类型
MySQL和SQL Server的驱动、连接 URL、SQL 语法都不同
第一步就要确认项目配置和实际数据库一致
2️⃣ 保留关键字需要转义
在 SQL Server 中,
user、table、select等都是保留关键字作为表名/列名时要用
[]括起来
3️⃣ 数据库服务需要正确配置
确保 TCP/IP 协议已启用
确保防火墙允许对应端口
确保使用正确的端口号
4️⃣ Maven 依赖管理
添加新依赖后执行
mvn clean compile -U确认依赖已正确下载到本地仓库
5️⃣ 善用错误日志
查看
target/surefire-reports/目录下的测试报告使用
-e或-X参数获取详细错误信息
六、成功后的正确配置总结
application.properties
properties
spring.application.name=mybatis03 spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=2026shangke;encrypt=false;trustServerCertificate=false; spring.datasource.username=sa spring.datasource.password=你的密码 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl pom.xml 关键依赖
xml
<!-- SQL Server 驱动 --> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>9.4.1.jre16</version> <scope>runtime</scope> </dependency>SQL 语法要点
sql
--SQL Server 正确语法 USE [2026shangke]; SELECT * FROM [user]; INSERT INTO [user](username) VALUES ('admin'); UPDATE [user] SET username = 'admin2' WHERE id = 1; DELETE FROM [user] WHERE id = 1; LIKE '%' + #{keyword} + '%'