在MySQL中创建简易的存储过程:
delimiter // 将MySQL结束符改为//
create procedure add_pro(a int,b int,out sum int) sum使用out修饰是传出参数
begin
set sum=a+b;
end;
//
CallableStatement对象可以通过Connection对象的prepareCall方法来创建。
cstm=con.prepareCall("{call add_pro(?,?,?)}");
cstm可以通过setXXX为传入参数设置值。
传出参数就是java程序可以通过该参数获取存储过程里的值。
cstm.registerOutParameter(3.Types.INTEGER); 注册cstm第三个参数是int类型
接下来就可以调用cstm的execute方法来执行存储过程了,执行结束后就可以通过cstm对象的
getXXX(int index)方法来获取指定传出参数。
完整示例如下:
import java.io.IOException;
import java.io.InputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Properties;
public class CallTest {
public static String url;
public static String driver;
public static String username;
public static String password;
public static Connection con;
public static CallableStatement cstm;
public static Properties p;
public static InputStream is;
static
{
try {
p=new Properties();
is=CallTest.class.getClassLoader().getResourceAsStream("mysql.properties");
p.load(is);
url=p.getProperty("url");
driver=p.getProperty("driver");
username=p.getProperty("username");
password=p.getProperty("password");
Class.forName(driver);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
}
public static void main(String []args)
{
try {
con=DriverManager.getConnection(url, username, password);
cstm=con.prepareCall("{call add_pro(?,?,?)}");
cstm.setInt(1, 4);
cstm.setInt(2, 19);
cstm.registerOutParameter(3, Types.INTEGER);
cstm.execute();
System.out.println(cstm.getInt(3));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
本文出自 “j2ee” 博客,请务必保留此出处http://1031627059.blog.51cto.com/4204799/1720984