【异常】Error querying database. Cause: java.sql.SQLException: No value specified for parameter 1
2023-09-14 09:04:55 时间
一、 报错内容
Cause: java.sql.SQLException: No value specified for parameter 1
2023-03-10 14:08:26.452 [project-terminal-api] [XNIO-1 task-1] ERROR .
### GlobalExceptionHandler -
### 请求地址'/api/V1/log/uploadCompleted',发生未知异常.org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: java.sql.SQLException: No value specified for parameter 1
### The error may exist in URL [jar:file:/project/!/BOOT-INF/classes!/mapper/CrashLogMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT crash_id count FROM t_crash_log_main WHERE project_id = ?1 AND log_hash = ?2 LIMIT 2
### Cause: java.sql.SQLException: No value specified for parameter 1
; bad SQL grammar []; nested exception is java.sql.SQLException: No value specified for parameter 1
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
二、 报错说明
定位错误的SQL语句,找到了如下SQL内容,这一看好像很熟悉啊。占位符赋值
<select id="countByLogHashByLimit" resultType="java.lang.String">
SELECT crash_id count
FROM t_crash_log_main
WHERE project_id = ?1
AND log_hash = ?2
LIMIT 2
</select>
出现因为执行Mybatis先于对SQL语句中的占位符赋值出错了,Mybatis获取参数值得两种方式:${}和#{}
因此,导致了以上错误No value specified for parameter 1
好吧,因为ORM层发生了改变,代码是从JPA迁移到Mybatis中的,所有这个?1 , ?2 代码没有改到。
<select id="selectIdByLogHashLimit" resultType="java.lang.String">
SELECT crash_id
FROM t_crash_log_main
WHERE project_id = #{projectId}
AND log_hash = #{hashValue}
LIMIT #{i}
</select>
三、 问题解决
将Mybatis中的XML文件修改成如下即可。
<select id="selectIdByLogHashLimit" resultType="java.lang.String">
SELECT crash_id
FROM t_crash_log_main
WHERE project_id = #{projectId}
AND log_hash = #{hashValue}
LIMIT ${i}
</select>
相关文章
- java分层打印二叉树_基于Java的二叉树层序遍历打印实现
- java 怎样卸载一个类_Java 动态卸载类[通俗易懂]
- Java大数据方向学习路径导航[通俗易懂]
- java从入门到精通_Java 入门到精通的过程
- java常量有哪些_Java中的常量有哪些?
- 构建 Java 镜像的 10 个最佳实践
- java山寨qq账号密码验证_Java实战-山寨QQ
- java核心技术 – 17个重要的知识点
- Java关键字this和super的用途
- 进程调度时间片轮转例题_进程调度算法java
- Java中的继承(extends)
- Java并发基础面试题
- 面试必问:说一下 Java 虚拟机的内存布局?
- java的继承
- Java在Linux系统上的安装(java安装linux)
- Java基础-运算符详解编程语言
- java 中 byte[]、File、InputStream 互相转换详解编程语言
- 机制实现Redis Java的过期机制(redisjava过期)
- 使用Java连接SQL Server数据库,快速高效地管理数据(java连接sqlserver数据库)
- Java工程师集MySQL技能于一身(java工程师mysql)
- 市场Oracle公司助力Java攻克市场(oracle公司java)
- Java编程从Oracle中读取数据(java读取oracle)
- 安装Oracle JDK 从Java进入下一个级别(oracle下载java)
- java自定义任务类定时执行任务示例callable和future接口使用方法