org.springframework.jdbc.UncategorizedSQLException: ### Error querying database.

今天在开发的时候遇到一个问题,有个业务状态需要配置数据字典,字典的值value为0,1,2,3...等,可是当我配置好之后,在添加的时候代码如下
 <form:select path="status">
        <form:option value="" label=""/>
        <form:options items="${fns:getDictList('BUS_STATUS')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
                        </form:select>

使用spring的form标签,但是代码改好之后,却无法从数据库中将字典转换为真实的值。一开始我还怀疑是代码的问题,后来经过仔细检查之后发现代码没有问题。于是我通过打断点来查找问题,
后来发现从数据库中查到的键的值是'1 ',大家仔细看,'1 '占了两个字节,说明一下,我用的数据库是db2,可视化工具是DbVisualizer Pro 9.1.8,通过查看数据库发现业务状态这个字段类型是char2,于是我通过sql语句:
alter table tablename alter column  columnname set data type varchar(2);
将业务状态这个字段的类型改为varchar。
由于是修改字段的问题,数据库报了-668这个错误,于是我用reorg table tablename解决了这个问题。
当我以为就这样就大功告成的时候,在查询的时候却报了这个错误:

org.springframework.jdbc.UncategorizedSQLException: ### Error querying database. Cause: com.ibm.db2.jcc.am.SqlException: [jcc][t4][2093][11302][4.7.85] 由于服务器上发生错误而使得查询处理已终止。 ERRORCODE=-4228, SQLSTATE=null ### The error may exist in file [/data/apache-tomcat-7.0.57/webapps/mmc/WEB-INF/classes/META-INF/mybatis/mappings/db2/loan/WH_MICRO_CREDIT.xml] ### The error may involve cn.com.yitong.modules.loan.dao.WhMicroCreditDao.queryByCriteria ### The error occurred while handling results ### SQL: select * from ( select rownumber() over(order by CREATE_DTIME DESC) as rownumber_, SERIAL_NO,STATUS,BOR_IDNO,BOR_NAME,BOR_PHONE, GUA_IDNO,GUA_NAME,GUA_PHONE,APPLY_AMOUNT,TERM_TYPE, APPLY_TERM,RATE_YEAR,RATE_FLOAT_TYPE,RATE_FLOAT_PROP,EXCT_RATE_YEAR, EXCT_RATE_MONTH,OVERDUE_PENALTY_RADIO,OVERDUE_RATE_MONTH,TRANSUSE_RATE_MONTH,TRANSUSE_PENALTY_RADIO, RATE_ADJUST_MODEL,RATE_ADJUST_METHOD,REPAYMENT_METHOD,PAY_RATE_METHOD,PAY_RATE_DATE, LOAN_TARGET,AGR_TYPE,LOAN_USEAGE,PAYMENT_METHOD,TURNOVER, FAMILY_INCOME,ACCOUNT_REC,STOCK,PURCHASE_COST,STAFF_EXPENSE, OTHER_EXPENSE,FAMILY_EXPEND,ACCOUNT_PAYABLE,INITIAL_CAPITAL,BANK_LOAN, LONGTERM_LIAB,REMARK,CUST_SIGN,CREATE_DTIME,CUST_MANAGER, EXT_FIELD1,EXT_FIELD2,EXT_FIELD3,GUA_TYPE from ARESV3.WH_MICRO_CREDIT WHERE CREATE_DTIME >= ? and CREATE_DTIME <= ? order by CREATE_DTIME DESC ) as temp_ where rownumber_ <= 10 ### Cause: com.ibm.db2.jcc.am.SqlException: [jcc][t4][2093][11302][4.7.85] 由于服务器上发生错误而使得查询处理已终止。 ERRORCODE=-4228, SQLSTATE=null ; uncategorized SQLException for SQL []; SQL state [null]; error code [-4228]; [jcc][t4][2093][11302][4.7.85] 由于服务器上发生错误而使得查询处理已终止。 ERRORCODE=-4228, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.SqlException: [jcc][t4][2093][11302][4.7.85] 由于服务器上发生错误而使得查询处理已终止。 ERRORCODE=-4228, SQLSTATE=null

我重启了服务之后这个问题就没有了。
,我通过打断点发现从数据库中传进来的值依然是'1 ',依然占了两个字节,于是我将数据库原来的所有业务状态的值重新赋值,再查询就可以了。
我的解决方法可能与大家的不一样,仅供大家参考,作为新手有问题希望大家指出。


你可能感兴趣的:(java,sql,db2)