接口 | 作用 |
---|---|
Statement接口 | 用于执行静态的sql语句 |
PreparedStatement接口 | 用于执行预编译sql语句 |
CallableStatement接口 | 用于执行存储过程的sql语句(call xxx) |
package com.rk.db.d_callable; import java.sql.Connection; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.rk.db.utils.JDBCUtil; /** * 使用CablleStatement调用带有输入参数的存储过程 * @author RK * */ public class Demo01 { public static void main(String[] args) { Connection conn = null; CallableStatement cstmt = null; ResultSet rs = null; try { //获取连接 conn = JDBCUtil.getConnection(); //准备sql String sql = "CALL pro_findById(?)";//可以执行预编译的sql //预编译 cstmt = conn.prepareCall(sql); //设置输入参数 cstmt.setInt(1, 3); //发送参数 rs = cstmt.executeQuery();//注意: 所有调用存储过程的sql语句都是使用executeQuery方法执行!!! //遍历结果 while(rs.next()) { int id = rs.getInt("Id"); String userName = rs.getString("UserName"); String pwd = rs.getString("Pwd"); System.out.println(id + "\t" + userName + "\t" + pwd); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.close(conn, cstmt, rs); } } }
package com.rk.db.d_callable; import java.sql.Connection; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.rk.db.utils.JDBCUtil; /** * 使用CablleStatement执行带有输出参数的存储过程 * CALL pro_findById2(5,@NAME); * @author RK * */ public class Demo02 { public static void main(String[] args) { Connection conn = null; CallableStatement cstmt = null; ResultSet rs = null; try { //获取连接 conn = JDBCUtil.getConnection(); //准备sql String sql = "CALL pro_findById2(?,?)";//第一个?是输入参数,第二个?是输出参数 //预编译 cstmt = conn.prepareCall(sql); //设置输入参数 cstmt.setInt(1, 3); //设置输出参数(注册输出参数) /** * 参数一: 参数位置 * 参数二: 存储过程中的输出参数的jdbc类型 VARCHAR(20) */ cstmt.registerOutParameter(2, java.sql.Types.VARCHAR); //发送参数,执行结果不是返回到结果集中,而是返回到输出参数中 cstmt.executeQuery();//注意: 所有调用存储过程的sql语句都是使用executeQuery方法执行!!! //得到输出参数的值 /** * 索引值: 预编译sql中的输出参数的位置 */ String result = cstmt.getString(2); //getXX方法专门用于获取存储过程中的输出参数 System.out.println(result); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.close(conn, cstmt, rs); } } }
JDBC系列:(4)使用CablleStatement调用存储过程
原文地址:http://lsieun.blog.51cto.com/9210464/1772446