33、Connection.prepareCall方法——调用数据库存储过程

来源:互联网 发布:安畅网络 程小中 编辑:程序博客网 时间:2024/04/27 21:33

该方法通过创建一个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 resultSetType,
   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(?,?)}";
CallableStatement cs = conn.prepareCall(sql,
       ResultSet.TYPE_FORWARD_ONLY,
       ResultSet.CONCUR_READ_ONLY,
       ResultSet.HOLD_CURSORS_OVER_COMMIT);

典型应用  数据库存储过程是应用得很广泛的数据库对象,在Java程序中调用存储过程需要使用Connection接口的prepareCall方法。本示例通过调用存储过程来判断用户是否合法。判断成功的运行结果如图1.34所示。

 

本示例的关键代码如下:
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类型的字符串参数。

0 0
原创粉丝点击