1、没有参数的存储过程
DELIMITER $$ --创建结束符 CREATE PROCEDURE proce1() BEGIN SELECT * FROM users; --SQL语句,一定要以;结束 END $$ DELIMITER ; --还原结束符 CALL proce1 --调用存储过程
2、只有输入参数的存储过程
1 DELIMITER $$ 2 3 CREATE PROCEDURE proce2(IN _id VARCHAR(32),IN _name VARCHAR(50) ) --输入参数要用IN开头 名称 类型 4 BEGIN 5 INSERT INTO users(id,username) VALUES (_id,_name); 6 END $$ 7 8 DELIMITER ; 9 10 CALL proce2('U002','Tom') --调用存储过程11 12 13 CALL proce1
3、只有输出参数的
DELIMITER // CREATE PROCEDURE proce3(OUT _size INT) --输出参数,以out开头 BEGIN SELECT COUNT(1) INTO _size FROM users; --设置到_size中 也可以 SET _size=(SELECT COUNT(1) FROM users;); END // DELIMITER ; CALL proce3(@count); SELECT @count
在Java程序中调用存储过程
1、调用没有的存储过程
1 public void test() throws Exception 2 { 3 Connection conn=DbUtils.getcConnection();//获取conn 4 CallableStatement cs= conn.prepareCall("{call proce1()}");//调用存储过程 5 //如果最后一个sql语句为select语句,为true 否则为false 6 //【如果语句为设置值,还是false】SELECT COUNT(1) INTO _size FROM users; --设置到_size中 也可以 SET _size=(SELECT COUNT(1) FROM users;); 7 boolean b=cs.execute(); 8 if(b) 9 {10 ResultSet rs= cs.getResultSet();11 while(rs.next())12 {13 System.out.println("name:"+rs.getString(1));14 }15 }16 conn.close();17 }
2、调用有输入参数的存储过程
1 public void Test2() throws Exception 2 { 3 Connection conn=DbUtils.getcConnection(); 4 CallableStatement cs= conn.prepareCall("{call proce2(?,?) }"); 5 cs.setString(1, "U003");//设置 IN 值 6 cs.setString(2, "Lucy"); 7 boolean b=cs.execute(); 8 System.out.println("boolean:"+b); 9 conn.close();10 }
3、调用有输出参数的存储过程
1 public void Test3() throws Exception 2 { 3 Connection conn=DbUtils.getcConnection(); 4 CallableStatement cs= conn.prepareCall("{call proce3(?) }"); 5 cs.registerOutParameter(1, Types.INTEGER);//设置out类型值;Types转换为数据库类型 6 boolean b= cs.execute(); 7 int size=cs.getInt(1);//获取值 8 System.err.println("size:"+size); 9 conn.close();10 }