xml文件: <typeAlias alias="vpmnBeanModel" type="com.znwbb.vpmn.bean.Vpmn"/> <resultMap id="vpmnInfo" class="vpmnBeanModel">
<result property = "callbegintime" column = "callbegintime"/>
<result property = "calltype" column = "calltype"/>
<result property = "callduration" column = "callduration"/>
<result property = "callingpartynumber" column = "callingpartynumber"/>
<result property = "calledpartynumber" column = "calledpartynumber"/>
</resultMap> <parameterMap id="vpmnSelect" class="java.util.HashMap">
<parameter property="cur_sql" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" resultMap="vpmnInfo" mode="OUT"/>
<parameter property="v_rowcount" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
<parameter property="in_str_begintime" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_str_endtime" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_call" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_called" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_currentpage" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="in_pagesize" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="in_qrytype" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="vpmnprom" parameterMap="vpmnSelect">
<![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>
</procedure>
Java: public List<Vpmn> vpmnBySelect(Vpmn vpmn, int currentPage, int pageSize, int querytype)
{
Map map = new HashMap();
map.put("cur_sql", OracleTypes.CURSOR);
map.put("v_rowcount", java.sql.Types.INTEGER);
map.put("in_str_begintime", vpmn.getStarttime() );
map.put("in_str_endtime", vpmn.getEndtime());
map.put("in_call", vpmn.getCallingpartynumber() ); map.put("in_called", vpmn.getCalledpartynumber());
map.put("in_currentpage", currentPage );
map.put("in_pagesize", pageSize);
map.put("in_qrytype", querytype);
getSqlMapClientTemplate().queryForList("vpmnprom", map);
@SuppressWarnings("unused")
List list = (List) map.get("cur_sql");
int result = (Integer) map.get("v_rowcount");
if (list == null || list.size() == 0 || result == 0)
{
list = new ArrayList();
}
return list;
}
以上是代码,存储过程应该没什么问题,因为我在sql plus中执行是没问题,但是在调用的时候,他总是说我的输出参数有问题,执行到红色部分时就出错,报错信息如下:
org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [17004]; --- The error occurred in com/znwbb/vpmn/dao/xml/vpmn.xml. --- The error occurred while executing query procedure. --- Check the {call ireport_vpmn(?,?,?,?,?,?,?,?,?)}. --- Check the output parameters (register output parameters failed).请问各位有什么办法解决????
<result property = "callbegintime" column = "callbegintime"/>
<result property = "calltype" column = "calltype"/>
<result property = "callduration" column = "callduration"/>
<result property = "callingpartynumber" column = "callingpartynumber"/>
<result property = "calledpartynumber" column = "calledpartynumber"/>
</resultMap> <parameterMap id="vpmnSelect" class="java.util.HashMap">
<parameter property="cur_sql" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" resultMap="vpmnInfo" mode="OUT"/>
<parameter property="v_rowcount" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
<parameter property="in_str_begintime" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_str_endtime" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_call" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_called" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_currentpage" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="in_pagesize" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="in_qrytype" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="vpmnprom" parameterMap="vpmnSelect">
<![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>
</procedure>
Java: public List<Vpmn> vpmnBySelect(Vpmn vpmn, int currentPage, int pageSize, int querytype)
{
Map map = new HashMap();
map.put("cur_sql", OracleTypes.CURSOR);
map.put("v_rowcount", java.sql.Types.INTEGER);
map.put("in_str_begintime", vpmn.getStarttime() );
map.put("in_str_endtime", vpmn.getEndtime());
map.put("in_call", vpmn.getCallingpartynumber() ); map.put("in_called", vpmn.getCalledpartynumber());
map.put("in_currentpage", currentPage );
map.put("in_pagesize", pageSize);
map.put("in_qrytype", querytype);
getSqlMapClientTemplate().queryForList("vpmnprom", map);
@SuppressWarnings("unused")
List list = (List) map.get("cur_sql");
int result = (Integer) map.get("v_rowcount");
if (list == null || list.size() == 0 || result == 0)
{
list = new ArrayList();
}
return list;
}
以上是代码,存储过程应该没什么问题,因为我在sql plus中执行是没问题,但是在调用的时候,他总是说我的输出参数有问题,执行到红色部分时就出错,报错信息如下:
org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [17004]; --- The error occurred in com/znwbb/vpmn/dao/xml/vpmn.xml. --- The error occurred while executing query procedure. --- Check the {call ireport_vpmn(?,?,?,?,?,?,?,?,?)}. --- Check the output parameters (register output parameters failed).请问各位有什么办法解决????
调用 map.put("cur_sql", "参数");
cur_sql是一个游标,那样写可以的,是能得到游标返回的结果集,
v_rowcount是表示总记录数的,是int型的(我不加这个就不会报错,就可以有正确数据)
你是什么数据库
<procedure id="vpmnprom" parameterMap="Integer">
<![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>
</procedure>
select count(1) from elca_dubious_attach_info_tb where
#logtime2#>logtime and logtime> #logtime#
</select>
这是我写的返回的也是int
数据库是Oracle,parameterMap="Integer"??返回的结果集是不是对应bean的么,对于这个v_rowcount我只要它的记录数就可以了吧,这样我就可以进行其他的运算,这边直接返回一个Integer不可能吧,难道要专门写一个<parameterMap>,就只为返回它?????我还是没太明白,麻烦你能否在将明白点
这种直接用sql获取条数的有用过,但是这个问题是在存储过程中,过程中是可以获取到得,我现在是要调用这个过程,就需要输出它吧,但是没成功,出了这样的错
<procedure id="vpmnprom" parameterMap="Integer">
<![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>
</procedure>开始没认真看Oracle的是把,那就明白了他的错误是无效的列类型。你检查为什么把。
返回一个Map对吧这个应该是可以的
<parameter property="cur_sql" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" resultMap="vpmnInfo" mode="OUT"/>
<parameter property="v_rowcount" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
这两句不是设置吗???要么还是还需要在其他地方设置下????