import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class ProcedureDemo {
// 调用mysql的存储过程
// 演示JDBC操作MySQL存储过程
public static void main(String[] args) {
Connection conn = null;
//调用存储过程专用的接口
CallableStatement cstmt = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/mydb2?user=root&password=123456";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url);
//存储过程特定的语法
String sql = "{call add_pro(?,?,?)}";
cstmt = conn.prepareCall(sql );
// 绑三个参数(前二个是输入,后一个是输出)
cstmt.setInt(1, 100);
cstmt.setInt(2, 200);
// //注册一个输出参数,
//其中Types.INTEGER表示SQL与JDBC之前的是映射类型
cstmt.registerOutParameter(3,Types.INTEGER);
//调用存储过程
boolean i = cstmt.execute();
System.out.println("flag : "+i);
//取得执行结果
int sum = cstmt.getInt(3);
System.out.println("sum : "+sum);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(rs!=null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(cstmt!=null)
cstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
执行结果:
flag : false
sum : 300
注意: 先要在mysql中执行delimiter //
然后在mysql中创建存储过程
create procedure add_pro(a int,b int , out sum int)
begin
set sum = a + b;
end;
by hacket