自动化测试中,数据的生产很重要,对于复杂的业务,数据的生产不能单靠后台码字实现各种表的关联产生数据,所以后台直接调用相应的数据库存储过程就是一个很好的方案。直接贴代码出来(菜鸟一枚,关于方法的拆分做的不好,将就一下):
package dao;
import oracle.jdbc.internal.OracleTypes;
import util.DataBase;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author wy
* @date 2019-02-21 上午 11:02
* 调用数据库的存储过程
*/
public class DataProviderSet_procedure {
private static CallableStatement statement;
private static Connection ct;
public static void main(String[] args){
call();
}
//调用过程
public static void call(){
try{
//加载驱动
// Class.forName(DataBase.JdbcDriver);
Class.forName("oracle.jdbc.driver.OracleDriver");
//取得连接对象
// ct=DataBase.connection;
ct= DriverManager.getConnection("jdbc:oracle:thin:@192.168.2.119:1521:test","root","1234");
//调用的存储过程名称SELENIUM_PRO_CREATE(?,?),括号内是参数
statement=ct.prepareCall("{call SELENIUM_PRO_CREATE(?,?)}");
//如果存储过程有in参数需要设置参数,statement.setInt(1, param);
//要声明,这里由于存储过程都是out所以用这个
statement.registerOutParameter(1, OracleTypes.VARCHAR);
statement.registerOutParameter(2, OracleTypes.VARCHAR);
//下面是结果集的声明
// statement.registerOutParameter(3,OracleTypes.CURSOR);
statement.execute();
//获取执行的返回值
String result =statement.getString(1);
String result1=statement.getString(2);
System.out.println("result1:"+result);
//结果集的返回方式
// List<Map> list=new ArrayList<Map>();
ResultSet rs=(ResultSet) statement.getObject(3);
while (rs.next()){
Map map=new HashMap();
map.put("p_zfbdcdyh",rs.getInt("p_zfbdcdyh"));
map.put("p_ffbdcdyh",rs.getInt("p_ffbdcdyh"));
list.add(map);
}
//
// System.out.println("list_sizt"+list.size());
}catch (Exception er){
er.getStackTrace();
}finally {
//关闭连接
try{
System.out.println("要关闭了");
statement.close();
}catch(Exception er){
er.printStackTrace();
}
try{
ct.close();
}catch(Exception er){
er.printStackTrace();
}
}
}
}