关于sql存储过程在IDE或数据库中执行报错的解决办法
来源:互联网 发布:2017最新网络词汇 编辑:程序博客网 时间:2024/04/30 14:36
最近由于项目中有些业务要用到存储过程来写,所以在数据库中添加了一个简单的存储过程,如下:
ALTER PROCEDURE [dbo].[Test_addperson] @name AS varchar(20) , @password AS varchar(20) , @age AS int,@allCount int = 0 output--总数ASBEGIN insert into z_person_test (name,password,age) values (@name,@password,@age)SET @allCount = @@rowcountEND这是一个向person表中插入数据的简单存储过程,语法我就不一一介绍了,相信大家肯定都比我牛b!
但是当这段语句在Navicat中运行时,报出下面的错误
必须声明标量“xxxx”,也就是你想输出的数据信息,调试了好久,也找不到错误处在哪里。
最后不得已在项目中添加了Person的实体类和Service和Dao,然后用Junit测试!
下面只写了iml的代码,接口的代码此处就省略了!
PersonServiceImpl.java
@Transactional@Service(value="personService")public class PersonServiceImpl implements PersonService{@Autowiredprivate PersonDao personDao;public void add(Person p) throws Exception {personDao.add(p);}}PersonServiceDaoImpl.java
@Repository(value="personDao")public class PersonDaoImpl extends SqlSessionDaoSupport implements PersonDao{public void add(Person p) throws Exception {getSqlSession().selectOne("person.add", p);System.out.println("------------"+p.getAllCount()); //此处的allCount变量要在Person实体类中定义,不然取不到存储过程反回的输出数据。}catch(Exception e){e.printStackTrace();throw new Exception(e.getMessage());}}}Person-mapper.xml
<select id="add" statementType="CALLABLE" parameterType="java.util.HashMap" resultType="person"> <--此处的标签,如果使用存储过程一定要使用select标签 --><![CDATA[{#{allCount,mode=OUT,jdbcType=INTEGER}=call Test_addperson(#{name,mode=IN,jdbcType=VARCHAR},#{password,mode=IN,jdbcType=VARCHAR},#{age,mode=IN,jdbcType=INTEGER},#{allCount,mode=OUT,jdbcType=INTEGER})}]]></select>然后运行代码,发现存储过程原来是没问题的,添加的反回数据也可以添加成功
@Testpublic void Test2(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("conf/spring-*.xml");PersonService personService = (PersonService) applicationContext.getBean("personService");Person person = new Person();person.setAge(19);person.setName("AAAA");person.setPassword("BBBB");try {personService.add(person);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
从上面可以看出,有些存储过程在某些IDE中提示的错误,并不能完全的代表是存储过程出错了,我们可能是被某些数据库的操作软件坑了!
0 0
- 关于sql存储过程在IDE或数据库中执行报错的解决办法
- Bash中执行存储过程或普通的SQL命令
- EJB 调用存储过程报错,在sql server中执行却正常
- 关于python IDE中中文报错的解决办法
- EJB 调用Sqlserver 存储过程报错,在sql server中执行却正常 top 2 解决方法
- 关于sql 的执行存储过程
- 关于“变量名在批查询或存储过程内部必须唯一”的解决办法
- oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题
- C#中连接SQL Server数据库、执行存储过程
- DB2数据库,执行存储过程报错 SQLSTATE=22003
- 关于将应用逻辑放在存储过程(PL/SQL)或应用层的选择
- 在存储过程中执行存储过程
- 在Shell脚本中调用sql语句或存储过程
- sql存储过程的 TOP 后跟变量报错的解决办法
- 如何在SQL Server存储过程中执行DTS包
- 如何在SQL Server存储过程中执行DTS包
- 在nhibernate中执行SQL语句和存储过程
- 如何在SQL Server存储过程中执行DTS包
- Android系列之广播
- android-----Fragment详解及其应用
- chrome浏览器自带的开发者工具查看http头
- NYOJ 110剑客决斗(动态规划)
- c++实验5—数组分离
- 关于sql存储过程在IDE或数据库中执行报错的解决办法
- 如何在一个已有的C++工程中加入cuda程序
- APK反编译
- app开发记录—校验手机号码和邮箱
- SQL Server查看所有表大小,所占空间
- PHP高效率写法(附原因)
- centos 安装 docker
- PAT乙级1004:成绩排名 (20)
- 《C++精英内参-程序员高效指南》-7硬盘的选择