使用 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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM