CallableStatement执行存储过程(也是预编译语言)
首先在sql中执行以下带有输入参数的代码:
1 DELIMITER $ 2 CREATE PROCEDURE pro_findById(IN sid INT) 3 BEGIN 4 SELECT * FROM person WHERE id = sid; 5 END $
那么,这条语句的存储过程代码就是
CALL pro_findById (?);
使用CallableStatement来执行:
1 /** 2 带有输入参数的存储语言 3 sql中先运行 4 DELIMITER $ 5 CREATE PROCEDURE pro_findById(IN sid INT) 6 BEGIN 7 SELECT * FROM person WHERE id = sid; 8 END $ 9 */ 10 private static void testIn() { 11 12 Connection conn = null; 13 CallableStatement stsm = null; 14 ResultSet rs = null; 15 try{ 16 //1:创建连接 17 conn = Jdbcutil.getConnection(); 18 19 //2:准备sql语言(带有存储过程的预编译语言) 20 String sql = "CALL pro_findById(?);"; 21 22 //3:执行预编译语言 23 stsm = conn.prepareCall(sql); 24 25 //4:设置参数 26 stsm.setInt(1, 4); 27 28 //5:发送参数,执行sql(注意:CallableStatement执行sql只有executeQuery()方法) 29 //返回ResultSet对象 30 rs = stsm.executeQuery(); 31 32 //6:遍历,打印出结果 33 while(rs.next()){ 34 int id = rs.getInt("id"); 35 String name = rs.getString("name"); 36 String sex = rs.getString("sex"); 37 System.out.println(id+","+name+","+sex); 38 } 39 } 40 catch(Exception e){ 41 e.printStackTrace(); 42 throw new RuntimeException(e); 43 } 44 //7:关闭连接 45 finally{ 46 Jdbcutil.close(conn, stsm, rs); 47 } 48 49 }
在sql中执行带有输入参数和输出参数的代码:
DELIMITER $ CREATE PROCEDURE pro_findout(IN sid INT ,OUT sname VARCHAR(20)) BEGIN SELECT NAME INTO sname FROM person WHERE id = sid; END $
这段代码的存储过程代码是:
1 CALL pro_findout(4,@NAME); 2 //预编译语言就是 3 //CALL pro_findout(?,?);
使用CallableStatement来执行:
1 /** 2 带有输入,输出参数的存储语言 3 DELIMITER $ 4 CREATE PROCEDURE pro_findout(IN sid INT ,OUT sname VARCHAR(20)) 5 BEGIN 6 SELECT NAME INTO sname FROM person WHERE id = sid; 7 END $ 8 */ 9 private static void InAndOut() { 10 11 Connection conn = null; 12 CallableStatement stsm = null; 13 14 try{ 15 16 //1:创建连接 17 conn = Jdbcutil.getConnection(); 18 19 //2:创建sql存储语言(预编译) 20 String sql = "CALL pro_findout(?,?)"; 21 22 //3:执行sql预编译语言 23 stsm = conn.prepareCall(sql); 24 25 //4:设置参数 26 /** 27 * 第一个参数是输入参数 28 * 第二个参数是存储过程中的输出参数的jdbc类型(这里是varchar()) 29 * 在sql.Types中寻找对应的类型 30 */ 31 //4.1:第一个参数的设置 32 stsm.setInt(1, 4); 33 //4.2:第二个参数的设置 34 stsm.registerOutParameter(2,java.sql.Types.VARCHAR); 35 36 //5:发送参数,执行sql:这个返回的不是ResultSet对象 37 stsm.executeQuery(); 38 39 /** 40 * 6:得到输出参数的值 41 * 根据索引值,也就是预编译sql语言中输出参数的位置 42 */ 43 String result = stsm.getString(2); 44 System.out.println(result); 45 } 46 catch(Exception e){ 47 e.printStackTrace(); 48 throw new RuntimeException(e); 49 } 50 //7:关闭连接 51 finally{ 52 Jdbcutil.close(conn, stsm); 53 } 54 55 56 }
时间: 2024-10-18 21:58:38