嗨,我的java代码与oracle服务器通信时遇到了一个特定的问题。
我正在oracle中执行一个调用,以便使用存储过程检索数据。这是我的决定。
String procedure = "{call " + instnace+ "." + package+ "." + "GetRequestData(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + "}";这个存储的Proecudre接收两个值,COD_AREA和TELEFONO,然后返回18个值。
try{
pstmt.setString(1, RQ.getCOD_AREA());
pstmt.setString(2, RQ.getTELEFONO());//TELEFONO()
pstmt.executeQuery();
int o_requestid= (pstmt.getInt(3));
RP.setO_requestid(String.valueOf(o_requestid));
RP.setO_requestdate(pstmt.getString(4));
RP.setO_requesterid(pstmt.getString(5));
RP.setO_requesterfirstname(pstmt.getString(6));
RP.setO_requesterlastname(pstmt.getString(7));
RP.setO_requestercompanyname(pstmt.getString(8));
RP.setO_requesterclassname(pstmt.getString(9));
RP.setO_requesteremail(pstmt.getString(10));
RP.setO_address1(pstmt.getString(11));
RP.setO_address2(pstmt.getString(12));
RP.setO_city(pstmt.getString(13));
RP.setO_state(pstmt.getString(14));
int o_autoinstall= (pstmt.getInt(15));
RP.setO_autoinstall(String.valueOf(o_autoinstall));
RP.setO_plandesired(pstmt.getString(16));
RP.setO_riskanalisis(pstmt.getString(17));
RP.setO_status(pstmt.getString(18));
int n_error= (pstmt.getInt(19));
RP.setN_error(String.valueOf(n_error));
RP.setStr_error(pstmt.getString(20));
CerrarConexion(conn);
} 我所犯的错误是:SQL Exception executeQuery: 17041, Missing IN or OUT parameter at index:: 3,为什么我要这样做?我在堆栈溢出和其他站点上搜索,但它与插入和更新有关,但与存储过程无关。如果有人能帮我解决这个问题我很感激。
这是我的beginConnection方法:
private OracleCallableStatement beginConnection(String firmaSP) throws SystemException, Exception {
OracleCallableStatement pstmt = null;
// Se obtiene la conexion a la BD
conn = Conexion.getConnection(infoGenerico, 0);
pstmt = (OracleCallableStatement) conn.prepareCall(firmaSP);
return pstmt;
}发布于 2017-12-14 19:07:54
看上去你的参数是IN的,至少是IN的。对于需要调用的存储过程,您应该使用CallableStatement,而不是PreparedStatement,我假设您使用的是基于变量名称pstmt的存储过程。CallableStatement允许您返回值。
然后,对于期望返回值的每一个参数( it ),在使用 method执行OUT参数之前,必须先用execute()注册out参数。
将序号位置parameterIndex中的OUT参数注册到JDBC。必须在执行存储过程之前注册所有OUT参数。
例如:
cstmt.registerOutParameter(3, Types.Integer);在Java 8中,类型参数需要一个SQLType而不是一个int。
https://stackoverflow.com/questions/47820371
复制相似问题