Java 调用 MySQL的存储过程

第一步:建立数据表:(前面已经写了基础的数据库与数据表操作,这里不再给出如何创建student和teacher数据表)

Java 调用 MySQL的存储过程_第1张图片

第二步、在该数据表中创建存储过程如下:

delimiter  //   ---定义结束符

create procedure stu_pro(in id int, out name varchar) ----存储过程名字和参数

begin  ----存储过程开始

select  student_name into name from student where student_id>id;  ---可以写很多句SQL语句

end  //  ----存储过程结束

解释:

1、delimiter 是定义结束符,mysql 默认的结束符是;号,这里重新定义了结束符为//,否则中间的语句中遇到 ;号,会认为语句已经结束了。所以需要重新定义结束符,否则会报错。END 后面加//,就是代表已经结束。这里的结束符可以是// 或者其他字符都可以

2、对于stu_pro中的输出参数,需要用into表示输出

Java 调用 MySQL的存储过程_第2张图片

使用存储过程输出结果:

delimiter ;  --定义结束符

call stu_pro(1,@name);  ----调用存储过程

select @name;  ---输出过程中的输出参数

解释:调用存储过程事,对于输入参数一定要输入值,并且要与其类型符合,这个输入的id是int 类型的,输出参数用@+参数名表示

调用后的输出参数需要用select查询语句输出

Java 调用 MySQL的存储过程_第3张图片

注意:可以看到存储过程的结果只能返回一条数据,那么可以改为:student_id=id

当然也可以将结果保存在另外一个表中,通过访问表的形式访问过程的输出结果。

第三步:使用java的CallableStatement接口来调用存储过程:


import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.Types;
import java.util.Properties;
import java.sql.CallableStatement;

public class CallableStatementTest {
	
	private String driver;
	private String url;
	private String user;
	private String pass;
	
	public void initParam(String paramFile) throws Exception{
		Properties props=new Properties();
		props.load(new FileInputStream(paramFile));
		driver=props.getProperty("driver");
		url=props.getProperty("url");
		user=props.getProperty("user");
		pass=props.getProperty("pass");
		//加载驱动
		Class.forName(driver);
	}
	public void callProcedure() throws Exception{
				//获取数据库连接
				Connection conn=DriverManager.getConnection(url,user,pass); 
				//调用过程stu_pro
				CallableStatement cstmt=(CallableStatement)conn.prepareCall("call stu_pro(?,?)");
		{
			//设置第一个?处的值为2
			cstmt.setInt(1,2);
			/*
			 * 第二个?号处是输出值,必须要注册该参数
			 * TYPE后跟输出参数的封装类型,因为输出参数是student_name(varchar),故要大写VARCHAR
			 */
			cstmt.registerOutParameter(2,Types.VARCHAR);
			//执行存储过程
			cstmt.execute();
			//输出存储过程传出的参数值
			System.out.println("执行存储过程后,输出参数结果为:"+cstmt.getString(2));
		}
	}
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		CallableStatementTest ct=new CallableStatementTest();
		ct.initParam("mysql.ini");
		ct.callProcedure();
	}
}

这里的stu_pro是将student_id>id改成了student_id=id

运行后得到的结果为:

Java 调用 MySQL的存储过程_第4张图片

你可能感兴趣的:(MySQL,Java基础)