JDBC回顾四CallableStatement进行存储过程的调用
2017-02-28 11:25
453 查看
存储过程在我们的数据库中使用是比较频繁的一种结构,他可以大大简化sql语句的书写。在java中,我们利用CallableStatement接口,进行存储过程的调用。
CallableStatement 接口:超级接口有PreparedStatement, Statement, Wrapper。
用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。
IN 参数值是使用继承自 PreparedStatement 的 set 方法设置的。在执行存储过程之前,必须注册所有 OUT 参数的类型;它们的值是在执行后通过此类提供的 get 方法获取的。
CallableStatement 可以返回一个 ResultSet 对象或多个 ResultSet 对象。多个 ResultSet 对象是使用继承自 Statement 的操作处理的。
Types 类:定义用于标识一般 SQL 类型(称为 JDBC 类型)的常量的类。在其中有许多静态的变量标示。
此类永远是不可序列化的。
CallableStatement 接口:超级接口有PreparedStatement, Statement, Wrapper。
用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。
IN 参数值是使用继承自 PreparedStatement 的 set 方法设置的。在执行存储过程之前,必须注册所有 OUT 参数的类型;它们的值是在执行后通过此类提供的 get 方法获取的。
CallableStatement 可以返回一个 ResultSet 对象或多个 ResultSet 对象。多个 ResultSet 对象是使用继承自 Statement 的操作处理的。
Types 类:定义用于标识一般 SQL 类型(称为 JDBC 类型)的常量的类。在其中有许多静态的变量标示。
此类永远是不可序列化的。
设定的存储过程代码:在dos模式下记得转换结束标志 mysql> create procedure p( -> in v_a int,in v_b int,out v_c int,inout v_d int) -> begin -> if(v_a > v_b) then -> select v_a into v_c; -> else -> select v_b into v_c; -> end if; -> select (v_d+1) into v_d; -> end; // Query OK, 0 rows affected (0.08 sec) // 求输入参数的最大值,在v_d上加1再赋值给v_d ----------------------------------------------------------------------- public class JdbcCall { public static void main(String[] args){ Connection conn =null; CallableStatement ctmt = null; //注意此时为CallableStatement ResultSet rs = null; try{ Class.forName("com.mysql.jdbc.Driver"); //建立驱动 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/studemo","root","root");//建立连接 ctmt = conn.prepareCall("Call p(?,?,?,?)"); //创建语句 ctmt.setInt(1, 2); //参数值的设置参数一表示占位符位置,参数二表示传递的值 ctmt.setInt(2, 4); //ctmt.setInt(3, x); 3为输出不需要进行设置值 ctmt.setInt(4, 6); // 4 既为输入,又为输出 ctmt.registerOutParameter(3, Types.INTEGER); ctmt.registerOutParameter(4, Types.INTEGER); // 每一个输出参数都要进行注册设置输出类型 参数一 占位符位置,参数二表示类型。Types也是java.sql下的一个类 ctmt.execute();//执行语句 System.out.println(ctmt.getInt(3)); // 通过get方法进行获取 System.out.println(ctmt.getInt(4)); }catch(ClassNotFoundException e){ e.printStackTrace(); }catch(SQLException e){ e.printStackTrace(); }finally{ try{ if(rs!=null){rs.close();rs=null;} if(ctmt!=null){ctmt.close();ctmt=null;} if(conn!=null){conn.close();conn=null;} }catch(SQLException e){ e.printStackTrace(); } } } }
相关文章推荐
- 关于JDBC使用命名参数(named parameters)进行存储过程调用的问题
- 调用存储过程进行图片的插入或修改
- Oracle复合类型参数的存储过程以及JDBC调用
- JDBC调用存储过程语法
- JDBC调用存储过程实例
- java调用存储过程进行增、删、查、改操作(源代码)
- jdbc调用通用存储过程完成分页
- jdbc中调用存储过程
- jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法
- 在存储过程中调用外部对象进行简繁互换
- Jdbc调用存储过程
- 通过jdbc调用存储过程
- Jdbc调用存储过程
- JDBC调用存储过程--有需要的看看
- MySQL存储过程与JDBC调用
- JDBC调用返回结果集的存储过程
- JDBC调用存储过程和函数
- JDBC调用带输出参数的存储过程
- jdbc中调用oracle 返回游标类型的存储过程
- 创建oracle的存储过程,以及通过JDBC调用该存储过程