|
我们要对ORACLE数据库的存储过程进行性能测试,不知道如何直接录制脚本,所以改用JAVA代码调用存储过程,不知到各位还有没有更好的方法,我们的存储过程主要完成查询,更新,删除操作,其中查询占据了大多数。
我们在LR中写的代码如下,其余的测试脚本于此类似。
/*
* LoadRunner Java script. (Build: 609)
*
* Script Description:
*
*/
import lrapi.lr;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.CallableStatement;
import oracle.jdbc.driver.OracleTypes;
import oracle.sql.ARRAY;
public class Actions
{
ResultSet rs=null;
CallableStatement cs;
Connection con;
private String[] anArrayIn;
public int init() {
String prcname = "p_get_account_list";//修改为对应存储过程名
final String sql = "{call " + prcname + " (?,?,?,?,?,?,?,?,?,?,?,?)}";
//String[] anArrayIn = new String[]{"CID156","01","156"};//修改为对应数组参数
cs = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbcracle:thinlocalhost:1521:ADMIN","abc","abc");
//System.out.println(con);
System.out.println("连接已打开");
//oracle.sql.ArrayDescriptor anArrayDescriptor = new oracle.sql.ArrayDescriptor("ANESTEDTABLETYPE",con);
//oracle.sql.ARRAY anARRAYin = new ARRAY(anArrayDescriptor,con,anArrayIn);
cs = con.prepareCall(sql);
cs.setString(1,"001");
cs.setString(2,"0086");
cs.setString(3,"");
cs.setString(4,"");
cs.setString(5,"");
cs.setString(6,"");
cs.setString(7,"");
cs.setString(8,"");
cs.setString(9,"");
cs.setString(10,"");
cs.registerOutParameter(11,OracleTypes.CURSOR);
cs.registerOutParameter(12,OracleTypes.VARCHAR);
//System.out.println("注册失败!!!");
}catch(ClassNotFoundException e){
System.out.println("注册失败!!!");
}catch(SQLException e){
System.out.println("连接失败!!!");
e.printStackTrace();
}
return 0;
}//end of init
public int action() {
try {
cs.execute();
rs=(ResultSet)cs.getObject(11);// 取得得數据結果集合
ResultSetMetaData rmeta = rs.getMetaData();//
int numColumns=rmeta.getColumnCount();// 确定數据集的字段個數
// 取得字段名
for(int i=1;i<=numColumns;i++)
{
if(i<numColumns)
System.out.print(rmeta.getColumnName(i)+" | ");
else
System.out.println(rmeta.getColumnName(i));
}
while(rs.next())
{
for(int i=1;i<=numColumns;i++)
{
if(i<numColumns)// a,b表中的字段不一定是字符類型,我在此沒有判斷並全部使用getString方法
System.out.print(rs.getString(i)+" | ");
else
System.out.println(rs.getString(i));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}//end of action
public int end() {
if (cs != null){
try {
cs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println("关闭成功!!!");
return 0;
}//end of end
/**
public static void main(String [] args){
Actions actions = new Actions();
actions.init();
actions.action();
System.out.println("查询ACCOUNT_LIST存储过程调用结束!!!");
actions.end();
}
**/
}
期盼各位大侠的回复,谢谢 |
|