Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之07. JDBC CallableStatement

–CallableStatement 简介
–调用简单的存储过程
–调用有输入参数的存储过程
–调用有输入、输出参数的存储过程
################Michael分割线####################
• CallableStatement 简介
–CallableStatement 继承PreparedStatement
–提供了调用存储过程的能力
• 调用简单的存储过程
image
先创建一个存储过程
create procedure all_user()    
select * from UserTbl
image
调用存储过程
call all_user();
image
image
F5刷新
image
ConnectionUtil.java
package com.michael.jdbc;    

import java.sql.Connection;    
import java.sql.DriverManager;    
import java.util.Properties;    

public class ConnectionUtil {    
         //第一种方法    
         public Connection getConnection(){    
                Connection conn = null;    
                 try {    
                         //Class.forName加载驱动    
                        Class.forName( "com.mysql.jdbc.Driver");    
                         //DriverManager获得连接    
                        conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jdbc_db","root","mysqladmin");    
                        return conn;    
                } catch (Exception e) {    
                        e.printStackTrace();    
                }    
                return null;    
        }    
        //第二种方法    
        public Connection getConnection(String driver,String url,String user,String password){    
                Connection conn = null;    
                try {    
                        //Class.forName加载驱动    
                        Class.forName(driver);    
                        //DriverManager获得连接    
                        conn = DriverManager.getConnection(url,user,password);    
                        return conn;    
                } catch (Exception e) {    
                        e.printStackTrace();    
                }    
                return null;    
        }    
        //第三种方法    
        public Connection openConnection(){    
                String driver = "";    
                String url = "";    
                String user = "";    
                String password = "";    
                Properties prop = new Properties();    
                Connection conn = null;    
                try {    
                        //加载属性文件    
                        prop.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties"));    
                        driver = prop.getProperty("driver");    
                        url = prop.getProperty("url");    
                        user = prop.getProperty("user");    
                        password = prop.getProperty("password");    
                        //Class.forName加载驱动    
                        Class.forName(driver);    
                        //DriverManager获得连接    
                        conn = DriverManager.getConnection(url,user,password);    
                        return conn;    
                } catch (Exception e) {    
                        e.printStackTrace();    
                }    
                return null;    
        }    

}
TestCallableStatement.java
package com.michael.jdbc;    

import java.sql.CallableStatement;    
import java.sql.Connection;    
import java.sql.ResultSet;    
import java.sql.SQLException;    

public class TestCallableStatement {    
         public static void call(){    
                Connection conn = new ConnectionUtil().openConnection();    
                 try {    
                        CallableStatement cstmt = conn.prepareCall( "{call all_user()}");    
                        ResultSet rs = cstmt.executeQuery();    
                         while(rs.next()){    
                                 int id = rs.getInt(1);    
                                String user = rs.getString(2);    
                                String password = rs.getString(3);    
                                 int age = rs.getInt(4);    
                                System.out.println(id+ ":"+user+ ":"+password+ ":"+age);    
                        }    
                } catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        } catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
        }    
}
Main.java
package com.michael.main;    

import com.michael.jdbc.TestCallableStatement;    

public class Main {    
         public static void main(String[] args) {    
                TestCallableStatement.call();    
        }    
}
image
• 调用有输入参数的存储过程
image
创建有输入参数的存储过程
create procedure insert_user( in un varchar(20), in pw varchar(20), in a int)    
insert into UserTbl( user,password,age)    
values(un,pw,a)
image
调用有输入参数的存储过程
call insert_user( 'testname', '123456',25)
image
数据己增加
image
TestCallableStatement.java
package com.michael.jdbc;    

import java.sql.CallableStatement;    
import java.sql.Connection;    
import java.sql.ResultSet;    
import java.sql.SQLException;    

public class TestCallableStatement {    
         //调用简单的存储过程    
         public static void call1(){    
                Connection conn = new ConnectionUtil().openConnection();    
                 try {    
                        CallableStatement cstmt = conn.prepareCall( "{call all_user()}");    
                        ResultSet rs = cstmt.executeQuery();    
                         while(rs.next()){    
                                 int id = rs.getInt(1);    
                                String user = rs.getString(2);    
                                String password = rs.getString(3);    
                                 int age = rs.getInt(4);    
                                System.out.println(id+ ":"+user+ ":"+password+ ":"+age);    
                        }    
                } catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        } catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
        }    
         //调用有输入参数的存储过程    
         public static void call2(){    
                Connection conn = new ConnectionUtil().openConnection();    
                 try {    
                        CallableStatement cstmt = conn.prepareCall( "{call insert_user(?,?,?)}");    
                        cstmt.setString(1, "test1");    
                        cstmt.setString(2, "test2");    
                        cstmt.setInt(3, 3);    
                        cstmt.executeUpdate();    
                } catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        } catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
        }    
}
Main.java
package com.michael.main;    

import com.michael.jdbc.TestCallableStatement;    

public class Main {    
         public static void main(String[] args) {    
                TestCallableStatement.call2();    
                TestCallableStatement.call1();    
        }    
}
image
image
• 调用有输入、输出参数的存储过程
image
创建有输入输出参数的存储过程
create procedure getAgeByName( in name varchar(20),out return_age int)    
begin    
         declare a int;    
         select age into a from UserTbl where user= name;    
         set return_age = a;    
end

image
测试查询michael
image
输出年龄11
image
调用有输入输出的存储过程
TestCallableStatement.java
package com.michael.jdbc;    

import java.sql.CallableStatement;    
import java.sql.Connection;    
import java.sql.ResultSet;    
import java.sql.SQLException;    
import java.sql.Types;    

public class TestCallableStatement {    
         //调用简单的存储过程    
         public static void call1(){    
                Connection conn = new ConnectionUtil().openConnection();    
                 try {    
                        CallableStatement cstmt = conn.prepareCall( "{call all_user()}");    
                        ResultSet rs = cstmt.executeQuery();    
                         while(rs.next()){    
                                 int id = rs.getInt(1);    
                                String user = rs.getString(2);    
                                String password = rs.getString(3);    
                                 int age = rs.getInt(4);    
                                System.out.println(id+ ":"+user+ ":"+password+ ":"+age);    
                        }    
                } catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        } catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
        }    
         //调用有输入参数的存储过程    
         public static void call2(){    
                Connection conn = new ConnectionUtil().openConnection();    
                 try {    
                        CallableStatement cstmt = conn.prepareCall( "{call insert_user(?,?,?)}");    
                        cstmt.setString(1, "test1");    
                        cstmt.setString(2, "test2");    
                        cstmt.setInt(3, 3);    
                        cstmt.executeUpdate();    
                } catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        } catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
        }    
         //调用有输入输出参数的存储过程    
         public static void call3(){    
                Connection conn = new ConnectionUtil().openConnection();    
                 try {    
                        CallableStatement cstmt = conn.prepareCall( "{call getAgeByName(?,?)}");    
                        cstmt.setString(1, "redking");    
                         //注册输出参数    
                        cstmt.registerOutParameter(2, Types.INTEGER);    
                        cstmt.execute();    
                         int age = cstmt.getInt(2);    
                        System.out.println(age);    
                } catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        } catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
        }    
}
Main.java
package com.michael.main;    

import com.michael.jdbc.TestCallableStatement;    

public class Main {    
         public static void main(String[] args) {    
                 //TestCallableStatement.call2();    
                 //TestCallableStatement.call1();    
                TestCallableStatement.call3();    
        }    
}

输出redking年龄为22
image
################Michael分割线####################
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值