2020-12-23

1.什么是存储过程:

在数据库中,可以通过创建一个存储过程来达到一次性执行多条SQL语句的目的

在 mysql命令行中:

创建不带参数的存储过程,如:

create procedure sp_name () select * from usertable; 表示创建一个名为sp_name的存储过程,执行的语句为 select * from usertable;

执行存储过程:

call sp_name();

2.通过CallableStatement接口在JAVA程序中执行存储过程:

1.Connection conn = 连接数据库 ;(conn 为连接数据库后返回的引用)

2.[例子] CallableStatement cstmt = conn.prepareCall("{call show_usertbl()}"); //创建CallableStatement对象.调用prepareCall方法调用存储过程

//例子中,存储过程的名字为 show_usertbl(),call表示调用.注意,旁边要有中括号{}引起来

(一)调用没有参数的存储过程

public class Test3 {

public static void main(String[] args) {
	test();
}

static void test() {
	Connection conn = DBUtil.open(); // 连接数据库	(注:DBUtil是自定义的类,详细定义如何可翻看之前文章)
	try {
		CallableStatement cstmt = conn.prepareCall("{call show_usertbl()}");// 第一步
		ResultSet rs = cstmt.executeQuery(); // 第二步,执行存储过程调用,结果返回到 rs中。
		while (rs.next()) {
			int id = rs.getInt(1);
			String name = rs.getString(2);
			System.out.println("id:" + id + " name:" + name);
		}
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		DBUtil.close(conn); // 关闭数据库
	}
}

}

(二)带输入参数的存储过程:
参数类型: in 表示输入,out 表示输出

在mysql命令行下:

创建带输入参数的存储过程:

例子:create procedure insert_usertbl(in myid int, in myname varchar(20)) insert into usertbl(id,name) values(20,“xiaoming”);

说明:insert_usertbl 是存储过程的名字,myid是整型的输入参数,myname是字符型的输入参数, insert into usertbl(id,name) values(20,“xiaoming”) 是SQL语句

创建存储过程后,在JAVA程序中通过CallableStatement接口调用:
问号?表示要动态赋值的变量。

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;

public class Test4 {
public static void main(String[] args) {
Insert();
}

static void Insert()
{
	Connection conn = DBUtil.open();	//连接数据库
	try {
		CallableStatement cstmt = conn.prepareCall("{call insert_usertbl(?,?)}");
													//问号表示要动态赋值的参数
		cstmt.setInt(1, 8);				//给第一个问号赋值为8
		cstmt.setString(2, "xiaowang"); //给第二个问号赋值为“xiaowang”
		cstmt.executeUpdate();			//执行 call insert_usertbl(8,“xiaowang”)
	} catch (SQLException e) {
		e.printStackTrace();
	}finally
	{
		DBUtil.close(conn);				//关闭数据库
	}
}

}

(三)创建有输入输出参数的存储过程:
参数类型: in 表示输入,out 表示输出
在mysql命令行下:

例子:create procedure getNameById(in cid int,out return_name varchar(20)) select name from usertbl where id = cid;

说明:其中getNameById为存储过程名字,cid为要输入的参数,而return_name为系统要返回给我的数据。select name into return_name from usertbl where id = cid 是操作的SQL语句 (返回的name是从return_name中抽取的)

Java程序中用CallableStatement接口调用此存储过程:

注意:有输出变量的时候,要给输出变量进行注册

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;

public class Test5 {

public static void main(String[] args) {
	getName();
}

static void getName() {
	Connection conn = DBUtil.open();
	try {
		CallableStatement cstmt = conn.prepareCall("{call getNameById(?,?)}");// 输入输出变量都要以?表示
		cstmt.setInt(1, 20); // 给第一个问号赋值为20
		// 注册输出参数
		cstmt.registerOutParameter(2, Types.CHAR); // 给作为输出变量的第二个问号注册,并制定其为char型
		cstmt.execute(); // 执行 call getNameById()
		String name = cstmt.getString(2); // 取存储过程中的第二个变量的值

		System.out.println("name:" + name);
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		DBUtil.close(conn);
	}
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值