当前位置: 代码迷 >> Oracle开发 >> java调用有返回值的存储过程,一直报错 求解,多谢
  详细解决方案

java调用有返回值的存储过程,一直报错 求解,多谢

热度:60   发布时间:2016-04-24 06:35:14.0
java调用有返回值的存储过程,一直报错 求解,谢谢
pl/sql 代码
create or replace procedure sp_pro8(spno in number,spname out varchar2) is
begin
select ename into spname from emp where empno=spno;
end;

java代码

package com.sp;
import java.sql.*;

public class Test3 {


public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@180.153.272.19:1521:BOOKSTORE","scott","oracle");
CallableStatement cs=ct.prepareCall("{call sp_pro8(?,?)");
cs.setInt(1,7788);
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR);
cs.execute();
String name=cs.getString(2);
System.out.println("名字是"+name);
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}

}

}
报错
java.lang.StringIndexOutOfBoundsException: String index out of range: 18
at java.lang.String.charAt(String.java:687)
at oracle.jdbc.driver.OracleSql.handleODBC(OracleSql.java:1065)
at oracle.jdbc.driver.OracleSql.parse(OracleSql.java:983)
at oracle.jdbc.driver.OracleSql.getSql(OracleSql.java:311)
at oracle.jdbc.driver.OracleSql.getSqlBytes(OracleSql.java:557)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:199)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:950)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1159)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3284)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3389)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4222)
at com.sp.Test3.main(Test3.java:14)

------解决思路----------------------
CallableStatement getstring 是不是从0开始的,获取第二个参数是不是应该写getString(1)?
------解决思路----------------------
引用:

是不是返回字段过长导致越界啊
  相关解决方案