MySQL新建存储过程、Java调用存储过程

新建存过:
由于考虑到想要在Java调用时返回结果,CallableStatement.excute方法返回的布尔数据是这样的:
如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false(这个是别处看来的。)
所以在存过内进行判断是否执行成功,并返回一个标志:1 成功  0 失败;
CREATE PROCEDURE test2 (
 IN sid BIGINT,
 IN sname VARCHAR (100),
 OUT result INT
)
BEGIN
 INSERT INTO student (
  ID,
  NAME,
  PASSWORD,
  CLASS_ID,
  MAJOR_ID,
  SEX
 )
VALUES
 (
  sid + 1,
  sname,
  '22222',
  '321',
  '123',
  '女'
 );

IF row_count() < 1 THEN
 SET result = 0;
ROLLBACK;

ELSE
 SET result = 1;
COMMIT;

END IF;

END;



Java中调用该存过:
Connection conn = null;
		CallableStatement cs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager
					.getConnection("jdbc:mysql://localhost:3306/test?user=testdb1&password=123123&noAccessToProcedureBodies=true");
			cs = conn.prepareCall("call test2(?,?,?)");
			cs.setLong(1, 20131844303L);
			cs.setString(2, "啊哈");
			cs.registerOutParameter(3, Types.INTEGER);
			//如果第一个结果是 ResultSet 对象,则返回 true;
			//如果第一个结果是更新计数或者没有结果,则返回 false 
			//由于这里无法直接返回执行是否成功,存过里面给返回一个结果,1:成功;0:失败
			System.out.println(cs.execute());//这里就算执行成功了,返回的也是false
			System.out.println(cs.getInt(3));

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值