又犯了一个错误。

争取没有下次了。

就算再犯,也要知道去哪找答案。

所以,记录一下,以示警戒。

报错

使用 JdbcTemplate 查询数据时,出现异常:

PreparedStatementCallback; bad SQL grammar [--sql--]; nested exception is java.sql.SQLException: 列名无效

代码大致如下:

 List<SomeObj> list = getJdbcTemplate().query(sql,
new RowMapper() {
public Object mapRow(ResultSet arg0, int arg1)
throws SQLException {
SomeObj row = new SomeObj(); row.setId(arg0.getString("ID")); return row;
}
});

找错

既然是 列名无效,肯定是SQL的问题了。

于是,把SQL贴到PL/SQL 中执行,奇怪,没有报错。

反复试了几次,都是程序报错,但直接执行SQL没问题。

想起之前由于参数个数的问题,遇到过这样的异常:java.sql.SQLException: 无效的列索引

于是又检查了一遍参数,没有问题。

只能上网找找答案了。

搜了几篇文章,没找到和这个类似的问题。

看着看着,忽然想到,SQL中查询的列,和Java代码中要获取的列一致么?

原来是这样

出现异常的原因找到了:在Java代码中用到的列,SQL中没有查询。

即,Java中用到了类似这样的代码:  row.setId(arg0.getString("COL_A"))  ,而SQL中的 SELECT 语句中没有 COL_A 这一列。

后记:这是调整之前已有的代码,去掉了一些不必要的列,所以才导致SQL和后面需要取值的列不一致。

新开发的话,应该不会出现这个问题。

因为,这类应用,一般都是确定了需要哪些列,然后再去组装SQL。

使用 JdbcTemplate 查询数据时报错:列名无效(已解决)的更多相关文章

  1. 【iBatis】使用resultMap配置返回结果时报错“列名无效”

    使用iBatis联查DEPT.EMP两张表时 采用如下结构 <resultMap id="find_departmentMap" class="com.dto.De ...

  2. vue项目引入第三方js插件,单个js文件引入成功,使用该插件方法时报错(问题已解决)

    1.引入第三方js文件,npm安装不了 2.控制台显示引入成功 3.在methods下使用 图片看不清请看下面代码 updateTime() { setInterval(()=>{ var cd ...

  3. SQL查询数据时报错

    在开发过程中如果查询报如下的错误: org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column ...

  4. c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”

    ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述     相关代码 using System; us ...

  5. MySQL 导入外部数据时报错:1153: Got a packet bigger than 'max_allowed_packet' 解决方案

    MySQL 导入外部数据时报错:1153: Got a packet bigger than 'max_allowed_packet' 解决方案 zoerywzhou@163.com http://w ...

  6. layui表格数据渲染SpringBoot+Thymeleaf返回的数据时报错(Caused by: org.attoparser.ParseException: Could not parse as expression: ")

    layui table渲染数据时报错(Caused by: org.attoparser.ParseException: Could not parse as expression: ") ...

  7. JdbcTemplate查询数据 三种callback之间的区别

    JdbcTemplate针对数据查询提供了多个重载的模板方法,你可以根据需要选用不同的模板方法. 如果你的查询很简单,仅仅是传入相应SQL或者相关参数,然后取得一个单一的结果,那么你可以选择如下一组便 ...

  8. python+selenium 批量执行时出现随机报错问题【已解决】

    出现场景:用discover方法批量执行py文件,出现随机性的报错(有时a.py报错,有时b.py报错...),共同特点:均是打开新窗口后,切换最新窗口,但定位不到新窗口的元素,超时报错.由于个人项目 ...

  9. Oracle 参数化更新数据时报错:Oracle ORA-01722: 无效数字

    报错:Oracle ORA-01722: 无效数字 看了一篇博客,据说是参数与列名不能一致,改过之后还是报一样的错误:Oracle ORA-01722: 无效数字 ,后来试了一下,不是参数名必须不一样 ...

随机推荐

  1. 使用OClint进行iOS项目的静态代码扫描

    使用OClint进行iOS项目的静态代码扫描 原文链接:http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html 最近需要 ...

  2. api日常总结

    异步加载JS和CSS <script type="text/javascript"> (function () { var s = document.createEle ...

  3. ToolTip C#

    yourToolTip = new ToolTip(); //The below are optional, of course, yourToolTip.ToolTipIcon = ToolTipI ...

  4. App架构师实践指南一之App基础语法

    第二章:App基础语法1.编程范式编程范型或编程范式(programming paradigm),是指从事软件工程的一类典型的编程风格.常见的编程范式有过程化(命令行)编程.事件驱动编程.面向对象编程 ...

  5. 04-树5 Root of AVL Tree + AVL树操作集

    平衡二叉树-课程视频 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the tw ...

  6. WIN10平板 总是提示你需要管理员权限怎么办

    例如在往C盘拷贝文件的时候,会出现下面的提示,虽然点击继续也可以执行,但是还是非常麻烦   WIN+R,打开组策略   在Windows设置-安全设置-安全选项中,找到用户账户控制,设置为已禁用,应用 ...

  7. oracle完全删除实例

    问题描述: 重建oracle库实例,因此要删除数据库实例 问题解决: 利用自用自带的dbca库管理,实现图形化删除实例  01.登录安装oracle数据库的linux 打开xshell企业版的Xman ...

  8. Swap 分区的2种方式 详解与例子

    安装完Linux系统后,swap分区太小怎么办,怎么可以扩大Swap分区呢?有两个办法,一个是从新建立swap分区,一个是增加swap分区.下面介绍这两种方法: 第一您必须有root权限,过程中一定要 ...

  9. JSP 性能优化

    无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaScript 执行过程耗时越久,浏览器等待响应用户输入的时间就越长.浏览器在下载和执行 ...

  10. JS前台效果

    最新的在上面 2014年3月3日14:46:46 百分比思路 function fixWidth(percent) { return document.body.clientWidth * perce ...