文章目录

  • 1. 复现问题
  • 2. 分析问题
  • 3. 解决问题
  • 4. 出现该错误的其他可能

1. 复现问题

今天在调试接口时,突然报出如下错误:

org.springframework.jdbc.BadSqlGrammarException:
### Error querying database.  Cause: java.sql.SQLException: No value specified for parameter 1
### The error may exist in com/test/cloud/lowcode/mapper/AppCustomComponentVersionMapper.java (best guess)
### The error may involve com.test.cloud.lowcode.mapper.AppCustomComponentVersionMapper.getMaxVersion-Inline
### The error occurred while setting parameters
### SQL: SELECT IFNULL(MAX(version),1.0) from app_custom_component_version WHERE app_custom_component_id = ?;
### Cause: java.sql.SQLException: No value specified for parameter 1
; bad SQL grammar []; nested exception is java.sql.SQLException: No value specified for parameter 1at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79)at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)at com.sun.proxy.$Proxy157.selectOne(Unknown Source)at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89)at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)at com.sun.proxy.$Proxy182.getMaxVersion(Unknown Source)at com.test.cloud.lowcode.service.AppCustomComponentService.getMaxVersion(AppCustomComponentService.java:35)at com.test.cloud.lowcode.service.AppCustomComponentService$$FastClassBySpringCGLIB$$a271163e.invoke(<generated>).....

Error querying database. Cause: java.sql.SQLException: No value specified for parameter 1的错误。

2. 分析问题

正赶上最近ChatGPT很火,于是借助ChatGPT来解决我的问题,如下所示:

This error generally occurs when a parameter is not supplied in the query or when an incorrect number of parameters are provided. To fix this error, check that the correct number of parameters are supplied and that all parameters have a value specified. Additionally, ensure that the values passed as parameters match the data type of the associated column.

可惜的是,ChatGPT给出英文的结果,不妨将其翻译成中文,如下所示:

当查询中未提供参数或提供的参数数量不正确时,通常会发生此错误。若要修复此错误,请检查是否提供了正确数量的参数,以及是否指定了所有参数的值。此外,请确保作为参数传递的值与关联列的数据类型匹配。

根据翻译结果可知未提供参数或提供的参数数量不正确

再回头看我的错误栈信息,如下图所示:

定位是AppCustomComponentVersionMapper类的getMaxVersion方法出现了错误,如下代码所示:

@Mapper
public interface  AppCustomComponentVersionMapper extends BaseMapper<AppCustomComponentVersion> {/*** 获取当前组件下最大的版本号** @author super先生* @datetime 2023/2/17:16:53* @param componentId 组件ID* @return*/@Select("SELECT "+ " IFNULL( MAX( version ), 1.0 ) "+ "FROM "+ "  app_custom_component_version "+ "WHERE "+ "  app_custom_component_id = ? "+ "  AND deleted = 0")float getMaxVersion(@Param("componentId") Long componentId);
}

仔细排查@Select注解中的SQL语句,突然发现app_custom_component_id = ?这里语法错误。

我使用的是mybatis框架,即便参数componentId有实际值,mybatis将也无法将值传进去。

因为mybatis表示占位符的语法是#{变量},而非问号(?),因而,mybatis生成的SQL语句如下:

SELECTIFNULL(MAX(version), 1.0)
FROMapp_custom_component_version
WHEREapp_custom_component_id = ?
AND deleted = 0

这样的SQL语句,jdbc无法执行(mybatis的底层是jdbc),才会报出 No value specified for parameter 1错误。

3. 解决问题

既然知道我的变量语法错误,按照mybatis的语法修改即可,

也就是将app_custom_component_id = ?修改为app_custom_component_id = #{componentId},如下代码所示:

@Mapper
public interface  AppCustomComponentVersionMapper extends BaseMapper<AppCustomComponentVersion> {/*** 获取当前组件下最大的版本号** @author super先生* @datetime 2023/2/17:16:53* @param componentId 组件ID* @return*/@Select("SELECT "+ " IFNULL( MAX( version ), 1.0 ) "+ "FROM "+ "  app_custom_component_version "+ "WHERE "+ "  app_custom_component_id = #{componentId} "+ "  AND deleted = 0")float getMaxVersion(@Param("componentId") Long componentId);
}

此时,重新启动spring boot服务,调用getMaxVersion方法,SQL即可成功运行。

4. 出现该错误的其他可能

正如上文所述,出现这种错误,一般情况下是变量语法的错误,导致框架无法获取到实参。

因而,我们在开发时,一定要注意变量语法。

