Servlet.service() for servlet [springMVC] in context with path [/project_manager] threw exception [R

javaweb项目使用SQLserver+mybatis这是我写的添加一条记录出现的问题

Servlet.service() for servlet [springMVC] in context with path [/project_manager] threw exception [Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Error selecting key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 'IFNULL' is not a recognized built-in function name.
; uncategorized SQLException for SQL []; SQL state [S00010]; error code [195]; 'IFNULL' is not a recognized built-in function name.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 'IFNULL' is not a recognized built-in function name.] with root cause
com.microsoft.sqlserver.jdbc.SQLServerException: 'IFNULL' is not a recognized built-in function name.


找了半天发现是.xml文件出现的问题。

先看一下代码:

<sql id="getPk">   //为了找到添加的下一条记录的主键值
    SELECT IFNULL(MAX(${pk}),0)+1 FROM ${tb}
</sql>
<insert id="addDevType" parameterType="com.electric.beans.DevTypeInfo">
    <selectKey keyProperty="type_id" order="BEFORE" resultType="int">
        <include refid="getPk">
            <property name="pk" value="type_id"></property>
            <property name="tb" value="devTypeInfo"></property>
        </include>
    </selectKey>
    insert into devTypeInfo values(#{type_id},#{type_name},#{isUsed},#{dev_selfName})
</insert>
因为之前一直使用的是mysql数据库没毛病,所以直接粘过来。结果发现出了上面所说的问题。

之后把上面的那条语句粘到

SELECT IFNULL(MAX(${pk}),0)+1 FROM ${tb}
SQLserver manager studio并选择一个合适的表和主键代替,并运行,结果说是

1.IFNULL不是内置函数

2.max内置函数只有一个参数

所以我认识到这是因为数据库的内置函数的不同,这也是出现这个问题的根本原因。所以我查看了一下SQLserver的内置函数,重新写了一下

新的正确的

<sql id="getPk">
    select ISNull(max(${pk}),0)+1 from ${tb}
</sql>

之后运行正确,问题解决。

我的收获:任何事情找其相同点是很方便,但是切莫忽略其不同之处。有时问题就出现在这些不同之处。总而言之需要认真去做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值