Java代码/SQL语句调用存储过程并接收存储过程返回值

创建存储过程

CREATE PROCEDURE add_pro (IN a1 varchar(100), IN a2 varchar(100), OUT sum varchar(10))
BEGIN
set sum = a + b;
END;

SQL运行存储过程

CALL add_pro(1,2,@sum);
SELECT @sum;

Java代码调用存储过程,接收返回值

数据连接

package net.e_lian.bpm.damage.serviceImpl.customprocedure;

import java.io.File;
import java.io.FileInputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;


public class JDBCUtil {
	private static String driverClass = null;
	private static String url = null;
	private static String user = null;
	private static String password = null;
	
	static {
		
		try {
			//读取文件中的数据库连接信息
			Properties props = new Properties();
			String path = JDBCUtil.class.getClassLoader().getResource("***.properties").toURI().getPath();
			// 把文件读入文件输入流,存入内存中    
			FileInputStream fis = new FileInputStream(new File(path));
			props.load(fis);
			driverClass = props.getProperty("******").trim();
			url = props.getProperty("******").trim();
			user = props.getProperty("******").trim();
			password = props.getProperty("******").trim();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	/*
	 * 开启连接
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName(driverClass);
			conn = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * 关闭连接
	 * @param conn
	 * @param cstmt
	 * @throws SQLException
	 */
	public static void storageDataClose(Connection conn, CallableStatement cstmt) throws SQLException {
		if (conn != null) {
			conn.close();
		}
		if (cstmt != null) {
			cstmt.close();
		}
	}

}

JAVA调用数据存储过程

	/**
	 * 调用存调过程,并接收返回值
	 * @param dataSql 调用语句
	 * @param a1 传入的参数1
	 * @param a2 传入的参数2
	 * @return 存储过程的返回值
	 */
	public static String procedureReturn(String dataSql,int a1,int a2) {
		String message = null;
		Connection con = null;
		CallableStatement cstmt = null;
		try {
			con = JDBCUtil.getConnection();
			cstmt = con.prepareCall(dataSql);
			cstmt.setInt(1,a1);
			cstmt.setInt(2,a2);
            cstmt.registerOutParameter(3,Types.VARCHAR);
            cstmt.execute();
            //接收存储过程返回的值
            message = cstmt.getString(3);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				JDBCUtil.storageDataClose(con, cstmt);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return message;
	}

测试

	public static void main(String[] args) {
		String sql = "{call add_pro(?,?,?)}";
		String s = procedureReturn(sql,1,2);		
		System.out.println("最终的结果:"+s);
	}

结果

在这里插入图片描述

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

乔所以

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值