zoukankan      html  css  js  c++  java
  • 使用 JdbcTemplate 查询数据时报错:列名无效(已解决)

    又犯了一个错误。

    争取没有下次了。

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

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

    报错

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

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

     代码大致如下:

     1 List<SomeObj> list = getJdbcTemplate().query(sql,
     2                 new RowMapper() {
     3                     public Object mapRow(ResultSet arg0, int arg1)
     4                             throws SQLException {
     5                         SomeObj row = new SomeObj();
     6 
     7                         row.setId(arg0.getString("ID"));
     8                         
     9                         return row;
    10                     }
    11                 });

    找错

    既然是 列名无效,肯定是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。

  • 相关阅读:
    router-link中传值的三种方式
    JVM原理和优化
    JAVA中关于锁机制
    思考程序
    论防御式编程与攻击式编程
    BOM详解
    理解JAVASCRIPT 闭包
    用HTML5 CANVAS做自定义路径的动态效果图片!
    js制作点击会自动隐藏的导航栏(固定在在头部的)
    ++a和a++的区别。
  • 原文地址:https://www.cnblogs.com/memory4young/p/4167044.html
Copyright © 2011-2022 走看看