Java JDBC下执行SQL的不同方式、参数化预编译防御(五)

2014-11-23 22:28:02 · 作者: · 浏览: 4
set sum = a + b
end;
//
通过Connection的prepareCall()方法创建CallableStatement对象时需要传入"调用存储过程的SQL命令语句":
cstmt = conn.prepareCall("{call add_pro( , , )}");
存储过程的参数既有:
1. 传入参数
java程序必须为这些参数传入值,可以通过CallableStatement的setXxx()方法为"传入参数"设置值
2. 传出参数
java程序可以通过该参数获取存储过程里的值,CallableStatement需要调用registerOutParameter()方法来注册该参数,执行结束后调用CallableStatement对象的getXxx(int index)
方法来获取指定传出参数的值
code:
复制代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.sql.*;
public class CallableStatementTest
{
private String driver;
private String url;
private String user;
private String pass;
public void initParam(String paramFile)throws Exception
{
// 使用Properties类来加载属性文件
Properties props = new Properties();
props.load(new FileInputStream(paramFile));
driver = props.getProperty("driver");
url = props.getProperty("url");
user = props.getProperty("user");
pass = props.getProperty("pass");
}
public void callProcedure()throws Exception
{
// 加载驱动
Class.forName(driver);
try(
// 获取数据库连接
Connection conn = DriverManager.getConnection(url
, user , pass);
// 使用Connection来创建一个CallableStatment对象
CallableStatement cstmt = conn.prepareCall(
"{call add_pro( , , )}"))
{
cstmt.setInt(1, 4);
cstmt.setInt(2, 5);
// 注册CallableStatement的第三个参数是int类型
cstmt.registerOutParameter(3, Types.INTEGER);
// 执行存储过程
cstmt.execute();
// 获取,并输出存储过程传出参数的值。
System.out.println("执行结果是: " + cstmt.getInt(3));
}
}
public static void main(String[] args) throws Exception
{
CallableStatementTest ct = new CallableStatementTest();
ct.initParam(" mysql.ini");
ct.callProcedure();
}
}