问题如下:
当我的ibatis调用了存储过程以后,程序运行了此存储过程,也同样返回了id值,但是,实际情况是:数据库内并没有生成词条记录,但是,在数据库中执行此sql时候,没有问题,但是,程序中的那个id号则已经跳过了。
首先是配置的xml <resultMap class="server.dbTO.UserTable" id="result">
<result property="id" column="iId" />
</resultMap>
<procedure id="registerUser" parameterClass="server.dbTO.UserTable" resultMap="result" >
exec getId @iId=null,@name=#username#,@pass=#password#
</procedure>
接着是java代码:package test;
import server.IbatisDAO;
import server.dbTO.UserTable;
public class test {
public static void main(String []args){
UserTable table=new UserTable();
IbatisDAO dao=new IbatisDAO();
table.setUsername("ibatistest");
table.setPassword("123123");
UserTable result=dao.insert(table);
System.out.println("得到的结果: "+result.getId());
}
}
public UserTable insert(UserTable p){//作注册帐号
UserTable table=null;
try {
Reader reader= Resources.getResourceAsReader("server/SqlMapConfig.xml");
SqlMapClient sqlmap=SqlMapClientBuilder.buildSqlMapClient(reader);
table=(UserTable)sqlmap.queryForObject("Contact.registerUser",p);
System.out.println(table.getId()+"id");
return table;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return table;
}最后是sql的存储过程
USE [graduatedesign]
GO
/****** Object: StoredProcedure [dbo].[getId] Script Date: 05/13/2012 14:11:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getId]
@iID int out ,@name varchar(40),@pass varchar(40)
AS
insert into usertable (username,password) values(@name,@pass)
/*Select SCOPE_IDENTITY() as iId*/
set @iID = SCOPE_IDENTITY()
select @iID as iId
return
程序运行结果如下(我用p6spy全程跟踪数据库执行的句子):01:20:41,077|1|0|rollback||
01:20:41,589|347|0|statement|exec getId @iId=null,@name=?,@pass=?|exec getId @iId=null,@name='ibatistest',@pass='123123'
01:20:41,671|-1||resultset|exec getId @iId=null,@name='ibatistest',@pass='123123'|iId = 31
01:20:41,686|12|0|rollback||
31id
得到的结果: 31
实际数据库中的记录如下:27 tewst 123123 NULL NULL
28 ibatistest 123123 NULL NULL
29 ibatistest 123123 NULL NULL
32 mytest 123123 NULL NULL
当我的ibatis调用了存储过程以后,程序运行了此存储过程,也同样返回了id值,但是,实际情况是:数据库内并没有生成词条记录,但是,在数据库中执行此sql时候,没有问题,但是,程序中的那个id号则已经跳过了。
首先是配置的xml <resultMap class="server.dbTO.UserTable" id="result">
<result property="id" column="iId" />
</resultMap>
<procedure id="registerUser" parameterClass="server.dbTO.UserTable" resultMap="result" >
exec getId @iId=null,@name=#username#,@pass=#password#
</procedure>
接着是java代码:package test;
import server.IbatisDAO;
import server.dbTO.UserTable;
public class test {
public static void main(String []args){
UserTable table=new UserTable();
IbatisDAO dao=new IbatisDAO();
table.setUsername("ibatistest");
table.setPassword("123123");
UserTable result=dao.insert(table);
System.out.println("得到的结果: "+result.getId());
}
}
public UserTable insert(UserTable p){//作注册帐号
UserTable table=null;
try {
Reader reader= Resources.getResourceAsReader("server/SqlMapConfig.xml");
SqlMapClient sqlmap=SqlMapClientBuilder.buildSqlMapClient(reader);
table=(UserTable)sqlmap.queryForObject("Contact.registerUser",p);
System.out.println(table.getId()+"id");
return table;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return table;
}最后是sql的存储过程
USE [graduatedesign]
GO
/****** Object: StoredProcedure [dbo].[getId] Script Date: 05/13/2012 14:11:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getId]
@iID int out ,@name varchar(40),@pass varchar(40)
AS
insert into usertable (username,password) values(@name,@pass)
/*Select SCOPE_IDENTITY() as iId*/
set @iID = SCOPE_IDENTITY()
select @iID as iId
return
程序运行结果如下(我用p6spy全程跟踪数据库执行的句子):01:20:41,077|1|0|rollback||
01:20:41,589|347|0|statement|exec getId @iId=null,@name=?,@pass=?|exec getId @iId=null,@name='ibatistest',@pass='123123'
01:20:41,671|-1||resultset|exec getId @iId=null,@name='ibatistest',@pass='123123'|iId = 31
01:20:41,686|12|0|rollback||
31id
得到的结果: 31
实际数据库中的记录如下:27 tewst 123123 NULL NULL
28 ibatistest 123123 NULL NULL
29 ibatistest 123123 NULL NULL
32 mytest 123123 NULL NULL
解决方案 »
- 使用token标记防止表单重复提交后,怎么登录不能正常使用了?大家帮我看看这个问题,webwor框架的
- 如何用java远程开启Tomcat服务?在线等...
- DAOFactory问题
- JASPER如何转换成XML?
- common-upload框架,出现java.io.FileNotFoundException?
- 如何使用java实现计算机重新启动
- struts中出了使用seesion传递值,还可以用什么?request?
- 为什么我在cloudview中新建一个数据库会有这样的错误
- 麻烦大家办个忙,关于ejb中的事务处理,谢谢了
- A项目写了一个接口,B项目如何调用该接口?求比较详细的解答啊~
- Unable to load configuration. - bean - jar:file
- 我的jrxml文件只要已导入就出错,换了jrxml文件还出错,求解?
01:20:41,686|12|0|rollback||LZ 没有看到吗?rollback说明没有执行成功。
<parameter property="iId
" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>
<parameter property="username" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="password" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
</parameterMap>然后
<procedure id="registerUser" parameterMap="getIdParam" statementType="CALLABLE" >
{call getId (?,?,?)}
</procedure>ibatis可能稍有不同
table=(UserTable)sqlmap.queryForObject("Contact.registerUser",p);
时,有返回的id,但是数据库中没有插入值,当我用:
table=(UserTable)sqlmap.insert("Contact.registerUser",p);
数据库中值被插入,但是无返回id,控制台报错。