当前位置: 代码迷 >> J2EE >> SqlMapClient operation; uncategorized SQLException for SQL [];
  详细解决方案

SqlMapClient operation; uncategorized SQLException for SQL [];

热度:666   发布时间:2016-04-22 02:42:52.0
ibatis动态语句拼接问题
如下ibatis-news.xml:
  <select id="queryNews" parameterClass="news" resultClass="news">  
select chr_id,title,ctime,htis,type,image from news  
 <dynamic prepend="WHERE">  
<isNotEmpty prepend="" property="chr_id">
  <isNotEqual compareValue="" prepend="and" property="chr_id">
  chr_id=#chr_id#
  </isNotEqual>
</isNotEmpty>
<isNotEmpty prepend="" property="title">
  <isNotEqual compareValue="" prepend="and" property="title">
  title=#title#
  </isNotEqual>
</isNotEmpty>
<isNotEmpty prepend="" property="ctime">
  <isNotEqual compareValue="" prepend="and" property="ctime">
  ctime=#ctime#
  </isNotEqual>
</isNotEmpty>
<isNotEmpty prepend="" property="htis">
  <isNotEqual compareValue="" prepend="and" property="htis">
  htis=#htis#
  </isNotEqual>
</isNotEmpty>
<isNotEmpty prepend="" property="type">
  <isNotEqual compareValue="" prepend="and" property="type">
  type=#type#
  </isNotEqual>
</isNotEmpty>
<isNotEmpty prepend="" property="image">
  <isNotEqual compareValue="" prepend="and" property="image">
  image=#image#
  </isNotEqual>
</isNotEmpty>
  </dynamic>  
</select> 
这样动态拼接一个语句,后来发现
加入 type是 int类型的。
现在在action中来根据 type做查询。type是int类型:
回报如下错误:
java.lang.NumberFormatException: For input string: ""
在页面看到如下信息:
javax.servlet.ServletException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];  
The error occurred in org/zwck/business/news/ibatis-news.xml. 

这个怎么办 是不是因为 type是int类型的而出错了。
我试过任何String了类型的不会错,也就是说如果 type是String类型的那就不会错。

------解决方案--------------------
那就将type在方法中转换成String类型的传过来 不就行了么
------解决方案--------------------
compareValue=""这句话应该是把比较的类型定义为String 了吧,所以会报错.

<isNotEmpty prepend="" property="type">
<isNotEqual compareValue="" prepend="and" property="type">
type=#type#
</isNotEqual>
</isNotEmpty>
LZ有必要这么写嘛,不为空(或NULL)且不等空,直接
<isNotEmpty prepend="" property="type">
type=#type#
</isNotEmpty>
不就行了
------解决方案--------------------
<isNotEmpty prepend="" property="type">
type=#type#
</isNotEmpty>
这么写就没有那个问题了
------解决方案--------------------
int型数据在为空的情况下默认为0,其实你可以再输入数据之前做一个判断,使其不为空,确保数据格式正确
------解决方案--------------------
我一般是转换为integer 类型的
  相关解决方案