2 heandbei heandbei 于 2017.01.09 11:10 提问

mybatis调用存储过程问题

错误如下
org.springframework.jdbc.BadSqlGrammarException:

Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 其他会话正在使用事务的上下文。

The error may exist in file [D:\Java\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\Jinwangwang\WEB-INF\classes\com\jww\core\entity\AccountsInfo.xml]

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: {call THAccountsDB.dbo.NET_PW_RegisterAccounts( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )}

Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 其他会话正在使用事务的上下文。

; bad SQL grammar []; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 其他会话正在使用事务的上下文。

估计是AccountsInfo.xml有问题,但是找不到哪里有问题。
AccountsInfo.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >






















<select id="add1" statementType="CALLABLE" >
    <![CDATA[
     {call THAccountsDB.dbo.NET_PW_RegisterLevel1Accounts(
      #{ai.accounts,jdbcType=VARCHAR,mode=IN},
      #{ai.nickName,jdbcType=VARCHAR,mode=IN},
      #{ai.logonPass,jdbcType=VARCHAR,mode=IN},
      #{ai.insurePass,jdbcType=VARCHAR,mode=IN},
      #{ai.dynamicPass,jdbcType=VARCHAR,mode=IN},
      #{ai.faceID,jdbcType=INTEGER,mode=IN},
      #{ai.gender,jdbcType=INTEGER,mode=IN},
      #{ai.compellation,jdbcType=VARCHAR,mode=IN},
      #{ai.passPortID,jdbcType=VARCHAR,mode=IN},
      #{ai.clientIP,jdbcType=VARCHAR,mode=IN},
      #{ai.error,jdbcType=VARCHAR,mode=OUT}
     )}
     ]]>
 </select>

<select id="add" statementType="CALLABLE">
     <![CDATA[
     {call THAccountsDB.dbo.NET_PW_RegisterAccounts(
      #{ai.accounts,jdbcType=NVARCHAR,mode=IN},
      #{ai.nickName,jdbcType=NVARCHAR,mode=IN},
      #{ai.logonPass,jdbcType=NCHAR,mode=IN},
      #{ai.insurePass,jdbcType=NCHAR,mode=IN},
      #{ai.dynamicPass,jdbcType=NCHAR,mode=IN},
      #{ai.faceID,jdbcType=INTEGER,mode=IN},
      #{ai.gender,jdbcType=TINYINT,mode=IN},
      #{ai.spreader,jdbcType=NVARCHAR,mode=IN},
      #{ai.compellation,jdbcType=NVARCHAR,mode=IN},
      #{ai.passPortID,jdbcType=NVARCHAR,mode=IN},
      #{ai.clientIP,jdbcType=NVARCHAR,mode=IN},
      #{ai.error,jdbcType=NVARCHAR,mode=OUT}
     )}
     ]]>     
 </select>
<select id="get" resultMap="accountsInfo">
    select * from THAccountsDB.dbo.AccountsInfo where UserID=#{spreaderID}
</select>

mapper接口
public void add(@Param(value="ai") AccountsInfo ai);

1个回答

JE_GE
JE_GE   2017.01.09 12:12

确认一下是否sqlSession资源没有关闭了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Mybatis调用存储过程缺陷
MyBatis调用存储过程,如果存储过程申明了OUTPUT类型变量,则必须在成功或者失败的时候给OUTPUT变量赋值,否者报错!!! Caused by: org.apache.ibatis.exceptions.PersistenceException:  ### Error querying database.  Cause: java.lang.NullPointerExceptio
SpringMVC与Mybatis集合实现调用存储过程、事务控制
在SSM框架中经常会用到调用数据库中的存储过程、以及事务控制,下面以保存某单据为例,介绍一下: 1、Oracle中存储过程代码如下(主要逻辑将单据编码自动加1,并将该单据编码返回): CREATE OR REPLACE PROCEDURE "UPDATE_DJBHZT" (p_GSID in varchar2, p_TBLNAME in varchar2,
mybatis调存储过程返回输出参数
过程: --------------------- create or replace PROCEDURE PRO_RETURE_CURSOR(modelid varchar2,CUR OUT varchar2) AS BEGIN CUR := 'SELECT * FROM TA_AREA t'||modelid; END; ---------------------- my
Mybatis中调用返回结果集的存储过程
一、编写与PL/SQL调试存储过程 1.1、编写 get_recomend_news.sql CREATE OR REPLACE PROCEDURE get_recomend_news(userName in varchar2,resultList out sys_refcursor) IS --定义变量 CURSOR my_cursor is select a.news_type from
Mybatis调用sqlserver2008存储过程
今天做工程时,用户提到了一个需求,要求对项目表(PM)中的项目填加删除功能, 不但要对主表删除,还要对子表1、子表2进行级联删除,在数据库没有使用级联删除约束,我用的数据库是sqlserver2005,从网上搜了几个方法,说是用 begin 语句1; 语句2;~~~~~ end   我一试,呵呵,果然不行,有可能在mysql中可以这样写,不知道为什么mybatis对sqlserv
Mybatis技术(五)Mybatis调用存储过程
如何使用Mybaits调用数据库中的存储过程,下面以Oracle数据库的为例:   1.在数据库中创建以下的存储过程:   create or replace procedure pro_hello(p_user_name in varchar2,p_result out varchar2) is begin p_result := 'hello,' || p_us
mybatis 调用oracle 存储过程并返回结果集
1. xml文件 {call cassify_massive_water_bill( #{startMonth,mode=IN}, #{endMonth,mode=IN}, #{waterProperty,mode=IN}, #{avgYsl,mode=I
Mysql的存储过程,Mybatis对存储过程的调用
mysql存储过程1.存储过程简介我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同
mybatis-如何调用存储过程
最近因为公司的需求,所以整理了一下mybatis调用存储过程的资料分享给大家。 1.创建存储过程 例如 存储过程中 in,out, in out 表示; in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。 out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程 in out 表示高参数可以向该过程中传
mybatis Sqlserver 存储过程 结果集
Sqlserver返回结果集的存储过程调用方式: 一、存储过程: CREATE PROCEDURE [dbo].[ProcedureName] @para1 VARchar(8)='HNZZC001', @para2  VarChar(30)='2010-07-08 02