加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Connection.prepareCall()方法:调用数据库存储过程

发布时间:2020-12-15 02:44:32 所属栏目:Java 来源:网络整理
导读:Java Connection.prepareCall 方法通过创建一个 CallableStatement 对象来调用数据库存储过程。CallableStatement 对象提供了设置其 IN 和 OUT 参数的方法,以及用来执行调用存储过程的方法。 语法1 prepareCall(String sql) 参数说明: sql:可以包含一个或
Java Connection.prepareCall 方法通过创建一个 CallableStatement 对象来调用数据库存储过程。CallableStatement 对象提供了设置其 IN 和 OUT 参数的方法,以及用来执行调用存储过程的方法。

语法1

prepareCall(String sql)

参数说明:
  • sql:可以包含一个或多个“?”参数占位符的 SQL 语句。

示例

本示例调用 Connection 的 prepareCall 方法执行一个存储过程 saveuser。
Connection conn = ……  //省略部分代码
String sql = "{call saveuser(?,?)}";  //调用存储过程
conn.prepareCall(sql);

语法2

创建一个 CallableStatement 对象,该对象将生成具有给定类型和并发性的 ResultSet 对象。此方法与上述 prepareCall 方法相同,但它允许重写默认结果集类型和并发性。已创建结果集的可保存性可调用 getHoldability() 函数来确定。
CallableStatement prepareCall(String sql,int resultSetType,int resultSetConcurrency)  throws SQLException
参数说明:
  • sql:可以包含一个或多个“?”参数占位符的SQL语句。
  • resultSetType:结果集类型,分别是 ResultSet.TYPE_FORWARD_ONLY 或 ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE。
  • resultSetConcurrency:并发类型,分别是 ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE。

示例

本示例调用 Connection 的 prepareCall 方法创建一个 CallableStatement 对象重写默认结果集的并发类型为只读,结果集类型光标只能向前移动。
Connection conn = ……  //省略部分代码
String sql = "{call saveuser(?,?)}";
CallableStatement cs = conn.prepareCall(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);

语法3

创建一个 CallableStatement 对象,该对象将生成具有给定类型和并发性的 ResultSet对象。

CallableStatement prepareCall(String sql,int resultSetConcurrency,int resultSetHoldability))throws SQLException

参数说明:? ? ? ? ? ? ? ? ? ? ? ? ?
  • sql:可以包含一个或多个“?”参数占位符的SQL语句。
  • resultSetType 结果集类型,分别是 ResultSet.TYPE_FORWARD_ONLY 或 ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE。
  • resultSetConcurrency 并发类型,分别是 ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE。
  • resultSetHoldability 为以下ResultSet 常量:ResultSet.HOLD_CURSORS_OVER_COMMIT 或 ResultSet.CLOSE_CURSORS_AT_COMMIT。

示例

本示例调用 Connection 的 prepareCall 方法创建一个 CallableStatement 对象重写默认结果集的并发类型为只读,结果集类型光标只能向前移动,可保存性为开。
Connection conn = ……  //省略部分代码
String sql = "{call saveuser(?,ResultSet.CONCUR_READ_ONLY,ResultSet.HOLD_CURSORS_OVER_COMMIT);

典型应用

数据库存储过程是应用得很广泛的数据库对象,在 Java 程序中调用存储过程需要使用 Connection 接口的 prepareCall 方法。本示例通过调用存储过程来判断用户是否合法。
public String executeQuery(String userName,String passWord){
    String message = "验证失败";  //定义保存返回值的字符串对象
    con = getCon();  //获取数据库连接
    CallableStatement cs = null;  //定义CallableStatement对象
    String sql = "{call validateSelect('"+userName+"','"+passWord+"')}";  //定义调用存储过程语句
    try{
      cs = con.prepareCall(sql);  //调用存储过程
      ResultSet rest = cs.executeQuery();  //获取结果集
    while(rest.next()){  //循环遍历结果集对象
      message = "通过存储过程验证成功";  //设置对象信息
    }
     System.out.println(message);
  }catch(SQLException e){
     e.printStackTrace();
  }
    return message;  //返回String对象
}
说明:本示例调用的名称为 validateSelect,因此在实现本示例之前,数据库中要创建名称为 validateSelect 的存储过程,存储过程还要包含两个 String 类型的字符串参数。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读