ibatis 调用存储过程报java.lang.NullPointerException错,50分相谢!!

capricornwq 2007-06-25 11:06:48
(1)我的xml:
<parameterMap id="invoiceInsertMap" class="java.util.map" >
<parameter property="invoicestart" jdbcType="NUMBER" javaType="java.lang.Long" mode="IN"/>
<parameter property="totalnum" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN"/>
<parameter property="invoicebookid" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="invoiceInsert" parameterMap="invoiceInsertMap" >
{call invoiceInsert (?,?,?)}
</procedure>
(2)invoiceInsert 为数据库中存储过程,代码无误

(3)对外调用的接口:
public int invoiceInsert(InvoiceBook invoicebook) {
HashMap paramMap = new HashMap();
paramMap.put("invoicestart", invoicebook.getInvoicestart());
paramMap.put("totalnum", invoicebook.getInvoicedicid());
paramMap.put("invoicebookid", invoicebook.getInvoicebookid());
return invoiceDao.invoiceInsert(paramMap);

}
(4)invoiceDao 对xml配置中调用:
public int invoiceInsert(HashMap paramMap) {
int i=0;
try{
daoManager.startTransaction();
i=((Integer)queryForObject("invoiceInsert",paramMap)).intValue();
daoManager.commitTransaction();
}catch(Exception e ){
e.printStackTrace();
}
return i;
}

控制台打印的结果
{call invoiceInsert (?,?,?)}
[100000000, 20, 1]
Types: [java.lang.Long, java.lang.Integer, java.lang.Integer]
java.lang.NullPointerException
如果可以给个实例,也万分感谢!!!
...全文
786 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
superlanneret 2007-07-05
  • 打赏
  • 举报
回复
{call invoiceInsert (#invoicestart#,#totalnum#,#invoicebookid#)}
这样试一下看看可以吗?
capricornwq 2007-07-05
  • 打赏
  • 举报
回复
i=((Integer)queryForObject("invoiceInsert",paramMap)).intValue();
有(Integer) 和intValue(),已经进行类型转换了
存储过程中 我也修改成有返回值的,问题在,存储过程没有调用

superlanneret 2007-07-05
  • 打赏
  • 举报
回复
Product product = (Product)sqlMap.queryForObject
(“getProduct”, key);你看看这句话就会明白了。
superlanneret 2007-07-05
  • 打赏
  • 举报
回复
queryForObject 返回的是一个对象,你用的是一个整形变量。
suncheng_hong 2007-07-05
  • 打赏
  • 举报
回复
看日志
superlanneret 2007-07-04
  • 打赏
  • 举报
回复
建议你Debug一下看看里面参数的值有没有
capricornwq 2007-07-04
  • 打赏
  • 举报
回复
Debug paramMap 中有值,
的确是i=((Integer)queryForObject("invoiceInsert",paramMap)).intValue();出错
此句调用
<procedure id="invoiceInsert" parameterMap="invoiceInsertMap" >
{call invoiceInsert (10000000, 20, 1)} //此处已将参数赋值,与参数传递无关
</procedure>
然后报错为:
Failed to execute queryForObject - id [invoiceInsert], parameterObject [{invoicebookid=6, totalnum=20, invoicestart=12}]. Cause: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in dlk/invoice/invoice.xml.
--- The error occurred while applying a parameter map.
--- Check the Invoice.invoiceInsertMap.
--- Check the parameter mapping for the 'invoicestart' property.
--- Cause: java.sql.SQLException: Invalid parameter index 1.
冒似invoicestart传参出错,在存储过程中@invoicestart bigint,改成 int也一样的错
有人可以再指教一下么?
如何判断 此句{call invoiceInsert (10000000, 20, 1)}是否调用了 名字为invoiceInsert 的存储过程, 是不是存储过程名需要定义什么的?
再次请教各位高手。。。
cseu 2007-07-03
  • 打赏
  • 举报
回复
NullPointerException是最常见的一种错误了。
我对ibatis、存储过程都不是太了解,对你的程序也了解。
不过我推测是这一句报的nullpointer:i=((Integer)queryForObject("invoiceInsert",paramMap)).intValue();
queryForObject返回了null,你debug一下看看
iwillrockyou 2007-07-03
  • 打赏
  • 举报
回复
帮定~
capricornwq 2007-07-03
  • 打赏
  • 举报
回复
如果把 xml中的写成
<procedure id="invoiceInsert" parameterMap="invoiceInsertMap" >
{call invoiceInsert (10000000, 20, 1)}
</procedure>

报错为:
com.ibatis.dao.client.DaoException: Failed to execute queryForObject - id [invoiceInsert], parameterObject [{invoicebookid=1, totalnum=20, invoicestart=10000000}]. Cause: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in dlk/invoice/invoice.xml.
--- The error occurred while applying a parameter map.
--- Check the Invoice.invoiceInsertMap.
--- Check the parameter mapping for the 'invoicestart' property.
--- Cause: java.sql.SQLException: Invalid parameter index 1.
invoicestart 有什么问题么?
有人指教一二么?


capricornwq 2007-07-03
  • 打赏
  • 举报
回复
CREATE PROCEDURE dbo.invoiceInsert
@invoicestart bigint,
@totalnum int,
@invoicebookid int

AS
BEGIN TRAN


Declare @invoiceId as int
Declare @count as int

select @invoiceId= max(invoiceId) from invoice where tag=1
IF @invoiceId Is Not Null
set @invoiceId=@invoiceId+1
else
set @invoiceId=1

set @count=@totalnum
while @count>0
Begin
Insert Into invoice(invoiceId,tag,invoiceNumber,invoicebookid)
Values(@invoiceId,'1',@invoicestart,@invoicebookid)
set @invoiceId=@invoiceId+1
set @invoicestart=@invoicestart+1
set @count=@count-1
End


IF @@ERROR<>0 GOTO errhandle---->發生錯誤直接跳轉到後面,不發生錯誤提交
COMMIT TRAN
SELECT 1

errhandle:
IF @@ERROR<>0
BEGIN
ROLLBACK TRAN
SELECT 0
END
GO
存储过程如上
capricornwq 2007-07-03
  • 打赏
  • 举报
回复
{call invoiceInsert (?,?,?)}
[100000000, 20, 1] 不就是有传值么? debug了 也都有值,没有人知道么?
superlanneret 2007-06-25
  • 打赏
  • 举报
回复
paramMap.put("invoicestart", invoicebook.getInvoicestart());
paramMap.put("totalnum", invoicebook.getInvoicedicid());
paramMap.put("invoicebookid", invoicebook.getInvoicebookid());
你Debug一下看看这里面的参数是不是都有值啊?
标题人事档案管理系统设计与实现研究AI更换标题第1章引言介绍人事档案管理系统的研究背景、意义、国内外研究现状以及论文的方法和创新点。1.1研究背景与意义分析人事档案管理在企业中的重要性及系统开发的必要性。1.2国内外研究现状概述国内外人事档案管理系统的研究进展和现状。1.3研究方法及创新点阐述本文的研究方法和在系统设计上的创新点。第2章相关理论介绍人事档案管理系统设计的相关理论。2.1档案管理理论阐述档案分类、存储、检索等基本理论。2.2信息系统开发理论介绍信息系统开发的基本流程、方法和技术。2.3数据库管理理论讨论数据库设计、数据安全与备份等理论。第3章人事档案管理系统设计详细介绍人事档案管理系统的设计方案和实现过程。3.1系统需求分析分析系统的功能需求、性能需求和用户需求。3.2系统架构设计给出系统的整体架构、模块划分和交互流程。3.3数据库设计设计数据库结构,包括表结构、字段设置和关系模型。第4章系统实现与测试阐述人事档案管理系统的实现过程和测试方法。4.1系统开发环境与工具介绍系统开发所使用的环境和工具。4.2系统实现过程详细描述系统各个模块的实现过程和关键代码。4.3系统测试与优化对系统进行功能测试、性能测试和安全测试,并进行优化。第5章研究结果与分析呈现人事档案管理系统的实验分析结果。5.1系统功能实现情况介绍系统各项功能的实现情况和效果。5.2系统性能评估从响应时间、吞吐量等指标评估系统性能。5.3对比方法分析将本系统与其他类似系统进行对比分析,突出优势。第6章结论与展望总结本文的研究成果,并展望未来的研究方向。6.1研究结论概括本文的主要研究结论和系统实现效果。6.2展望指出系统存在的不足和未来改进的方向。
提供了关于时间序列分析与预测的宝贵资源,特别聚焦于**自回归积分滑动平均模型(ARIMA)**及其应用。对于那些希望深入理解并实践时间序列建模的学者、研究人员以及数据分析爱好者来说,这是一个不可或缺的学习材料。本资源不仅包括了详细的理论讲解,涵盖了时间序列分析的基础,如移动平均(MA)、自回归(AR)、指数平滑等关键概念,而且通过具体的ARIMA模型解析,搭配MATLAB编程实现实例,帮助用户从理论到实践全面掌握这一重要统计工具。 内容概览 理论讲解: 深入浅出地介绍了时间序列分析的基本原理,重点阐述ARIMA模型的构建步骤,包括如何识别模型的参数(p,d,q),以及其在处理非平稳数据中的作用。 MATLAB代码实现: 提供了多个ARIMA模型的MATLAB实现示例,这些代码覆盖了从数据准备、模型拟合、诊断检验到预测的全过程,是学习如何利用MATLAB进行时间序列分析的实用工具。 实例分析: 包括不同行业或领域的实际案例研究,展示如何应用ARIMA及其它时间序列方法解决真实世界的数据预测问题,增强理解和应用能力。 文件结构 时间序列模型ARIMA的讲解与matlab代码实现(含多个实例).rar: 主要资源压缩包,解压后包含文档和MATLAB代码文件夹。 文档: 提供了理论知识讲解。 MATLAB代码: 实现了文中讨论的各种模型,附带注释,便于理解与修改。 使用指南 下载资源: 点击下载“时间序列模型ARIMA的讲解与matlab代码实现(含多个实例).rar”文件。 解压文件: 解压缩至本地,确保你可以访问文档和代码。 环境准备: 确保你的电脑上已安装MATLAB,并熟悉基本操作。 学习流程: 首先阅读文档理解时间序列分析的理论基础,然后逐步跟随MATLAB代码示例进行实践。 实践应用: 尝试将所学应用到自己的数据集上,调整参数以优化模型性能。 注意事项 请根据M

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