数据库:
CREATE PROCEDURE pro_user(
IN username1 VARCHAR(20),OUT count_num INT
)
BEGIN
SELECT count(*) into count_num from user where username =username1;
END;
DROP PROCEDURE IF EXISTS pro_user;
java代码示例:
public static void main(String[] args){
//加载驱动类 Connection connection =null; PreparedStatement ps =null; try { //下面好几个接口都是java自带的jdbc里面的接口,几乎没有mysql包里面的接口 实现类是mysql实现的 Class.forName("com.mysql.jdbc.Driver");//这个就是利用反射加载类了 //建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时,这是Connection对象 //管理的一个要点) //真正开发中,为了提高效率,都会使用连接池来管理对象信息 connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8","root","123456"); String sql = "{CALL pro_user(?,?)}"; //调用存储过程 参数要写对 结果放到后面 CallableStatement cstm = connection.prepareCall(sql); //实例化对象cstm cstm.setString(1, "yiyi"); //存储过程输入参数 cstm.registerOutParameter(2, Types.INTEGER); // 设置返回值类型 即返回值 cstm.execute(); // 执行存储过程 System.out.println(cstm.getInt(2)); cstm.close(); connection.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(ps!=null){ try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }