我的ibatis存储过程配置如下:
<parameterMap class="map" id="marketParameter">
<parameter property="selectList" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="tableName" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="searchCondition" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="orderBy" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="pageIndex" javaType="java.lang.Integer" jdbcType="INT" mode="IN"/>
<parameter property="pageSize" javaType="java.lang.Integer" jdbcType="INT" mode="IN"/>
<parameter property="totalCount" javaType="java.lang.Integer" jdbcType="INT" mode="OUT"/>
</parameterMap>
<procedure id="selectAllProgram" parameterMap="marketParameter">
<![CDATA[{call dbo.sp_GetPageRecord(?,?,?,?,?,?,?)}]]>
</procedure>
我在JAVA中调用这个存储过程,我想正确的得到结果集和输出参数,我的java代码如下:
Map map = new HashMap();
String total = null;
map.put("selectList", null);
map.put("tableName", "m_program");
map.put("searchCondition", null);
map.put("orderBy", "id");
map.put("pageIndex", pageIndex);
map.put("pageSize", pageSize);
map.put("totalCount", total);
try {
System.out.println("*****========*****");
proList = (ArrayList<MarketPro>) sqlMapClient.queryForList("selectAllProgram",map);
total = (String)map.get("totalCount");
System.out.println("**=====**"+total);
} catch (SQLException e) {
e.printStackTrace();
}
我的Java代码这样写了,但是运行时候报错
我的存储过程代码如下:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[sp_GetPageRecord]
-- Add the parameters for the stored procedure here
@SelectList varchar(2000),--查询的字段列表
@TableName varchar(100),--查询的表名或者视图名
@SearchCondition varchar(2000), --查询条件
@OrderCondition varchar(1000), --排序条件
@PageIndex int=1, --页号从0开始
@PageSize int=50, --每页显示数量
@RecordCount int output --表的记录总数
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList))=''
BEGIN
SET @SelectList = '*'
END
PRINT @SelectList
SET @SearchCondition = ISNULL(@SearchCondition,'')
SET @SearchCondition = LTRIM(RTRIM(@SearchCondition))
IF @SearchCondition <> ''
BEGIN
IF UPPER(SUBSTRING(@SearchCondition,1,5)) <> 'WHERE'
BEGIN
SET @SearchCondition = 'WHERE ' + @SearchCondition
END
END
PRINT @SearchCondition
SET @OrderCondition = ISNULL(@OrderCondition,'')
SET @OrderCondition = LTRIM(RTRIM(@OrderCondition))
IF @OrderCondition <> ''
BEGIN
IF UPPER(SUBSTRING(@OrderCondition,1,5)) <> 'WHERE'
BEGIN
SET @OrderCondition = 'ORDER BY ' + @OrderCondition
END
END
PRINT @OrderCondition
IF @PageIndex IS NULL OR @PageIndex < 1
BEGIN
SET @PageIndex = 0
END
PRINT @PageIndex
IF @PageSize IS NULL OR @PageSize < 1
BEGIN
SET @PageSize = 50
END
PRINT @PageSize
DECLARE @SqlQuery varchar(4000)
-- Insert statements for procedure here
SET @SqlQuery='SELECT '+@SelectList+'
FROM
(SELECT ' + @SelectList + ',ROW_NUMBER() OVER( '+ @OrderCondition +') AS RowNumber
FROM '+@TableName+' '+ @SearchCondition +') AS RowNumberTableName
WHERE RowNumber BETWEEN ' + CAST((@PageIndex+1) AS VARCHAR)
+ ' AND ' + CAST ((@PageIndex + @PageSize) AS VARCHAR)
PRINT @SqlQuery
SET NOCOUNT ON
EXECUTE(@SqlQuery)
SET @RecordCount=@@ROWCOUNT
select @RecordCount as TotalCount
SET NOCOUNT OFF
END
7 个解决方案
#1
用ibatis的人很少啊,没人帮我解决嘛!!!
#2
<parameter property="totalCount" javaType="java.lang.Integer" jdbcType="INT" mode="OUT"/>
String total = null;
total = (String)map.get("totalCount");
@RecordCount int output --表的记录总数
没有看到错误信息。。。猜猜。。。你传入的是String,返回的是int...
String total = null;
total = (String)map.get("totalCount");
@RecordCount int output --表的记录总数
没有看到错误信息。。。猜猜。。。你传入的是String,返回的是int...
#3
String total = null;
map.put("totalCount", total);
@RecordCount int output --表的记录总数
就是这里的问题,castexception
你把map.get("totalCount")拿出对象看看,应该不是string对象。
map.put("totalCount", total);
@RecordCount int output --表的记录总数
就是这里的问题,castexception
你把map.get("totalCount")拿出对象看看,应该不是string对象。
#4
proList = (ArrayList<MarketPro>) sqlMapClient.
queryForList("selectAllProgram",map);
这里好像有问题,把标红的改成insert或者update试试看。
这里好像有问题,把标红的改成insert或者update试试看。
#5
帮顶。
我也遇到同样的问题
我也遇到同样的问题
#6
终于搞定了,楼主试试以下的:
<procedure id="selectAllProgram" parameterMap="marketParameter" resultMap="xxxxx">
<![CDATA[{call dbo.sp_GetPageRecord(?,?,?,?,?,?,?)}]]>
</procedure>
#7
<procedure id="selectAllProgram" parameterMap="marketParameter" resultMap="xxxxx">
<![CDATA[{call dbo.sp_GetPageRecord(?,?,?,?,?,?,?)}]]>
</procedure>
#1
用ibatis的人很少啊,没人帮我解决嘛!!!
#2
<parameter property="totalCount" javaType="java.lang.Integer" jdbcType="INT" mode="OUT"/>
String total = null;
total = (String)map.get("totalCount");
@RecordCount int output --表的记录总数
没有看到错误信息。。。猜猜。。。你传入的是String,返回的是int...
String total = null;
total = (String)map.get("totalCount");
@RecordCount int output --表的记录总数
没有看到错误信息。。。猜猜。。。你传入的是String,返回的是int...
#3
String total = null;
map.put("totalCount", total);
@RecordCount int output --表的记录总数
就是这里的问题,castexception
你把map.get("totalCount")拿出对象看看,应该不是string对象。
map.put("totalCount", total);
@RecordCount int output --表的记录总数
就是这里的问题,castexception
你把map.get("totalCount")拿出对象看看,应该不是string对象。
#4
proList = (ArrayList<MarketPro>) sqlMapClient.
queryForList("selectAllProgram",map);
这里好像有问题,把标红的改成insert或者update试试看。
这里好像有问题,把标红的改成insert或者update试试看。
#5
帮顶。
我也遇到同样的问题
我也遇到同样的问题
#6
终于搞定了,楼主试试以下的:
<procedure id="selectAllProgram" parameterMap="marketParameter" resultMap="xxxxx">
<![CDATA[{call dbo.sp_GetPageRecord(?,?,?,?,?,?,?)}]]>
</procedure>
#7
<procedure id="selectAllProgram" parameterMap="marketParameter" resultMap="xxxxx">
<![CDATA[{call dbo.sp_GetPageRecord(?,?,?,?,?,?,?)}]]>
</procedure>