如果你使用的是jdbcexecuteQuery()方法,一定不要忘了传参,如下图所示:

你会看到:statement.setString(1,username)已被注释,自然无参数可传。

因而,我们需要取消注释,如下图所示:

jdbc才能正常执行sql语句。

多种方法解决Error querying database. Cause: java.sql.SQLException: No value specified for parameter 1相关推荐

  1. 解决 Error querying database. Cause: java.sql.SQLException: sql injection violation....

    解决 Error querying database. Cause: java.sql.SQLException: sql injection violation- 最近在开发的时候老板的需求就是将模 ...

  2. 报错:Error querying database. Cause: java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘

    报错:Error querying database. Cause: java.sql.SQLException: Access denied for user 'root'@'localhost' ...

  3. Error querying database. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource.

    记录java Mybatis框架学习过程中遇到的问题 1.搭建第一个mybatis项目的时候发生异常: Exception in thread "main" org.apache. ...

  4. Error querying database. Cause: java.sql.SQLException:

    记录Mybatis学习过程中遇到的问题 2.由于需要将MySQL数据库配置信息写到一个properties文件中,方便以后修改.在连接的时候发生以下错误: Error querying databas ...

  5. Error querying database. Cause: java.sql.SQLException

    0 环境 系统:win10 IDE: IDEA 数据库:sqlserver 1 正文 报错信息 ### Error querying database. Cause: java.sql.SQLExce ...

  6. ### Error querying database. Cause: java.sql.SQLException: Access denied for user ‘root‘@‘localhost

    作为一个初学者在写关于JavaWeb登录跳转的时候出现了一个问题,如下图: 后来花了半天时间找问题,才发现是自己的粗心大意.我也曾经试过是不是数据库连接出问题了,改过数据库名,连接代码等,但是还是解决 ...

  7. ### Error updating database. Cause: java.sql.SQLException: Incorrect integer value: ‘**‘ for column

    类型 异常报告消息 Request processing failed; nested exception is org.apache.ibatis.exceptions.PersistenceExc ...

  8. Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...

  9. 解决及分析:MySQL的 Error updating database. Cause: java.sql.SQLException: You can’t specify target table

    一.项目从Oracle迁移到MySQL时,报错:Error updating database. Cause: java.sql.SQLException: You can't specify tar ...

最新文章

  1. docker安装clickhouse_docker 安装ClickHouse
  2. 10.30 linux和windows互传文件,用户配置文件和密码配置文件,用户组管理,用户管理...
  3. JDBC修改数据库(Object类的应用)
  4. CodeForces 516E Drazil and His Happy Friends(数学+最短路)
  5. yii2.0AR两表联查
  6. 诗与远方:无题(十七)
  7. python编译为机器码_通过 GraalVM 将 Java 程序编译成本地机器码!
  8. sql server 内存_SQL Server内存性能指标–第5部分–了解惰性写入,空闲列表停顿/秒和待批内存授予
  9. 本机与服务器、镜像机之间文件互传
  10. Chrome 100发布:启用全新图标,修复28个安全漏洞
  11. ABTest灰度发布
  12. unix学习笔记1 read () write()
  13. STM32F407使用MFRC522射频卡调试及程序移植成功
  14. win10北通手柄没反应_赛博朋克2077正式发售,光靠键鼠可不行,试试北通阿修罗3...
  15. Atitit fsm有限状态机概念与最佳实践 目录 1. 概念组成与原理成分 1 1.1. 1、状态机的要素 4个要素,即现态、条件、动作、次态 2 1.2. 状态表 2 2. 性状 2 2.1.
  16. 计算机主板芯片组型号有哪些,如何鉴别主板芯片组型号
  17. Nginx(1)基础部分
  18. 计世资讯:大数据将使用户采购存储解决方案呈现两大新特征
  19. swagger ui 怎么输入对象_java swagger ui 添加header请求头参数的方法
  20. lucene最新版本下载地址(找死我了)

热门文章

  1. 蓝松视觉科技 AI人像抠图说明
  2. Wiley - Visio 2003 Bible [免费下载 经典英文原版书]
  3. 【PM】产品需求管理
  4. 《操作系统第四版》(刘振鹏 王煜)复习总结
  5. 2023教培走强,开源教务排课系统是必需品
  6. 使用docker安装nginx
  7. python+django地铁站自动售票系统-火车票售票系统
  8. C++实现图 - 03 最小生成树
  9. Anaconda的下载和深度学习环境的配置
  10. 主成分的java版_数据降维:主成分分析法